As in title: I would like to know how to get list (array) of all currently displayed items in my AdapterView.
Why? Objects that are displayed in my AdapterView require releasing a listener after user closes AdapterView. I need to do it in order to optimize my app.
Or is there any method (that I could override) which is executed on views' destruction?
Asked
Active
Viewed 3.0k times
20

Chris Miemiec
- 755
- 1
- 9
- 19
2 Answers
31
implements OnScrollListener
public class NewsCategoryDC extends Activity implements OnScrollListener {
and set OnScrollListener in listView
listView.setOnScrollListener(NewsCategoryDC.this);
and you can get first and last visible rows
@Override
public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {
firstVisibleRow = listView.getFirstVisiblePosition();
lastVisibleRow = listView.getLastVisiblePosition();
/*Now you get the first and last visible rows, and you easily get the rows from first to last visible row and allocate resources to visible rows or deallocate resources to rows except visible rows..,.*/
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {}
TRY THIS..,.
and if some other best way you got please post, this is very useful and good question..,.
Thanks..,.
EDIT............................
add code in onScroll() method
@Override
public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {
int firstVisibleRow = listView.getFirstVisiblePosition();
int lastVisibleRow = listView.getLastVisiblePosition();
for(int i=firstVisibleRow;i<=lastVisibleRow;i++)
{
//Write your code here(allocation/deallocation/store in array etc.)
System.out.println(i + "=" + listView.getItemAtPosition(i));
}
}

MKB
- 7,587
- 9
- 45
- 71
-
That's great thing, I didn't know about that. But now: How to get actual views? I mean something like ViewGroup.getChildAt(position) but to use in AbsListView. – Chris Miemiec Oct 30 '12 at 16:33
-
The `OnScroll` method accepts an `AbsListView`. Is there a way to write a scroll handler which accepts an `AbstractView` instead? – Danyal Aytekin Feb 04 '13 at 13:33
-
@rs411, how did you get this to work? I can't get a View that has scrolled out of view. – Ken Aug 10 '13 at 02:28
-
1) Try getting number of items in your list and then iterating through them with: listView.getItemAtPosition(i) 2) The point of this code is to get currently visible views, not to get all of them. But I think that if you properly use convertView (reuse it) -> [getView](http://developer.android.com/reference/android/widget/Adapter.html#getView(int,%20android.view.View,%20android.view.ViewGroup)) , then you should get all views. – Chris Miemiec Aug 10 '13 at 06:18
6
As small hint:
If you want to get all elements which are fully visible ( --> expect those, who are on the bottom or top and are nearly out of screen) you should look at this post :