【发布时间】:2013-11-04 18:47:56
【问题描述】:
我对 AdapterView.OnItemClickListener 中的某些行为有疑问,这让我有点困惑。
我有一个由自定义 CursorAdapter 支持的 ListView。游标由 LoaderManager 管理。 ListView 也有一个 OnItemClickListener。数据正确加载并且 ListView 被正确填充 - 在本例中包含许多项目。
我发现 onItemClick 的 position 参数相对于屏幕上显示的项目是从 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()。
有什么想法吗?
谢谢
【问题讨论】:
-
您的列表视图的高度是如何设置的?如果你将它设置为“wrap_content”,它可能会导致一些奇怪的行为,它会在一堆额外的单元格(通常是我的经验中的前几个)上调用 getView 来测量它们。这可能不是你的错误,但值得一看。
-
如果你在 AdapterView 中使用
getItemAtPosition而不是通过 Adapter 是否有效?
标签: android onitemclicklistener android-cursorloader