2016-05-29 13 views
0

Ich implementiere eine Editor-Anwendung mit Recyclerview.Android - Warum sollten wir adapter.notifydatasetChanged() Methode verwenden?

Beim Hinzufügen, Entfernen und Bearbeiten von Notizen, werde ich eine neueListnote zurückgeben, die zur Anzeige auf der Benutzeroberfläche geändert wurde und adapter.NotifyDataSetChanged() aufrufen.

public static void UpdateUI(List<Entity_NoteItem> newlistNote) { 
    /*listNoteToDisplayOnUI = newListNote(); 
    adapter.notifyDataSetChanged();*/ 

    adapter = new DisplayUI_CustomIconLabelAdapter(adapter.context, newlistNote); 
    myRecyclerView.setAdapter(adapter); 
} 

Aber ich erkannt, dass, wenn ich die listNote zugeordnet, die als Daten des Adapters durch einen anderen Gegenstand mit einer anderen Speicheradresse, wobei das Verfahren NotifyDataSetChanged() keine Wirkung haben eingestellt ist. Daher entschied ich mich für neue Adapter mit neuen listNote und rief myRecyclerView.setAdapter (Adapter) und es wird mehr Wirkung.

Und meine Frage ist: Warum sollten wir die Methode Adapter.NotifyDataSetChanged() verwenden, während wir komplett neu Adapter mit den geänderten Daten und setAdapter wieder ???

Vielen Dank!

+0

Doing setAdapter immer wieder kann ineffizient sein. Der Adapter selbst neigt dazu, Daten zu verwalten. Das notifyDataSetChanged sorgt für eine optimale Aktualisierung der Benutzeroberfläche. – jaibatrik

+0

danke für deine antwort – Duy

Antwort

3

Warum sollten wir die Methode Adapter.NotifyDataSetChanged() verwenden, während wir komplett neu Adapter mit den geänderten Daten und setAdapter wieder können ???

Wenn Sie setAdapter(...) aufrufen, werden alle Zeilen von Grund auf neu erstellt. Bei Verwendung von notifyDataSetChanged() können alte Zeilen wiederverwendet werden. Wenn Sie also Leistung wünschen, sollten Sie notifyDataSetChanged() verwenden.

Auch hat RecyclerView.Adapter diese Methoden auch:

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

große antwort, danke – Duy

Verwandte Themen