Ich bin vor kurzem in diese Frage gelaufen und wollte für diejenigen, die sich programmatisch fragen, was passiert, wenn Sie notifyDataSetChanged()
und notifyDataSetInvalidated()
anrufen. es ist im Grunde ruft durch ein paar Klassen * Kurze Antwort, gehen here
Wie @Cristian in seiner Antwort erklärt, wenn Sie diese benachrichtigen Methoden auf Ihrem Adapter anrufen und onChanged()
/onInvalidated()
auf den registrierten DataSetObserver
s für Ihren Adapter Aufruf endet.
Wenn Sie den Code folgen wird in der Tat Sie sehen, dass DataSetObserver
abstrakt ist wie bereits erwähnt, und dass die onChanged()
/onInvalidated()
Methoden sind für die Umsetzung leere Warte durch eine Unterklasse.
Wenn dies das Ende der Geschichte wäre, warum sagen uns die Android Framework Engineers dann immer noch, dass wir diese Methoden aufrufen sollen, wenn sie nichts tun? Es dauerte etwas graben, aber es stellt sich heraus, dass es bereits eine Unterklasse dieser DataSetObserver
namens AdapterDataSetObserver
und es lebt in der abstrakten Klasse AdapterView
(die durch Klassen wie GridView
und ListView
erweitert wird) lebt. Dieser Beobachter wird automatisch von Android erstellt, wenn Sie setAdapter()
auf Ihrem AdapterView
und erhält registered zu Ihrem Adapter.
Hier können Sie all die verrückten Dinge sehen, die diese Methoden tatsächlich tun.Die Dokumentation ist schlecht und zuerst dachte ich, ich müsste meine eigene Unterklasse DataSetObserver
registrieren, um diese Funktion zu erhalten, aber es stellt sich heraus, dass eine bereits für Sie erstellt wurde.
* Etwas, das ich dachte, könnte nützlich sein: Ich glaube, dass Sie mehr als eine DataSetObserver
zu Ihrem Adapter (zusätzlich zu den Standard) registrieren können. Dies würde Ihnen erlauben, bei Bedarf zusätzliche Arbeit zu leisten (wie zum Beispiel eine Fortschrittsbalkenansicht mit einer Bildansicht auszutauschen, wenn Bitmaps heruntergeladen werden).
Beachten Sie, dass Sie fast immer wollen Der Aufruf von 'notifyDataSetChanged() 'anstelle von invalidated - changed führt dazu, dass sich der Adapter selbst neu zeichnet. – karl