Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get items currently displayed in AdapterView?

Tags:

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?

like image 857
Krzysztof Miemiec Avatar asked Oct 29 '12 22:10

Krzysztof Miemiec


People also ask

What is Adapter view?

AdapterView is a ViewGroup that displays items loaded into an adapter. The most common type of adapter comes from an array-based data source.

Which code is used when the list item is picked from the ListView?

To get which item was selected, there is a method of the ListView called getItemAtPosition. Add this line to your OnItemClick method: String itemValue = (String) theListView. getItemAtPosition( position );


2 Answers

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));
    }
}
like image 92
MKB Avatar answered Sep 17 '22 17:09

MKB


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 :

See only fully visible ListView-Items

like image 37
Kooki Avatar answered Sep 21 '22 17:09

Kooki