Sobes.tech
Junior — Middle

Ako zabezpečiť zachovanie pozície posúvania v RecyclerView pri opätovnom vytvorení Activity?

sobes.tech AI

Odpoveď od AI

Ak chcete zachovať pozíciu posúvania v RecyclerView pri opätovnom vytvorení Activity, môžete uložiť a obnoviť stav LayoutManageru.

Príklad pre LinearLayoutManager:

// Uloženie pozície
val layoutManager = recyclerView.layoutManager as LinearLayoutManager
val scrollPosition = layoutManager.findFirstVisibleItemPosition()

// Uloženie do Bundle, napríklad v onSaveInstanceState
outState.putInt("scroll_position", scrollPosition)

// Obnovenie pozície v onCreate alebo onRestoreInstanceState
val position = savedInstanceState?.getInt("scroll_position") ?: 0
recyclerView.scrollToPosition(position)

Ak je potrebné presnejšie obnovenie (napríklad s prihliadnutím na posun vo vnútri prvku), môžete uložiť stav Parcelable LayoutManageru:

// Uloženie
val layoutState = recyclerView.layoutManager?.onSaveInstanceState()
outState.putParcelable("layout_state", layoutState)

// Obnovenie
val layoutState = savedInstanceState?.getParcelable<Parcelable>("layout_state")
recyclerView.layoutManager?.onRestoreInstanceState(layoutState)

Týmto spôsobom bude pri opätovnom vytvorení Activity pozícia posúvania správne uložená a obnovená.