获取ListView中项目的位置?

时间:2011-04-16 06:42:19

标签: java android

如何在ListView中找到特定项目的位置? (由SimpleCursorAdapter填充)。

我问的原因:listview设置为singleChoice模式。当用户关闭并重新打开应用程序时,我希望记住用户的选择。

到目前为止,我的方式是当用户点击某个项目时,所选项目的ID会保存到首选项中。我需要学习的是如何重新填充活动的onCreate方法中的项目。

我保存所选项目ID的代码:

    @Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    Cursor c = (Cursor) l.getItemAtPosition(position);
    selectedItem = c.getLong(c.getColumnIndex("_id"));
}

(我尝试使用Google搜索,但似乎只是找到了如何获得所选项目的位置)

谢谢!

3 个答案:

答案 0 :(得分:15)

你应该试试

//SimpleCursorAdapter adapter;
final int position = adapter.getCursor().getPosition();

API文档:

public abstract int getPosition () 

自:API级别1

  

返回的当前位置   光标在行集中。价值是   从零开始。当行集是第一个时   返回光标将在positon   -1,在第一行之前。在最后一行返回另一行之后   调用next()将离开光标   超过最后一个条目,在...的位置   count()

<强>返回 当前光标位置。

<强>更新

根据适配器使用的ID获取项目的位置:

private int getItemPositionByAdapterId(final long id)
{
    for (int i = 0; i < adapter.getCount(); i++)
    {
        if (adapter.getItemId(i) == id)
            return i;
    }
    return -1;
}

根据基础对象的属性(成员值)获取项目的位置

//here i use `id`, which i assume is a member of a `MyObject` class, 
//and this class is used to represent the data of the items inside your list:
private int getItemPositionByObjectId(final long id)
{
    for (int i = 0; i < adapter.getCount(); i++)
    {
        if (((MyObject)adapter.getItem(i)).getId() == id)
            return i;
    }
    return -1;
}

答案 1 :(得分:3)

我在自己的应用程序中直截了当地说:

long lastItem = prefs.getLong(getPreferenceName(), -1);
if (lastItem >= 0) {
    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        if (lastItem == cursor.getLong(0)) {
            spinner.setSelection(cursor.getPosition());
            break;
        }
        cursor.moveToNext();
    }
}

Spinner用光标的内容填充,所以我只是浏览它们并与所选的项目ID进行比较。在你的情况下,这将是一个ListView。

答案 2 :(得分:1)

当你说“...重新选择活动的onCreate方法中的项目......”时,你的意思是当用户返回ListView活动时,无论以前选择什么项目,现在都是屏幕(假设有足够的项目出现在它下面的列表中)?

如果是这样,那么从onListItemClick开始,您还应该努力保存position的值,因为它会告诉您所选项目列表中的位置。这样您就不需要从_id反向查找位置。

或者出于某种原因这不是您的选择吗?你真的需要找出_id的位置吗?