Android - 我们为什么要使用adapter.notifydatasetChanged()方法?

时间:2016-05-29 07:58:33

标签: java android android-recyclerview recycler-adapter

我正在使用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再次使用全新的适配器?

1 个答案:

答案 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)