2016-05-29 3 views
0

Я использую приложение «Блокнот», используя Recyclerview.Android - Почему shoud мы используем метод adapter.notifydatasetChanged()?

При добавлении, удалении и редактировании заметки я верну новый элемент списка, который был изменен для отображения в пользовательском интерфейсе и адаптера вызова.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() не будет иметь никакого эффекта. Поэтому я решил использовать новый адаптер с новым списком и вызвал myRecyclerView.setAdapter (адаптер), и он получает больше эффекта.

И мой вопрос: почему мы должны использовать метод Adapter.NotifyDataSetChanged(), в то время как мы можем полностью новый адаптер с измененными данными и setAdapter снова ???

Спасибо!

+0

Doing setAdapter снова и снова может оказаться неэффективным. Сам адаптер имеет тенденцию управлять данными. NotifyDataSetChanged позаботится об обновлении пользовательского интерфейса оптимально. – jaibatrik

+0

спасибо за ваш ответ – Duy

ответ

3

Почему мы должны использовать метод Adapter.NotifyDataSetChanged(), в то время как мы можем полностью новый адаптер с измененными данными и setAdapter снова ???

Когда вы звоните setAdapter(...), все строки создаются с нуля. Bu при использовании notifyDataSetChanged(), старые строки могут быть повторно использованы. Поэтому, если вам нужна производительность, вы должны использовать notifyDataSetChanged().

Также RecyclerView.Adapter имеет следующие методы тоже:

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

отличный ответ, спасибо – Duy

 Смежные вопросы

  • Нет связанных вопросов^_^