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.