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