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 总是同一个对象。使用相同的对象 ID 和所有内容 - 我不知道这是怎么可能的,因为 getItem 是用不同的参数调用的,而且我输出到屏幕的列表只显示不同的值。

换句话说,当我的适配器迭代列表时,它似乎是这样的:

第一个清单项目:

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

itemCursor 和 itemCursor2 都是 413d4800

第二个清单项目:

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

itemCursor 和 itemCursor2 现在都是 4155aef8

至少第一次迭代中的 itemCursor2 和第二次迭代中的 itemCursor2 不应该相同吗?

无论如何 - 有人可以帮我解决这里发生的事情吗?它们都有“android.content.ContentResolver$CursorWrapperInner@4155aef8”类型,可能相关也可能不相关——我不确定。

编辑被覆盖的 getItem() 正在工作。mListMapping.get(位置,位置);返回正确的值,并且item确实是两个不同的数字 - 返回相同的对象。

4

1 回答 1

9

问题是 itemCursor 和 itemCursor2 总是同一个对象。

正确的。

我不知道这是怎么可能的,因为 getItem 是用不同的参数调用的

给定不同的参数,许多方法可以返回相同的值。

ACursorAdapter包裹 a CursorgetItem()始终返回 this Cursor。但是,getItem()会将 的内部索引定位Cursor到指定位置。因此,虽然Cursor本身是同一个对象,但Cursor类似方法的返回值getString()会有所不同,因为 内部位置Cursor不同。

通过查看源代码getItem(),您可以看到这一点CursorAdapter

于 2013-05-14T17:13:20.807 回答