user2456977 user2456977 - 5 months ago 633
Android Question

Remove all items from RecyclerView

I am trying to remove all the elements from my

RecyclerView
in my
onRestart
method so the items don't get loaded twice:

@Override
protected void onRestart() {
super.onRestart();

//first clear the recycler view so items are not populated twice
for(int i=0; i<recyclerAdapter.getSize(); i++) {
recyclerAdapter.delete(i);
}

//then reload the data
PostCall doPostCall = new PostCall(); //my AsyncTask...
doPostCall.execute();
}


But for some reason the
delete
method I created in the
adapter
is not functioning properly:

in RecyclerAdapter.java:

public void delete(int position){
myList.remove(position);
notifyItemRemoved(position);
}

public int getSize(){
return myList.size();
}


I think every other item in my list gets deleted instead of the entire list.

With a
listview
it was so easy and I simply called
adapter.clear()
.

Can someone please help me fix up the code?

I think I should be using
notifyItemRangeRemoved(...,...);
but I am not sure how. TIA

Answer

This works great for me:

public void clearData() {
    int size = this.myList.size();
    if (size > 0) {
        for (int i = 0; i < size; i++) {
            this.myList.remove(0);
        }

        this.notifyItemRangeRemoved(0, size);
    }
}

Source: https://github.com/mikepenz/LollipopShowcase/blob/master/app/src/main/java/com/mikepenz/lollipopshowcase/adapter/ApplicationAdapter.java

For you:

@Override
protected void onRestart() {
    super.onRestart();

    //first clear the recycler view so items are not populated twice
    recyclerAdapter.clearData();

    //then reload the data
    PostCall doPostCall = new PostCall(); //my AsyncTask... 
    doPostCall.execute();
}