有没有办法从 Android 的 ListView 中获取第一个可见视图?
我可以获得支持适配器中第一个视图的数据,但似乎我无法获得 ListView 中的第一个视图。
我想在滚动操作完成后更改第一个可见视图。我知道我不应该保存对视图的引用。
有没有办法从 Android 的 ListView 中获取第一个可见视图?
我可以获得支持适配器中第一个视图的数据,但似乎我无法获得 ListView 中的第一个视图。
我想在滚动操作完成后更改第一个可见视图。我知道我不应该保存对视图的引用。
实际上 ListView 项目只是 ListView 的子项。所以第一个可见的 ListView 项目是:
listView.getChildAt(0)
ListView 有一个函数getFirstVisiblePosition
,所以要获得第一个可见视图,代码是:
listView.getChildAt(listView.getFirstVisiblePosition());
确实listView.getChildAt(listView.getFirstVisiblePosition())
给出了第一个可见项目,
但它可能是一半可见的列表项目。
要获得第一个完全可见的列表项,
if (listView.getChildAt(0).getTop() < 0) {
int firstCompletelyVisiblePos = listView.getFirstVisiblePosition() + 1;
}
Object item = listView.getItemAtPosition(listView.getFirstVisiblePosition());
对于第一个完全可见的列表项:
int pos = listView.getFirstVisiblePosition();
if (listView.getChildCount() > 1 && listView.getChildAt(0).getTop() < 0) pos++;
Object item = listView.getItemAtPosition(pos);
您可以使用以下代码:
for (int i = 0; i <= conversationListView.getLastVisiblePosition() - conversationListView.getFirstVisiblePosition(); i++) {
View listItem = conversationListView.getChildAt(i);
}
listView.scrollBy(0, -40);
这很好用