Sobes.tech
Junior — Middle

Como garantir a preservação da posição de scroll no RecyclerView ao recriar a Activity?

sobes.tech IA

Resposta da IA

Para manter a posição de scroll no RecyclerView ao recriar a Activity, pode guardar e restaurar o estado do LayoutManager.

Exemplo para LinearLayoutManager:

// Guardar a posição
val layoutManager = recyclerView.layoutManager as LinearLayoutManager
val scrollPosition = layoutManager.findFirstVisibleItemPosition()

// Guardar no Bundle, por exemplo em onSaveInstanceState
outState.putInt("scroll_position", scrollPosition)

// Restaurar a posição em onCreate ou onRestoreInstanceState
val position = savedInstanceState?.getInt("scroll_position") ?: 0
recyclerView.scrollToPosition(position)

Se precisar de uma restauração mais precisa (por exemplo, considerando o deslocamento dentro do elemento), pode guardar o estado Parcelable do LayoutManager:

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

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

Assim, ao recriar a Activity, a posição de scroll será guardada e restaurada corretamente.