簡體   English   中英

獲取ListView中項目的位置?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM