我正在使用Recyclerview实现记事本应用。
在添加,删除和编辑注释时,我将返回一个newListnote,它被修改为在UI上显示并调用adapter.NotifyDataSetChanged()。
public static void UpdateUI(List<Entity_NoteItem> newlistNote) {
/*listNoteToDisplayOnUI = newListNote();
adapter.notifyDataSetChanged();*/
adapter = new DisplayUI_CustomIconLabelAdapter(adapter.context, newlistNote);
myRecyclerView.setAdapter(adapter);
}
但是我意识到,如果我将listNote指定为另一个具有另一个内存地址的对象的适配器数据,则 NotifyDataSetChanged()方法将无效。 因此,我决定使用新的listNote新的适配器并调用myRecyclerView.setAdapter(适配器),它会产生更多效果。
我的问题是:为什么我们应该使用方法Adapter.NotifyDataSetChanged(),而我们可以使用已更改的数据和setAdapter再次使用全新的适配器?
答案 0 :(得分:4)
为什么我们应该使用方法Adapter.NotifyDataSetChanged(),而我们可以使用已更改的数据和setAdapter完全新的适配器???
当您致电setAdapter(...)
时,所有行都是从头开始创建的。使用notifyDataSetChanged()
时,可以重复使用旧行。因此,如果您需要性能,则应使用notifyDataSetChanged()
。
RecyclerView.Adapter也有这些方法:
notifyItemChanged(int)
notifyItemInserted(int)
notifyItemRemoved(int)
notifyItemRangeChanged(int, int)
notifyItemRangeInserted(int, int)
notifyItemRangeRemoved(int, int)