我有一个简单的实施RecyclerView
与onResponse
网络调用方法中的适配器。如何删除以前的所有RecyclerView
项目或刷新RecyclerView
?RecyclerVIew项在每个网络调用后重叠
我已经使用adapter.notifyDataSetChanged();
和recyclerView.invalidate();
但他们都没有工作。
我有一个简单的实施RecyclerView
与onResponse
网络调用方法中的适配器。如何删除以前的所有RecyclerView
项目或刷新RecyclerView
?RecyclerVIew项在每个网络调用后重叠
我已经使用adapter.notifyDataSetChanged();
和recyclerView.invalidate();
但他们都没有工作。
创建适配器的新实例,然后调用recyclerview.setAdapter(newAdapter);
这将删除旧的适配器和设置新的适配器与更新的项目。
如果你只是想更新当前适配器项目,然后创建您转接器内的方法来做到这一点:
public void addItems(ArrayList<EventObject> eventList) {
this.eventList.addAll(eventList);
notifyDataSetChanged();
}
然后调用adapter.addItems(moreItems);
仅仅重置数据源并调用notifyDataSetChanged()而不是创建对象的新实例会不会更高效? –
是的,我把它放在我的编辑@NileshSingh中 – MichaelStoddart
我会建议你使用不同的方法
创建您的适配器一次,你OnResponse
方法之外。适配器内部,有一个方法来设置的项目,如:
public void setItems(ArrayList<MyObject> items){
this.items = items;
notifyDataSetChanged();
}
然后在您的onResponse
方法你可以叫adapter.setItems(items);
你需要调用notifyDataSetChanged之前清除列表()。
使用下面的代码行
adapter.clearData();
不要忘了添加此方法
public void clearData() {
int size = this.myList.size();
this.myList.clear();
this.notifyItemRangeRemoved(0, size);
}
}
以下步骤将帮助您
Suggestion-
在添加新项目之前,您是否清除了数据列表? – SaNtoRiaN
一旦下一组数据通过onRespose回调来保存数据列表,然后调用adapter.notifyDataSetChanged()。 –