有没有办法在Android中从ListView获取第一个可见视图?如何从Android ListView获取第一个可见视图
我可以获得支持适配器中第一个视图的数据,但看起来我无法在ListView中获得第一个视图。
我想在滚动操作完成后更改第一个可见视图。我知道我不应该保存对视图的引用。
有没有办法在Android中从ListView获取第一个可见视图?如何从Android ListView获取第一个可见视图
我可以获得支持适配器中第一个视图的数据,但看起来我无法在ListView中获得第一个视图。
我想在滚动操作完成后更改第一个可见视图。我知道我不应该保存对视图的引用。
其实ListView项目只是ListView的子项。所以,第一个可见的ListView项是:
listView.getChildAt(0)
ListView中有一个功能getFirstVisiblePosition
因此要获得第一个可见视图,代码为:
listView.getChildAt(listView.getFirstVisiblePosition());
childAt()位置与getFirstVisiblePosition()返回的位置之间存在差异。 getFirstVisiblePosition的位置是我的数据适配器中的位置。 ChildAt仅考虑目前在列表视图中可见的视图。 – Janusz 2010-06-25 08:06:53
我喜欢这个答案,并且发现它有用于找到可以工作的东西。然而,使用childAt与适配器的位置wsill不起作用。如果使用fetFirstVisiblePosition,则必须使用getItem再次将其传递给适配器。所以更正确的是adapter.getItem(listview.getFirstVisiblePosition)。然而,在那种情况下,你不会像操作系统那样提出问题。不过,谢谢你指出这一点。 – 2014-11-29 10:18:31
事实上listView.getChildAt(listView.getFirstVisiblePosition())
给人的第一个可见项目,
但它可能是一半可见列表项。
要获得第一个完全可见的列表项,
if (listView.getChildAt(0).getTop() < 0) {
int firstCompletelyVisiblePos = listView.getFirstVisiblePosition() + 1;
}
您可以使用下面的代码:
for (int i = 0; i <= conversationListView.getLastVisiblePosition() - conversationListView.getFirstVisiblePosition(); i++) {
View listItem = conversationListView.getChildAt(i);
}
listView.scrollBy(0,-40);
这很好用
视图被回收。你需要什么具体的观点? – 2010-06-24 14:50:17
我编辑我的问题。我想在用户滚动列表后更改视图。 – Janusz 2010-06-24 15:06:52