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

时间:2013-11-04 18:47:56

标签: android onitemclicklistener android-cursorloader

我对AdapterView.OnItemClickListener中的一些行为有疑问,让我有点不知所措。

我有一个由自定义CursorAdapter支持的ListView。 Cursor由LoaderManager管理。 ListView还有一个OnItemClickListener。正确加载数据并正确填充ListView - 在这种情况下包含许多项目。

我发现 onItemClick 位置参数相对于屏幕上显示的项目而不是整个列表是0。因此,例如,如果我向下滚动并选择第一个可查看项目,我将实际获得列表中的第一个项目(不可见),而不是我选择的项目。当我使用调试器时,我发现 position 实际上的值为0,即使选中的项目在列表中更进一步。

奇怪的是,在我开始使用LoaderManager之前,这个工作正常。

我正在使用v4支持库。

如果我这样做:

public void onItemClick( AdapterView<?> parent, View listItem, int position, long id ) {

    Cursor c = myListAdapter.getItem( parent.getFirstVisiblePosition() + position );

    // do stuff

然后我得到了我实际选择的数据,但我不知何故觉得这是错的。我不应该使用 getFirstVisiblePosition()

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:0)

我猜您可能正在使用convertView方法的getView()参数来回收视图。使用它可能会导致此处出现问题。请尝试使用替代方案并检查问题是否仍然存在