从与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
            }
});
    

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...