从 RecyclerView 中删除所有项目
Remove all items from RecyclerView
我试图在 onRestart
方法中删除 RecyclerView
中的所有元素,这样项目就不会被加载两次:
@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();
}
但由于某些原因,我在 adapter
中创建的 delete
方法无法正常运行:
在RecyclerAdapter.java中:
public void delete(int position){
myList.remove(position);
notifyItemRemoved(position);
}
public int getSize(){
return myList.size();
}
我想我列表中的所有其他项目都会被删除,而不是整个列表。
使用 listview
非常简单,我只是调用了 adapter.clear()
。
有人可以帮我修改代码吗?
我想我应该使用 notifyItemRangeRemoved(...,...);
但我不确定如何使用。 TIA
这对我来说非常有用:
public void clear() {
int size = data.size();
if (size > 0) {
for (int i = 0; i < size; i++) {
data.remove(0);
}
notifyItemRangeRemoved(0, size);
}
}
或:
public void clear() {
int size = data.size();
data.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。相反,只需在您的列表 myList.clear();
中调用 clear 方法,然后通知您的适配器
public void clearData() {
myList.clear(); // clear list
mAdapter.notifyDataSetChanged(); // let your adapter know about the changes and reload view.
}
public void clearData() {
mylist.removeAll(mylist);
mAdapter.notifyDataSetChanged();
recyclerView.setAdapter(mAdapter);
}
另一种清除 recyclerview 项目的方法是实例化一个新的空适配器。
mRecyclerView.setAdapter(new MyAdapter(this, new ArrayList<MyDataSet>()));
它可能不是最优化的解决方案,但它的效果很好。
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 有不同的视图类型则很有用
ListView
使用 clear()
.
但是,如果您只是为了 RecyclerView
而这样做。首先你必须用 notifyItemRangeRemoved(0,size)
清除你的 RecyclerView.Adapter
那么,只有你recyclerView.removeAllViewsInLayout()
.
自助:
public void clearAdapter() {
arrayNull.clear();
notifyDataSetChanged();
}
private void clearRecyclerView() {
CustomListViewValuesArr.clear();
customRecyclerViewAdapter.notifyDataSetChanged();
}
使用这个函数
在 Xamarin.Android 上,它适用于我,需要更改布局
var layout = recyclerView.GetLayoutManager() as GridLayoutManager;
layout.SpanCount = GetItemPerRow(Context);
recyclerView.SetAdapter(null);
recyclerView.SetAdapter(adapter); //reset
对于我的情况,添加一个空列表就可以了。
List<Object> data = new ArrayList<>();
adapter.setData(data);
adapter.notifyDataSetChanged();
你最好清除你用于recyclerview适配器的array-list。
arraylist.clear();
我用这个。这实际上完全清除了 recylerview。我试过 adapter.notifyDataSetChanged();
但它只是没有更新我的情况下的任何视图。当然,你首先清除了列表。但是下面的代码工作正常并且完全清除了 recyclerview 的视图。
listName.clear(); // clear list
adapter = new ModelAdaptor(Activity.this, listName);
recyclerView.setAdapter(adapter);
我试图在 onRestart
方法中删除 RecyclerView
中的所有元素,这样项目就不会被加载两次:
@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();
}
但由于某些原因,我在 adapter
中创建的 delete
方法无法正常运行:
在RecyclerAdapter.java中:
public void delete(int position){
myList.remove(position);
notifyItemRemoved(position);
}
public int getSize(){
return myList.size();
}
我想我列表中的所有其他项目都会被删除,而不是整个列表。
使用 listview
非常简单,我只是调用了 adapter.clear()
。
有人可以帮我修改代码吗?
我想我应该使用 notifyItemRangeRemoved(...,...);
但我不确定如何使用。 TIA
这对我来说非常有用:
public void clear() {
int size = data.size();
if (size > 0) {
for (int i = 0; i < size; i++) {
data.remove(0);
}
notifyItemRangeRemoved(0, size);
}
}
或:
public void clear() {
int size = data.size();
data.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。相反,只需在您的列表 myList.clear();
中调用 clear 方法,然后通知您的适配器
public void clearData() {
myList.clear(); // clear list
mAdapter.notifyDataSetChanged(); // let your adapter know about the changes and reload view.
}
public void clearData() {
mylist.removeAll(mylist);
mAdapter.notifyDataSetChanged();
recyclerView.setAdapter(mAdapter);
}
另一种清除 recyclerview 项目的方法是实例化一个新的空适配器。
mRecyclerView.setAdapter(new MyAdapter(this, new ArrayList<MyDataSet>()));
它可能不是最优化的解决方案,但它的效果很好。
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 有不同的视图类型则很有用
ListView
使用 clear()
.
但是,如果您只是为了 RecyclerView
而这样做。首先你必须用 notifyItemRangeRemoved(0,size)
RecyclerView.Adapter
那么,只有你recyclerView.removeAllViewsInLayout()
.
自助:
public void clearAdapter() {
arrayNull.clear();
notifyDataSetChanged();
}
private void clearRecyclerView() {
CustomListViewValuesArr.clear();
customRecyclerViewAdapter.notifyDataSetChanged();
}
使用这个函数
在 Xamarin.Android 上,它适用于我,需要更改布局
var layout = recyclerView.GetLayoutManager() as GridLayoutManager;
layout.SpanCount = GetItemPerRow(Context);
recyclerView.SetAdapter(null);
recyclerView.SetAdapter(adapter); //reset
对于我的情况,添加一个空列表就可以了。
List<Object> data = new ArrayList<>();
adapter.setData(data);
adapter.notifyDataSetChanged();
你最好清除你用于recyclerview适配器的array-list。
arraylist.clear();
我用这个。这实际上完全清除了 recylerview。我试过 adapter.notifyDataSetChanged();
但它只是没有更新我的情况下的任何视图。当然,你首先清除了列表。但是下面的代码工作正常并且完全清除了 recyclerview 的视图。
listName.clear(); // clear list
adapter = new ModelAdaptor(Activity.this, listName);
recyclerView.setAdapter(adapter);