4

我对 AdapterView.OnItemClickListener 中的某些行为有疑问,这让我有点困惑。

我有一个由自定义 CursorAdapter 支持的 ListView。游标由 LoaderManager 管理。ListView 也有一个 OnItemClickListener。数据正确加载并且 ListView 被正确填充 - 在这种情况下有很多项目。

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

有任何想法吗?

谢谢

4

1 回答 1

0

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

于 2013-11-11T09:56:35.353 回答