Android ListView:获取可见项的数据索引
Posted
技术标签:
【中文标题】Android ListView:获取可见项的数据索引【英文标题】:Android ListView: get data index of visible item 【发布时间】:2011-01-01 09:16:24 【问题描述】:我有一个使用SimpleAdapter
创建的android ListView
,其中包含的项目多于屏幕。滚动列表后,我需要获取列表中第一个可见项在数据模型中的位置。
基本上我想要一个类似的函数:listView.getChildAt(0).getPositionInDataModel()
。
Adapter
里面有一些函数,比如看起来很有用的getItemId(position)
;但是,SimpleAdapter
实现只是返回传入的位置,而不是我希望的行 id。
蛮力解决方案是获取索引 0 处的视图,并将其与适配器中每个项目的视图进行比较。但是,似乎没有一种简单的方法可以从适配器获取特定位置的视图。
有人有什么想法吗?
【问题讨论】:
【参考方案1】:这很容易。只需使用ListView.getFirstVisiblePosition() + indexYouWant
。例如,要获取ListView
中显示的第二个孩子在适配器中的位置,只需使用getFirstVisiblePosition() + 1
。
不需要上面回复中显示的所有可怕的东西:)
【讨论】:
哇,我不敢相信我错过了。我一直在寻找这样的功能。一定是因为它是在我没想到的父类中定义的。还在习惯这种 javadoc 风格...感谢您指出! getFirstVisiblePosition() 和 getLastVisiblePosition() 之间的一些视图在我的 Gridview 中返回 null。不过,我正在回收观点 - 这是原因吗?我希望可见视图可以保证不为空,特别是因为我可以直观地看到它们不是。【参考方案2】:listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
public void onItemSelected(AdapterView<?> parent,View view, int pos, long id)
AisleId= parent.getSelectedItemId();
@Override
public void onNothingSelected(AdapterView<?> arg0)
// TODO Auto-generated method stub
);
在此我们将获得列表项 ID parent.getSelectedItemId();
【讨论】:
【参考方案3】:只需使用getPositionForView(View)
(see documentation)。这种方法的主要优点是它也适用于项目的后代View
s。
【讨论】:
它只是没有回答问题以上是关于Android ListView:获取可见项的数据索引的主要内容,如果未能解决你的问题,请参考以下文章
如何在android中获取主屏幕小部件列表项的点击事件[重复]