Ich habe ein paar Probleme mit RecyclerView
s SortedList
.
Nehmen wir an, ich habe eine sehr einfache Klasse, die nur eine sehr einfache Klasse mit Daten hat:
%Vor%Nach meinem Verständnis wird die sortierte Liste keine Duplikate enthalten.
Aber wenn ich eine SortedList mit Rückrufen wie folgt habe:
%Vor%Ich erhalte Dubletten, wenn ich mehrere Elemente mit derselben ID, aber verschiedenen Zeichen hinzufüge.
%Vor% Ich würde erwarten, dass die Liste den Artikel aktualisiert. Stattdessen habe ich jetzt mehrere Elemente, obwohl areItemsTheSame
true
zurückgegeben hat.
SortedList behält keine Zuordnung durch IDs bei (da es in der API keine IDs gibt). Wenn sich das Sortierkriterium also ändert (a bis b in Ihrem Fall), kann SortedList das vorhandene Element nicht finden.
Sie können das ID-Mapping selbst behalten und haben dann Ihre add-Methode wie folgt:
%Vor%Sie müssen außerdem eine remove-Methode implementieren, um das Element aus der idMap zu entfernen.
Wie Minhtdh bereits in seiner Antwort erwähnt hat, liegt das Problem in Ihrem compare()
.
Siehe add()
sucht den Index des vorhandenen Objekts mit dem von Ihnen implementierten compare()
ab. Wenn Ihr compare()
also etwas anderes als 0 zurückgibt, fügt es das Objekt zur Liste hinzu.
Sie müssen überprüfen, ob die Elemente identisch sind, bevor Sie den Inhalt vergleichen. Wenn Ihr Inhalt jedoch identisch sein kann, benötigen Sie einen sekundären Vergleich.
So würde ich das compare()
in Ihrem Fall implementieren:
Tags und Links java android android-recyclerview sortedlist