[英]Get position of an item within a 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();
}
}
Spinner會填充光標的內容,因此我只需查看它們並與所選的項目ID進行比較。 在你的情況下,這將是一個ListView。
當您說“...重新選擇活動的onCreate方法中的項目......”時,您的意思是當用戶返回ListView活動時,無論先前選擇了什么項目,現在都位於屏幕頂部(假設下面的列表中出現了足夠的項目)?
如果是這樣,那么從onListItemClick開始,您還應該努力保存position
值,因為它會告訴您所選項目列表中的位置。 這將允許您不需要從_id
反向查找位置。
或者由於某種原因,這不是您的選擇嗎? 你真的需要從_id
找出位置嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.