如何获取ListView的项目onItemClick的游标值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取ListView的项目onItemClick的游标值?相关的知识,希望对你有一定的参考价值。
我创建了一个数据库,其中包含具有列(_id,标题等)的表(类别)。我想从我的数据库中读取这些类别的数据,并将其列出在ListView
中。
这是我的代码:
public class MainActivity extends listActivity{
private ArrayAdapter arrayAdapter;
ArrayList results = new ArrayList();
ListView catlist;
Cursor cur;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
catlist = getListView();
int parentid = getIntent().getIntExtra("catid", 0);
openAndQueryDatabase(parentid);
displayCatListView();
}
private void displayCatListView() {
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, results));
catlist.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v,
final int position, long id) {
Toast.makeText(MainActivity.this,
"List View Clicked:" + position, Toast.LENGTH_LONG)
.show();
}
});
}
private void openAndQueryDatabase(int parentid) {
DataBaseHelper db = new DataBaseHelper(this);
SQLiteDatabase dbr = db.getReadableDatabase();
cur = dbr.rawQuery(
"SELECT _id, title, has_sub FROM categories where parent_id=?",
new String[] { String.valueOf(parentid) });
if (cur != null) {
while (cur.moveToNext()) {
int cat_id = cur.getInt(cur.getColumnIndex("_id"));
String cattitle = cur.getString(cur.getColumnIndex("title"));
int has_sub = cur.getInt(cur.getColumnIndex("has_sub"));
results.add(cat_id + cattitle + has_sub);
}
cur.close();
}
db.close();
}
}
- 我可以获取项目的位置onItemClick,但我想获取其行的_id onItemClick。我该怎么做?
- 我是新来的。我的代码中有任何错误吗?
非常感谢。
答案
代替
int cat_id = cur.getInt(cur.getColumnIndex("_id"));
String cattitle = cur.getString(cur.getColumnIndex("title"));
int has_sub = cur.getInt(cur.getColumnIndex("has_sub"));
results.add(cat_id + cattitle + has_sub);
创建一个Category类以包含这些值,并使用参数化的ArrayList。有点像
class Category {
public int cat_id;
public String cattitle;
public int has_sub;
public Category(int cat_id, ...) {
// constructor logic here
}
}
和
results.add(new Category(cat_id, cattitle, has_sub));
这样,您可以像这样设置onItemClickListener:
catlist.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v,
final int position, long id) {
Category clickedCategory = results.get(position);
int id = clickedCategory.cat_id;
// do something with id
}
});
您的ArrayList是ArrayAdapter的数据源,position
对应于其中单击的Category的索引。
另一答案
使用CursorAdapter(http://developer.android.com/reference/android/widget/CursorAdapter.html)代替,当您使用ArrayAdapter时,它超出了内存分配,并且如果更改了db,也不会收到通知。
此外,如果使用CursorAdapter,您将拥有
public void onItemClick(AdapterView<?> parent, View v, final int position, long id)
“ id”参数将与表的_id字段一致
要获得整行就做
adapter.getItem(int position)
以上是关于如何获取ListView的项目onItemClick的游标值?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 firebase 获取 listView 中每个项目的数据?
如何从 ListView 获取项目并将这些项目转换为 ArrayList?
如何从 ListView setOnItemClickListener 获取项目值?