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

Android getItem(position)为不同的位置值返回相同的对象,android,listview,cursor,adapter,listadapter,Android,Listview,Cursor,Adapter,Listadapter,我有一个适配器,在public View getViewint position、View convertView、ViewGroup parent中有以下测试代码: 我重写DragSortCursorAdapter,因此getItem被重写为如下所示: @Override public Object getItem(int position) { int item = mListMapping.get(position, position); return super.getI

我有一个适配器,在public View getViewint position、View convertView、ViewGroup parent中有以下测试代码:

我重写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,并且我输出到屏幕的列表只显示不同的值

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

@Override
public Object getItem(int position) {
    int item = mListMapping.get(position, position);
    return super.getItem(item);
    //return super.getItem(position);
}
第一个清单项目:

itemCursor和itemCursor2都是413d4800

第二个清单项目:

itemCursor和itemCursor2现在都是4155aef8

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

在任何情况下,有人能帮我处理这里发生的事情吗?它们都具有android.content.ContentResolver类型$CursorWrapperInner@4155aef8这可能相关,也可能无关——我不确定

编辑覆盖的getItem正在工作。mListMapping.getposition,position;返回正确的值,项实际上是两个不同的数字-返回相同的对象

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

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

对于不同的参数,许多方法可以返回相同的值

光标适配器包装光标。getItem将始终返回此游标。但是,getItem会将游标的内部索引定位到指定的位置。因此,虽然游标本身是同一个对象,但对于getString等方法,游标返回的内容将有所不同,因为游标内部的位置不同

通过在中检查getItem,可以看到这一点

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

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

对于不同的参数,许多方法可以返回相同的值

光标适配器包装光标。getItem将始终返回此游标。但是,getItem会将游标的内部索引定位到指定的位置。因此,虽然游标本身是同一个对象,但对于getString等方法,游标返回的内容将有所不同,因为游标内部的位置不同


通过在中检查getItem,您可以看到这一点。

我理解。但显而易见的下一个问题是他们。如何对列表中的游标重新排序。我确实运行了notifydatasetchanged,但它需要半秒钟的时间来创建一些奇怪的闪烁,除非我能确保Android在用户将其放置在正确位置时在正确位置绘制正确的对象。@Markus:我如何在我的列表中重新排序光标-只有一个光标。不能对一组1重新排序。如果你想对游标的内容重新排序,你必须创建一个新的游标,并指定你想要的排序顺序。好的,我将重新表述我的问题。是否可以在不再次从数据库的数据源获取数据的情况下获取光标中的正确内容。数据显然在某处。无论如何,谢谢你的帮助,我理解。但显而易见的下一个问题是他们。如何对列表中的游标重新排序。我确实运行了notifydatasetchanged,但它需要半秒钟的时间来创建一些奇怪的闪烁,除非我能确保Android在用户将其放置在正确位置时在正确位置绘制正确的对象。@Markus:我如何在我的列表中重新排序光标-只有一个光标。不能对一组1重新排序。如果你想对游标的内容重新排序,你必须创建一个新的游标,并指定你想要的排序顺序。好的,我将重新表述我的问题。是否可以在不再次从数据库的数据源获取数据的情况下获取光标中的正确内容。数据显然在某处。无论如何,谢谢你的帮助
Cursor itemCursor = (Cursor) getItem(0);
Cursor itemCursor2 = (Cursor) getItem(0+1);
Cursor itemCursor = (Cursor) getItem(1);
Cursor itemCursor2 = (Cursor) getItem(1+1);