6

リスト ビューがあり、フィルタリングを実装しました。

アイテム A、B、C があるとします。フィルター ボックスに B と入力すると、アイテム B のみが表示され、リストの位置 0 になります (位置 1 になる前)。したがって、onClick アイテムを呼び出すと、ID/位置 0 が取得され、B ではなく A に関する詳細が表示されます。

これはonclickコードです:

ListView lv = getListView();
lv.setTextFilterEnabled(true);

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {

    Poi poi = pois.get((int)id);
    goPOIDETAIL(poi);

}
});

id と position は同じ値です。

元の位置を取得する方法、またはクリックした実際のアイテムを示す他の値を取得する方法はありますか?

ありがとう

4

5 に答える 5

0

IDインデックスは同じではありません。もちろん、getItemId()アダプタのメソッドでアイテム インデックスを返すことはできますが、その場合、このメソッドによってアイテムが正しく識別されるとは期待しないでください。各アイテムに一意の ID を指定してみてください。この考え方は、データベース内の各レコードの ID に似ており、変更されることはなく (各レコードを確実に識別できます)、データベースからデータを取得するときに簡単に実装できます。

ただし、アイテムに一意の ID がなく、わざわざ ID を提供したくない場合は、別の方法があります (以下のアダプターのサンプル コードを参照してください)。

public MyAdapter extends BaseAdapter {
    private List<Item> items;
    private List<Item> displayedItems;

    public MyAdapter(List<Item> items) {
        this.items=items;
        this.displayedItems=items;
    }

    public filter(String query) {
        if(query.isEmpty()) {
            displayedItems=items;
        } else {
            displayedItems=new ArrayList<Item>();
            for (Item item : items) {
                displayedItems.add(...) //add items matching your query
            }
        }
        notifyDataSetChanged();
    }

    //...
    //NOTE: we use displayedItems in getSize(), getView() and other callbacks 
}
于 2012-12-06T10:15:21.807 に答える
0

あなたが試すことができます:

@Override
public boolean hasStableIds() {
    return false;
}

あなたのアダプターで

于 2012-12-06T10:15:29.807 に答える
0

データベースを使用している場合は、フィルタされたリストに非表示フィールドとしてロードできる _id キーがあります。項目をクリックすると、_id キーでデータをクエリできます。データベースを使用していない場合は、行要素に非表示の id 要素を追加することもできます。

于 2016-01-25T13:02:19.997 に答える
0

I think the problem is in the way you manage your filter. You should get the object with selected id not from the original List (or array) but from the filtered one.

I used something like it in this post from my blog. Hope this help you

于 2012-12-06T09:58:27.527 に答える