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

问题描述:

我正在使用Recyclerview实现记事本应用程序。Android - 为什么我们使用adapter.notifydatasetChanged()方法?

当添加,删除和编辑注释时,我将返回一个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); 
} 

但我意识到,如果我分配被设置为转接器的数据由另一目的与另一存储器地址,该方法NotifyDataSetChanged的listNote()将没有任何效果。 因此,我决定使用新的listNote创建新的适配器,并调用myRecyclerView.setAdapter(adapter)并获得更多效果。

而我的问题是:为什么我们应该使用方法Adapter.NotifyDataSetChanged(),而我们可以完全新的适配器与改变的数据和setAdapter再次?

谢谢!

+0

一遍又一遍做setAdapter可能是低效的。适配器本身倾向于管理数据。 notifyDataSetChanged将负责最佳地更新用户界面。 – jaibatrik

+0

感谢您的回答 – Duy

为什么我们应该使用方法Adapter.NotifyDataSetChanged(),而我们可以完全新的Adapter与改变的数据和setAdapter再次?

当您拨打setAdapter(...)时,会从头开始创建所有行。当使用notifyDataSetChanged()时,旧行可以重新使用。所以如果你想要表现,你应该使用notifyDataSetChanged()

而且RecyclerView.Adapter有这些方法太:

notifyItemChanged(int) 
notifyItemInserted(int) 
notifyItemRemoved(int) 
notifyItemRangeChanged(int, int) 
notifyItemRangeInserted(int, int) 
notifyItemRangeRemoved(int, int) 
+0

很好的答案,谢谢 – Duy