如何解决从与SimpleCursorAdapter绑定的ListView中获取选定的项
|| 我是Android开发的新手...来自iPhone和.Net背景。我已经看到与此问题非常相似的问题,但是没有一个问题与SimpleCursorAdapter有关。 我有一个基本的ListActivity,它使用游标将来自SQLite查询的数据绑定到我的ListView:ListAdapter adapter = new SimpleCursorAdapter(
this,android.R.layout.simple_list_item_1,c,new String[] {\"name\"},new int[] {android.R.id.text1});
setListAdapter(adapter);
然后,当单击一个项目时:
public void onListItemClick(ListView l,View v,int position,long id) {
super.onListItemClick(l,v,position,id);
//Difference between this:
Cursor c = (cursor)l.getItemAtPosition(position);
//and this??
Cursor c = (Cursor)l.getAdapter().getItem(position);
int categoryId = c.getInt(0);
}
这是获取所选元素ID的正确方法吗?这似乎很奇怪,因为在数据库关闭后(即在我绑定之后),我不认为可以使用游标。当我似乎找不到从该ID获取实际商品的方法时,传递的ID有什么意义?另外,我不明白为什么getItemAtPosition()将返回一个游标...游标绑定到整个列表;不只是一排。最后,如果这是正确的,则显示的两种获取光标的方式之间是否有区别?谢谢。
解决方法
所以有两点:获取游标后,您想调用
startManagingCursor
。这将游标的生命周期与Activity的生命周期联系在一起(因此,当Activity被破坏时,游标将被关闭/清理)。
startManagingCursor(c);
ListAdapter adapter = new SimpleCursorAdapter(
this,android.R.layout.simple_list_item_1,c,new String[] {\"name\"},new int[] {android.R.id.text1});
setListAdapter(adapter);
另外,数据库没有关闭,Cursor通常保持与数据库的实时连接(因此ListView可以滚动并执行可能需要将来访问Cursor内容的性质的事情。
对于您的核心问题,在onListItemClick
中最简单的方法是:
Cursor c = ((SimpleCursorAdapter)l.getAdapter()).getCursor();
c.moveToPosition(position);
然后,您可以使用ѭ6来获取ID(通常情况下,假设您将ID列作为第一列获取)。但是,请注意,id是作为签名的一部分传递的(请参见public void onListItemClick(ListView l,View v,int position,long id)
中的最后一个参数),因此您确实不需要再次获取它(但是如果要刻录循环,当然可以。)要访问其他列,您可以执行相同的操作,只需更改列索引。
希望能有所帮助。
, 另一种方式:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent,View arg1,long arg3) {
Cursor cursor = (Cursor) parent.getAdapter().getItem(position);
//TODO
}
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。