5

由于此处的另一个答案,我收到了这个问题,但没有解释如何做我所问 的如何在使用自定义适配器时获取 onItemClick(ListView) 中的行的 ID?

在那个问题中接受的答案是我需要的,因为我也在制作自己的自定义适配器(CursorAdapter),因此我会遇到同样的问题。问题是我不知道如何做到这一点。我正在查看文档,但不确定如何从游标访问 _id 列。由于 Doc 没有常量,我们可以从我那里获得该信息。任何解决它的帮助将不胜感激。

编辑:我不清楚我的问题是什么,但只是想澄清一下,就像标题一样,我如何覆盖我创建的 CursorAdapter 自定义类中的 getItemId() 方法?

4

2 回答 2

9

假设您没有 Cursor 作为适配器的成员:

@Override
public long getItemId(int position) {
    Cursor cursor = getCursor();
    cursor.moveToPosition(position);
    return cursor.getLong(mCursor.getColumnIndex("_id"));
}
于 2012-06-05T03:55:43.493 回答
4

我知道这并不能回答提出的问题,但 Sam 解决了这个问题。我想我会发布这个,因为 OP 部分似乎有些混乱。

以下是onListItemClick来自包含使用自定义光标适配器创建的列表的活动的方法:

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    // Your code here
}

long id是单击的行中包含的数据的行 ID(当列表由游标适配器提供时)。无需覆盖getItemId.

getItemId如果您执行诸如将不同行中的信息放入单行之类的操作,则只需覆盖(根据我的经验)。只要列表行的所有数据都来自数据库中的同一行,就没有必要那么麻烦。

我想您可能需要使用它的另一次是,如果您从游标中获取数据并将其放入数组中,然后使用数组适配器......但这似乎很迂回......

于 2012-06-05T04:13:01.293 回答