我正在尝试从我的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
方法无法正常运行:
:
public void delete(int position){
myList.remove(position);
notifyItemRemoved(position);
}
public int getSize(){
return myList.size();
}
我认为列表中的所有其他项都会被删除而不是整个列表。
使用listview
这很简单,我只需拨打adapter.clear()
。
有人可以帮我修改代码吗?
我想我应该使用notifyItemRangeRemoved(...,...);
,但我不确定如何。 TIA
答案 0 :(得分:55)
避免在for循环中删除项目并在每次迭代中调用notifyDataSetChanged。而只需在列表myList.clear();
中调用clear方法,然后通知适配器
public void clearData() {
myList.clear(); // clear list
mAdapter.notifyDataSetChanged(); // let your adapter know about the changes and reload view.
}
答案 1 :(得分:52)
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();
}
答案 2 :(得分:15)
setAdapter(null);
如果RecycleView具有不同的视图类型
,则非常有用答案 3 :(得分:13)
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();
}
答案 4 :(得分:3)
这就是我清理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();
答案 5 :(得分:3)
帮助自己:
public void clearAdapter() {
arrayNull.clear();
notifyDataSetChanged();
}
答案 6 :(得分:1)
我用这个。这实际上完全清除了 recylerview。我试过 adapter.notifyDataSetChanged();
但它只是没有更新我的任何视图。当然,你已经先清除了名单。但是下面的代码工作正常并且完全清除了recyclerview的视图。
listName.clear(); // clear list
adapter = new ModelAdaptor(Activity.this, listName);
recyclerView.setAdapter(adapter);
答案 7 :(得分:0)
清除recycleview项目的另一种方法是实例化一个新的空适配器。
mRecyclerView.setAdapter(new MyAdapter(this, new ArrayList<MyDataSet>()));
它可能不是最优化的解决方案,但它的工作就像一个魅力。
答案 8 :(得分:0)
ListView
使用clear()
。
但是,如果你只是为RecyclerView
做这件事。首先,您必须使用RecyclerView.Adapter
notifyItemRangeRemoved(0,size)
然后,只有你recyclerView.removeAllViewsInLayout()
。
答案 9 :(得分:0)
private void clearRecyclerView() {
CustomListViewValuesArr.clear();
customRecyclerViewAdapter.notifyDataSetChanged();
}
使用此功能
答案 10 :(得分:0)
在Xamarin.Android上,它对我有用,并且需要更改布局
var layout = recyclerView.GetLayoutManager() as GridLayoutManager;
layout.SpanCount = GetItemPerRow(Context);
recyclerView.SetAdapter(null);
recyclerView.SetAdapter(adapter); //reset
答案 11 :(得分:0)
对于我来说,添加一个空列表可以完成这项工作。
List<Object> data = new ArrayList<>();
adapter.setData(data);
adapter.notifyDataSetChanged();
答案 12 :(得分:0)
您最好清除用于recyleview适配器的阵列列表。
arraylist.clear();
答案 13 :(得分:-3)
public void clearData() {
mylist.removeAll(mylist);
mAdapter.notifyDataSetChanged();
recyclerView.setAdapter(mAdapter);
}