10

有没有办法从 Android 的 ListView 中获取第一个可见视图?

我可以获得支持适配器中第一个视图的数据,但似乎我无法获得 ListView 中的第一个视图。

我想在滚动操作完成后更改第一个可见视图。我知道我不应该保存对视图的引用。

4

6 回答 6

13

实际上 ListView 项目只是 ListView 的子项。所以第一个可见的 ListView 项目是:

listView.getChildAt(0)
于 2010-06-24T15:12:37.897 回答
4

ListView 有一个函数getFirstVisiblePosition,所以要获得第一个可见视图,代码是:

listView.getChildAt(listView.getFirstVisiblePosition());

于 2010-06-24T16:16:10.983 回答
3

确实listView.getChildAt(listView.getFirstVisiblePosition())给出了第一个可见项目,
但它可能是一半可见的列表项目。

要获得第一个完全可见的列表项,

if (listView.getChildAt(0).getTop() < 0) {
     int firstCompletelyVisiblePos = listView.getFirstVisiblePosition() + 1;
}
于 2015-02-25T13:56:37.597 回答
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);
于 2018-06-17T09:39:33.783 回答
0

您可以使用以下代码:

for (int i = 0; i <= conversationListView.getLastVisiblePosition() - conversationListView.getFirstVisiblePosition(); i++) {
        View listItem = conversationListView.getChildAt(i);
}
于 2016-06-21T14:04:58.883 回答
-2

listView.scrollBy(0, -40);

这很好用

于 2016-08-19T12:25:03.313 回答