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

如何将一个查找特定项目的一个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")); }

(我试过谷歌搜索,但只似乎找到了如何获得所选项目的位置)

谢谢!

--------------解决方案-------------

你应该试试

//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。

当你说:“......重新选择在活动的onCreate方法的项目......”,你的意思是,当用户返回到ListView活动,不管项目是先前选择的,现在目前在屏幕的顶部(假设足够的项目出现在它下面的列表)?

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

或者是出于某种原因无法满足您的一个选择吗? 你真的需要,而不是找出从位置_id

分类:java的 时间:2015-03-15 人气:0
本文关键词: Java中,机器人
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.419 (s). 10 q(s)