Android:onItemClick()的位置相对于可视区域,而不是整个列表

Android:onItemClick()的位置相对于可视区域,而不是整个列表,android,onitemclicklistener,android-cursorloader,Android,Onitemclicklistener,Android Cursorloader,我有一个关于AdapterView.com Listener中某些行为的问题,这让我有点困惑 我有一个由自定义游标适配器支持的列表视图。游标由LoaderManager管理。ListView还有一个侦听器。正确加载数据并正确填充ListView—在本例中,包含许多项 我发现onItemClick的position参数相对于屏幕上显示的项目是基于0的,而不是整个列表。例如,如果我向下滚动并选择第一个可查看的项目,我将实际获得列表中第一个不可见的项目,而不是我选择的项目。当我使用调试器时,我看到该位

我有一个关于AdapterView.com Listener中某些行为的问题,这让我有点困惑

我有一个由自定义游标适配器支持的列表视图。游标由LoaderManager管理。ListView还有一个侦听器。正确加载数据并正确填充ListView—在本例中,包含许多项

我发现onItemClick的position参数相对于屏幕上显示的项目是基于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

有什么想法吗


谢谢

我猜您可能正在使用getView方法的convertView参数来回收视图。使用此选项可能会导致此处出现问题。请尝试使用其他选项,并检查问题是否仍然存在

listview的高度设置如何?如果您将它设置为包装内容,它可能会导致一些奇怪的行为,在这些行为中,它在一堆额外的单元格上调用getView,通常是我经验中第一批测量这些单元格的单元格。这可能不是你的bug,但值得一看。如果你从AdapterView而不是通过适配器使用它,它会工作吗?