获取一个ListView中的项目的位置?

如何findListView中特定项目的位置? (由SimpleCursorAdapter填充)。

我问的原因:列表视图设置为singleChoice模式。 当用户closures并重新打开应用程序时,我希望用户的select被记住。

到目前为止,我已经完成的方式是当用户点击一个项目时,所选项目的ID被保存到首选项。 我需要学习的是如何在重新填充后重新select活动的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")); } 

(我尝试了谷歌search,但似乎只是find如何获得所选项目的位置)

谢谢!

Solutions Collecting From Web of "获取一个ListView中的项目的位置?"

你应该试试

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

API文档:

 public abstract int getPosition () 

因为:API级别1

返回行集中游标的当前位置。 该值是从零开始的。 当行集合第一次返回时,游标将位于第一行之前的-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; } 

我直接在我自己的应用程序中执行此操作:

 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(); } } 

微调器是填充光标的内容,所以我只是通过他们看,并与选定的项目ID进行比较。 在你的情况下,这将是一个ListView。

当你说,“…重新select活动的onCreate方法中的项目…”,你的意思是,当用户返回到ListView活动,以前select的任何项目,现在正在屏幕的顶部(假设足够的项目出现在下面的列表中)?

如果是这样,那么从onListItemClick,你也应该努力保存position的价值,因为它告诉你在所选项目的列表中的位置。 这将允许您不需要从_id反向查找位置。

或者是由于某种原因,不适合你的目的? 你真的需要从_id找出位置吗?