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()を使用する必要はありません。
何か案は?
ありがとう