Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to clear the views which are held in the ListView's RecycleBin?

In Android's ListView widget, the ListView will hold the views which is got from getView method of an Adapter in a inner class RecycleBin.

How can I clear the views in the RecycleBin and force the ListView to recreate all the child views.

like image 595
TaoZang Avatar asked Aug 21 '12 06:08

TaoZang


People also ask

What is view recycling in Android?

RecyclerView is the ViewGroup that contains the views corresponding to your data. It's a view itself, so you add RecyclerView into your layout the way you would add any other UI element. Each individual element in the list is defined by a view holder object.

Does listview recycle?

Recycling of list view happens when you scroll down the screen and above list view items are hidden . They are reused to show new list view items.


1 Answers

Calling invalidate() or invalidateViews() did not do the trick for me (as mentioned in the correct answer). The recycled views were still stored in the ListView. I had to dig in Android source code to find a solution. I checked many methods, including the setAdapter() method of the ListView class (Android API 15) :

@Override
public void setAdapter(ListAdapter adapter) {

    // ...
    mRecycler.clear();
    // ...

}

As you noticed, setting an adapter clears the recycler, which holds all the recycled views in a list view. You do not have to create a new adapter, setting the same adapter is enough to clear the recycled views list in the list view :

Adapter adapter = listview.getAdapter ();
// ... Modify adapter ... do anything else you need to do
// To clear the recycled views list :
listview.setAdapter ( adapter );
like image 86
Leeeeeeelo Avatar answered Oct 10 '22 15:10

Leeeeeeelo