如何从CursorAdapter覆盖getItemId(int pos)方法?

时间:2012-06-05 03:42:00

标签: android android-cursoradapter

由于这里的另一个答案,我得到了这个问题,但没有解释如何做我要问的问题 How to get the id of the row in onItemClick(ListView) when using a custom Adapter?

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

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

2 个答案:

答案 0 :(得分:9)

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

@Override
public long getItemId(int position) {
    Cursor cursor = getCursor();
    cursor.moveToPosition(position);
    return cursor.getLong(mCursor.getColumnIndex("_id"));
}

答案 1 :(得分:4)

我知道这并没有回答提出的问题,但Sam照顾到了这一点。我以为我会发布这个,因为在OP部分似乎有些混乱。

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

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

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

如果您执行类似将来自不同行的信息放入一行中,您只需要覆盖getItemId(根据我的经验)。只要列表行的所有数据都来自数据库中的同一行,就没有必要去解决这个问题。

我想另一次你可能需要使用它,如果你从光标中取出数据然后将它放入一个数组然后使用一个数组适配器......但这看起来很迂回......