Ich bin neu in der Recycler-Ansicht. Meine Anforderung lautet wie folgt:
- Ich muss einen Webservice anrufen, der zwei Arrays liefert. Eines mit Daten, die ich in der Liste anzeigen muss. Zu diesem Zweck verwende ich RecyclerView
. Das andere Array hat Status, die ich in Spinner zeige. Dieser Webservice ist paginiert. Ich habe Paginierung hinzugefügt und es funktioniert gut.
- Wenn der Benutzer ein anderes Element aus dem Drehfeld auswählt, muss ich erneut einen Web-Service-Aufruf durchführen und die Daten der Recycler-Ansicht ändern.
Momentan mache ich im Falle der Paginierung folgendes, sobald ich mehr Daten von den folgenden Seiten bekomme:
Und wenn ich Daten vom Spinner ändere, mache ich folgendes:
%Vor%Es wird jedoch vorgeschlagen, anstelle von notifyDataSetChanged () direkt im Recycler-Ansichtsadapter die spezifische notifyXXX-Methode aufzurufen, um Leistungs- und Animationsprobleme zu vermeiden.
Ich bin also nicht sicher, ob ich das Recht habe, den Recycler View Adapter in onItemSelected()
des Spinner anzugeben, oder es sollte geändert werden.
P.S. Ich habe versucht, in onItemSelected
zu folgen:
Aber dann ist es abgestürzt, mit folgender Ausnahme:
%Vor% Ich denke, notifyItemRangeRemoved
ist die richtige Methode, die hier verwendet wird, aber der Wert, den Sie für den zweiten Parameter übergeben, ist falsch. Laut dem Dokument ist der zweite Parameter die Anzahl der Elemente, die aus dem Datensatz entfernt wurden. Was Sie übergeben, ist die Position des letzten entfernten Elements.
Der folgende Code sollte also gut funktionieren
%Vor%Weitere Informationen finden Sie unter: Ссылка
Zunächst lautet die Methodendefinition für notifyItemRangeRemoved (int, int)
:
Das zweite Argument ist count
, nicht positionEnd
. In Ihrem Fall übergeben Sie size - 1
als zweites Argument, wenn es sich um size
selbst handeln sollte.
Zweitens ist notifyDataSetChanged()
verpönt, weil es eine Rebind- und Relayout aller sichtbaren Ansichten auslöst. In Ihrem Fall, in dem die Anzahl der sichtbaren Elemente gleich Null ist, sehe ich nicht, warum notifyDataSetChanged()
die Leistung beeinträchtigen würde. Wenn Sie das Entfernen von Elementen animieren möchten, verwenden Sie notifyItemRangeRemoved(0, size)
. Sonst ist es ganz in Ordnung, notifyDataSetChanged()
hier zu verwenden.
Tags und Links android android-recyclerview