getItem(position)为不同的position值返回相同的对象

时间:2013-05-14 16:47:14

标签: android listview cursor adapter listadapter

我在公共视图中有一个带有以下(测试)代码的适配器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(position,position);返回正确的值, item 确实是两个不同的数字 - 返回相同的对象。

1 个答案:

答案 0 :(得分:9)

  

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

正确。

  

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

许多方法可以在给定不同参数的情况下返回相同的值。

CursorAdapter包裹CursorgetItem()始终返回此Cursor。但是,getItem()会将Cursor的内部索引定位为指定位置。因此,虽然Cursor本身是同一个对象,但CursorgetString()等方法返回的内容会有所不同,因为Cursor内的内部位置不同。

您可以通过检查the CursorAdapter source code中的getItem()来查看此操作。