Intereting Posts
Обработка изменений идентификатора регистрации в Google Cloud Messaging на Android Как работает Mono для Android? Как изменить событие «Мое местоположение» с помощью API Google Maps android v2? Android получить и разобрать Google Directions Фрагментные сбои на экране вращаются Невозможно отключить анимацию перехода при нажатии кнопки «Назад» Как нарисовать на холсте вида без масштабирования артефактов, когда родительский взгляд имеет масштабный коэффициент? Обновление компонента компонента активности из широковещательного приемника? Android: Как сгенерировать частоту? Как сделать HTTPS POST с Android? Получить путь изображения от ACTION_IMAGE_CAPTURE Intent Запретить Android-телефон подключаться к сети Wi-Fi, если мое приложение не одобрит его? В чем смысл новой аннотации @SystemApi, любая разница от @hide? Что такое MediaPlayer.OnInfoListener "код 703"? Как получить результат OnPostExecute () для основного действия, потому что AsyncTask – это отдельный класс?

Удалите все элементы из 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); }