Удалите все элементы из RecyclerView

Я пытаюсь удалить все элементы из моего RecyclerView в моем методе onRestart чтобы элементы не загружались дважды:

 @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(); } 

Но по какой-то причине метод delete который я создал в adapter , не работает должным образом:

В RecyclerAdapter.java:

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

Я думаю, что каждый другой элемент в моем списке удаляется, а не весь список.

С listview это было так просто, и я просто назвал adapter.clear() .

Может кто-то, пожалуйста, помогите мне исправить код?

Я думаю, что я должен использовать notifyItemRangeRemoved(...,...); Но я не знаю, как это сделать. ТИА

Solutions Collecting From Web of "Удалите все элементы из RecyclerView"

Это отлично работает для меня:

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

Источник: https://github.com/mikepenz/LollipopShowcase/blob/master/app/src/main/java/com/mikepenz/lollipopshowcase/adapter/ApplicationAdapter.java

или:

 public void clear() { int size = this.myList.size(); this.myList.clear(); notifyItemRangeRemoved(0, size); } 

Для тебя:

 @Override protected void onRestart() { super.onRestart(); //first clear the recycler view so items are not populated twice recyclerAdapter.clear(); //then reload the data PostCall doPostCall = new PostCall(); //my AsyncTask... doPostCall.execute(); } 

Избегайте удаления ваших элементов в цикле for и вызова notifyDataSetChanged на каждой итерации. Вместо этого просто вызовите метод clear в вашем списке myList.clear(); И затем сообщите об этом адаптеру

 public void clearData() { myList.clear(); //clear list mAdapter.notifyDataSetChanged(); //let your adapter know about the changes and reload view. } 
 recyclerView.removeAllViewsInLayout(); 

Вышеупомянутая строка поможет вам удалить все виды из макета.

Для тебя:

 @Override protected void onRestart() { super.onRestart(); recyclerView.removeAllViewsInLayout();//removes all the views //then reload the data PostCall doPostCall = new PostCall(); //my AsyncTask... doPostCall.execute(); } 

Вот как я очистил свой recyclerview и добавил к нему новые предметы с анимацией:

 mList.clear(); mAdapter.notifyDataSetChanged(); mSwipeRefreshLayout.setRefreshing(false); //reset adapter with empty array list (it did the trick animation) mAdapter = new MyAdapter(context, mList); recyclerView.setAdapter(mAdapter); mList.addAll(newList); mAdapter.notifyDataSetChanged(); 
 setAdapter(null); 

Полезно, если RecycleView имеет разные виды просмотров

Другой способ очистить элементы recycleview – создать новый пустой адаптер.

 mRecyclerView.setAdapter(new MyAdapter(this, new ArrayList<MyDataSet>())); 

Это, вероятно, не самое оптимизированное решение, но оно работает как шарм.

 public void clearData() { mylist.removeAll(mylist); mAdapter.notifyDataSetChanged(); recyclerView.setAdapter(mAdapter); }