Beim Aufrufen von notifyDataSetChanged
auf RecyclerView
wird die Bildlaufposition nicht beibehalten und nach oben geblättert. Gibt es eine Lösung, um die Bildlaufposition beizubehalten?
Wenn das übergeordnete RecyclerView-Listenelement die Eigenschaft "wrap_content" aufweist, berechnet Recyclerview die Höhen erneut und scrollt nach oben.
Es gibt zwei Lösungen:
layout_height="100dp"
Verwenden Sie StaggeredGridLayoutManager wie folgt:
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL));
Wenn Sie Elemente mit Animationen ändern möchten, verwenden Sie die notifyItemChanged-Methode in Fragment oder Aktivität. Nicht in der Adapterklasse:
%Vor%Die zweite Lösung ist effizienter und ich empfehle diese
Ich bin mir nicht sicher, ob das dein Problem löst, aber ich hatte das gleiche Problem und es war, weil ich setAdapter nach dem Notify aufgerufen habe. Also, nicht setAdapter nach der Benachrichtigung aufrufen löste das Problem.
%Vor% Wie ich vermute, setzen Sie den Adapter auf RecyclerView
zurück und rufen dann notifyDataSetChanged().
Sie müssen nur den dataList
an den Adapter übergeben, indem Sie in der Adaptermethode dataList
wie den Adapter update(dataList)
übergeben.
Und bei dieser Methode können Sie diese Liste einer Adapterliste zuweisen wie:
Sie können die Position beibehalten, indem Sie sie vor notifyDataSetChanged speichern und anschließend die Funktion "smooth scroll to saved position"
aufrufen %Vor%Sie können swapAdapter () und nach dem Aufruf notifyDataSetChange () . Das funktioniert für mich.
Tags und Links android appcompat android-recyclerview