1

public View getView(int position, View convertView, ViewGroup parent)に次の(テスト)コードを含むアダプターがあります。

    Cursor itemCursor = (Cursor) getItem(position);
    Cursor itemCursor2 = (Cursor) getItem(position+1);

    String itemTitle = itemCursor.getString(itemCursor
            .getColumnIndex(ItemColumns.TITLE));
    String itemTitle2 = itemCursor2.getString(itemCursor2
            .getColumnIndex(ItemColumns.TITLE));

「DragSortCursorAdapter」をオーバーライドするので、getItem() は次のようにオーバーライドされます。

@Override
public Object getItem(int position) {
    int item = mListMapping.get(position, position);
    return super.getItem(item);
    //return super.getItem(position);
}

ここから呼び出される getItem は、「android.support.v4.widget.CursorAdapter.getItem」からの通常の実装です。

問題は、itemCursor と itemCursor2 が常に同じオブジェクトであることです。getItem が異なる引数で呼び出され、画面に出力したリストには異なる値しか表示されないため、オブジェクト ID とすべてが同じです。

つまり、アダプターがリストを反復すると、次のようになります。

最初のリスト項目:

Cursor itemCursor = (Cursor) getItem(0);
Cursor itemCursor2 = (Cursor) getItem(0+1);

itemCursor と itemCursor2 は両方とも 413d4800 です

2 番目のリスト項目:

Cursor itemCursor = (Cursor) getItem(1);
Cursor itemCursor2 = (Cursor) getItem(1+1);

itemCursor と itemCursor2 は両方とも 4155aef8 になりました

少なくとも最初の反復の itemCursor2 と 2 番目の反復の itemCursor2 は同一であるべきではありませんか?

いずれにせよ - 誰かがここで何が起こっているのか私を助けてくれますか? どちらも「android.content.ContentResolver$CursorWrapperInner@4155aef8」というタイプで、関連する場合と関連しない場合があります-よくわかりません。

EDITオーバーライドされた getItem() が機能しています。mListMapping.get(位置、位置); は正しい値を返しますが、itemは実際には 2 つの異なる数値であり、同じオブジェクトを返します。

4

1 に答える 1

9

問題は、itemCursor と itemCursor2 が常に同じオブジェクトであることです。

正しい。

getItem が異なる引数で呼び出されるため、これがどのように可能かわかりません

多くのメソッドは、異なる引数を指定して同じ値を返すことができます。

Aは aCursorAdapterをラップしCursorます。getItem()常にthis を返しますCursor。ただし、指定した位置になるようgetItem()に の内部インデックスをCursor配置します。したがって、Cursorそれ自体は同じオブジェクトですが、内部の位置が異なるため、Cursorメソッドの戻り値は異なります。getString()Cursor

ソース コードを調べるgetItem()CursorAdapterこの動作を確認できます。

于 2013-05-14T17:13:20.807 に答える