Junior — Middle
Hogyan lehet biztosítani a görgetési pozíció megőrzését a RecyclerView-ban az Activity újraalkotásakor?
sobes.tech MI
Válasz az MI-től
A RecyclerView görgetési pozíciójának megőrzéséhez az Activity újraalkotásakor mentheti és visszaállíthatja a LayoutManager állapotát.
Példa LinearLayoutManager esetén:
// Pozíció mentése
val layoutManager = recyclerView.layoutManager as LinearLayoutManager
val scrollPosition = layoutManager.findFirstVisibleItemPosition()
// Mentés Bundle-ba, például onSaveInstanceState-ben
outState.putInt("scroll_position", scrollPosition)
// Pozíció visszaállítása onCreate vagy onRestoreInstanceState-ben
val position = savedInstanceState?.getInt("scroll_position") ?: 0
recyclerView.scrollToPosition(position)
Ha pontosabb visszaállítás szükséges (pl. az elem belső eltolásával számolva), akkor mentheti a LayoutManager Parcelable állapotát:
// Mentés
val layoutState = recyclerView.layoutManager?.onSaveInstanceState()
outState.putParcelable("layout_state", layoutState)
// Visszaállítás
val layoutState = savedInstanceState?.getParcelable<Parcelable>("layout_state")
recyclerView.layoutManager?.onRestoreInstanceState(layoutState)
Így az Activity újraalkotásakor a görgetési pozíció helyesen lesz mentve és visszaállítva.