4

AdapterView.OnItemClickListener のいくつかの動作について質問があり、少し困惑しています。

カスタム CursorAdapter に裏打ちされた ListView があります。Cursor は LoaderManager によって管理されています。ListView には OnItemClickListener もあります。データが正しく読み込まれ、ListView が正しく読み込まれます (この場合、多くの項目が含まれています)。

私が見つけたのは、onItemClickへの位置引数が、リスト全体ではなく、画面に表示されているアイテムに対して0ベースであることです。たとえば、下にスクロールして最初の表示可能な項目を選択すると、実際には、選択した項目ではなく、リストの最初の項目 (表示されていない項目) が取得されます。デバッガーを使用すると、選択した項目がリストのはるか下にあるにもかかわらず、位置の値が実際には 0 になっていることがわかります。

奇妙なことに、LoaderManager を使い始めるまで、これはうまく機能していました。

v4 サポート ライブラリを使用しています。

私がこのようなことをすると:

public void onItemClick( AdapterView<?> parent, View listItem, int position, long id ) {

    Cursor c = myListAdapter.getItem( parent.getFirstVisiblePosition() + position );

    // do stuff

すると、実際に選択したデータが得られるのですが、なんとなくこれは違う気がします。getFirstVisiblePosition()を使用する必要はありません。

何か案は?

ありがとう

4

1 に答える 1