android - make - Eliminar todos los elementos de RecyclerView
recyclerview dependency (12)
Esto funciona muy bien para mí:
public void clear() {
final int size = data.size();
if (size > 0) {
for (int i = 0; i < size; i++) {
data.remove(0);
}
notifyItemRangeRemoved(0, size);
}
}
o:
public void clear() {
final int size = data.size();
data.clear();
notifyItemRangeRemoved(0, size);
}
Para ti:
@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();
}
Estoy intentando eliminar todos los elementos de mi RecyclerView
en mi método onRestart
para que los elementos no se carguen dos veces:
@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();
}
Pero por alguna razón, el método de delete
que creé en el adapter
no funciona correctamente:
en RecyclerAdapter.java:
public void delete(int position){
myList.remove(position);
notifyItemRemoved(position);
}
public int getSize(){
return myList.size();
}
Creo que todos los demás elementos de mi lista se eliminan en lugar de toda la lista.
Con una vista de lista fue tan fácil y simplemente llamé adapter.clear()
.
¿Puede alguien ayudarme a arreglar el código?
Creo que debería estar utilizando notifyItemRangeRemoved(...,...);
Pero no estoy seguro de cómo. TIA
Así es como borré mi recyclerview y le agregué nuevos elementos con animación:
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();
En Xamarin.Android, funciona para mí y necesita cambiar el diseño
var layout = recyclerView.GetLayoutManager() as GridLayoutManager;
layout.SpanCount = GetItemPerRow(Context);
recyclerView.SetAdapter(null);
recyclerView.SetAdapter(adapter);//reset
Evite eliminar sus elementos en un bucle for y llamar a notifyDataSetChanged en cada iteración. En su lugar, simplemente llame al método clear en su lista myList.clear();
y luego notifique a su adaptador
public void clearData() {
myList.clear(); //clear list
mAdapter.notifyDataSetChanged(); //let your adapter know about the changes and reload view.
}
Otra forma de borrar los elementos de reciclaje es crear una instancia de un nuevo adaptador vacío.
mRecyclerView.setAdapter(new MyAdapter(this, new ArrayList<MyDataSet>()));
Probablemente no sea la solución más optimizada, pero funciona a la perfección.
Para mi caso, agregar una lista vacía hizo el trabajo.
List<Object> data = new ArrayList<>();
adapter.setData(data);
adapter.notifyDataSetChanged();
ListView
utiliza clear()
.
Pero, si solo lo estás haciendo para RecyclerView
. Primero tienes que borrar tu RecyclerView.Adapter
con notifyItemRangeRemoved(0,size)
Entonces, solo recyclerView.removeAllViewsInLayout()
.
Ayudar a sí mismo:
public void clearAdapter() {
arrayNull.clear();
notifyDataSetChanged();
}
private void clearRecyclerView(){
CustomListViewValuesArr.clear();
customRecyclerViewAdapter.notifyDataSetChanged();
}
usa esta func
public void clearData() {
mylist.removeAll(mylist);
mAdapter.notifyDataSetChanged();
recyclerView.setAdapter(mAdapter);
}
recyclerView.removeAllViewsInLayout();
La línea anterior le ayudará a eliminar todas las vistas del diseño.
Para ti:
@Override
protected void onRestart() {
super.onRestart();
recyclerView.removeAllViewsInLayout();//removes all the views
//then reload the data
PostCall doPostCall = new PostCall(); //my AsyncTask...
doPostCall.execute();
}
setAdapter(null);
Útil si RecycleView tiene diferentes vistas.