Sobes.tech
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.