Question

Is there a way to get the first visible View out of the ListView in Android?

I can get the data that backs the first View in the Adapter but it seems I can't get the first View in ListView.

I want to change the first visible view after a scroll action finished. I know that I should not save references to the view.

Was it helpful?

Solution

Actually ListView items are just children of ListView. So first visible ListView item is:

listView.getChildAt(0)

OTHER TIPS

ListView has a function getFirstVisiblePosition so to get the first visible view, the code would be:

listView.getChildAt(listView.getFirstVisiblePosition());

Indeed listView.getChildAt(listView.getFirstVisiblePosition()) gives the first visible item,
BUT it could be half visible list item.

To get first completely visible list item,

if (listView.getChildAt(0).getTop() < 0) {
     int firstCompletelyVisiblePos = listView.getFirstVisiblePosition() + 1;
}
Object item = listView.getItemAtPosition(listView.getFirstVisiblePosition());

For first completely visible list item:

int pos = listView.getFirstVisiblePosition();
if (listView.getChildCount() > 1 && listView.getChildAt(0).getTop() < 0) pos++;
Object item = listView.getItemAtPosition(pos);

You can use the following code:

for (int i = 0; i <= conversationListView.getLastVisiblePosition() - conversationListView.getFirstVisiblePosition(); i++) {
        View listItem = conversationListView.getChildAt(i);
}

listView.scrollBy(0, -40);

This works very well

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top