Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 由sql db使用onListItemClick填充的Listview在其他活动中填充文本视图_Android_Sqlite_Listview_Textview_Onclicklistener - Fatal编程技术网

Android 由sql db使用onListItemClick填充的Listview在其他活动中填充文本视图

Android 由sql db使用onListItemClick填充的Listview在其他活动中填充文本视图,android,sqlite,listview,textview,onclicklistener,Android,Sqlite,Listview,Textview,Onclicklistener,我正在从数据库的名称填充列表视图。这一切都很好。单击名为的Listitem后,我想将onListItemClick设置为在另一个活动中填写文本视图。这就是我被困的地方 下面是正在工作的我的listview活动的代码: public class DataListView extends ListActivity { private ArrayList<String> results = new ArrayList<String>(); private SQLiteDat

我正在从数据库的名称填充列表视图。这一切都很好。单击名为的Listitem后,我想将onListItemClick设置为在另一个活动中填写文本视图。这就是我被困的地方

下面是正在工作的我的listview活动的代码:

public class DataListView extends ListActivity {

private ArrayList<String> results = new ArrayList<String>();

private SQLiteDatabase newDB;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.hotelslist);

    openAndQueryDatabase();

    displayResultList();


}
private void displayResultList() {
    ListView hotelslist = (ListView) findViewById(android.R.id.list);
    hotelslist.setAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, results));
   getListView().setTextFilterEnabled(true);



}

 @Override
  public void onListItemClick(ListView l, View v, int position, long id) {

     super.onListItemClick(l, v, position, id);
      Toast.makeText(getBaseContext(), l.getItemAtPosition(position).toString(), Toast.LENGTH_SHORT).show();


  }

private void openAndQueryDatabase() {
    try {

        DataBaseHelper newDB = new DataBaseHelper(this, "mydatabase.sqlite");

        SQLiteDatabase sdb = newDB.getReadableDatabase();


        Cursor c = sdb.rawQuery("SELECT name FROM hotel ORDER BY name ASC", null);



if (c != null ) {
    if  (c.moveToFirst()) {
        int i = 0;
        do {
            i++;
            String name = c.getString(c.getColumnIndex("name"));


            results.add(name);
        }while (c.moveToNext());
    } 

}       



    } catch (SQLiteException se ) {
        Log.e(getClass().getSimpleName(), "Could not create or Open the database");
    } finally {
        if (newDB != null) 

            newDB.close();
    }

}

} 
除名称外,该表还包含地址和电话列。我希望用以下xml在另一个活动的textviews addressfill和telephonefill中填写此数据:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >
 <TextView
    android:id="@+id/name"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
     />
 <TextView
    android:id="@+id/address"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Address" />
 <TextView
    android:id="@+id/addressfill"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />
  <TextView
    android:id="@+id/telephone"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Telephone number" />
  <TextView
    android:id="@+id/telephonefill"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />


</LinearLayout>
我试着阅读了很多教程和这里的很多帖子,但是没有找到正确的答案


对于onListItemClick,我必须使用什么代码,在我的活动中使用我提供的xml。非常感谢您的帮助

如果要在列表项上设置侦听器,则需要扩展阵列适配器并将侦听器代码放入适配器中:

public class SettingsListAdapter extends ArrayAdapter<String> {

     @Override
     public View getView(int position, View convertView, ViewGroup parent){
          // put your listener in here
                  mybutton.setOnClickListener(new View.OnClickListener() {          
                @Override
                public void onClick(View v) {
                    // do work here
                }

     }


}
换句话说,simplelistadapter不足以满足您的需要,您需要创建自己的

编辑

下面是创建自定义阵列适配器的一个很好的示例:

在OnlistItem中单击create a Intent并将名称放入Intent:

Intent Intent=new IntentDataListView.this,SecondActivity.class; intent.putExtraname,l.getItemAtPositionposition.toString; 星状体; 您必须将SecondActivity更改为将接收名称的活动的类名

在第二个活动的onCreate中,读取字符串:

字符串名称=getIntent.getStringExtraname; ifname!=空的{ //对名称进行一些处理,例如选择地址 //和数据库中要显示的电话号码 } 但是,由于您使用的是数据库,因此确实应该使用。使用光标更有用、更高效

如何对表中的其他数据列(如地址和电话)执行此操作

您有两个选择:

在第二个活动中,使用如下查询:

"SELECT address, telephone FROM Hotel WHERE name = '" + name + "'"
但如果多家酒店的名称相同,您将获得多个地址

将第一个活动中的查询更改为:

"SELECT name, address, telephone FROM Hotel ORDER BY name"
现在,在onListItemClick中,您可以同时传递姓名、地址和电话号码,但您需要将地址和电话号码存储在某个位置。。。这就是a非常有用的地方


谢谢你的回答,但我听不懂。我有一个列表,当单击一个列表项时,我想转到另一个活动,该活动在我创建的文本视图中显示姓名、地址和电话。我不想添加一个额外的按钮。我能否将字符串以某种方式传递给我的新活动,然后将其放入文本视图中?该按钮只是一个示例-您可以将侦听器置于任何视图中。当事件触发时,打开新的活动。我的设计风格通常将侦听器连接到整个布局,因此轻触列表项的任何部分都会触发事件。感谢您的帮助,但这对我来说似乎有点太复杂,调整太大了。我选择了萨姆给我的另一个选择。谢谢你。这对名字很有用。如何处理表中的其他列数据,如地址和电话?谢谢。我使用了您的第一个选项,并将所有字符串保存在我创建的另一个数组中。这非常有效。