Estado de desplazamiento y desplazamiento programático
Lea y controle la posición de desplazamiento de una lista.
Estado de desplazamiento y desplazamiento programático es una lección gratuita de Jetpack Compose Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Jetpack Compose Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Jetpack Compose Academy incluye 4 lecciones en total.
Partes de esta lección aún no han sido traducidas y se muestran en inglés.
Controlling the Scroll
Sometimes you need to read how far a list has scrolled, or jump it somewhere yourself. That is the job of a scroll state. 🎚️
rememberLazyListState
Create and hold a list state with rememberLazyListState, then pass it to your LazyColumn, LazyRow, or grid.
val listState = rememberLazyListState()
LazyColumn(state = listState) { }Grids Have State Too
A grid uses its own holder, rememberLazyGridState. Wire it the same way to track and drive a LazyVerticalGrid.
val gridState = rememberLazyGridState()
LazyVerticalGrid(state = gridState, columns = GridCells.Fixed(2)) { }Reading the First Item
Ask the state for firstVisibleItemIndex to know which item sits at the top of the viewport right now.
val firstIndex = listState.firstVisibleItemIndexDetecting Scroll Direction
The flag isScrollInProgress tells you whether the user is actively scrolling, handy for hiding a toolbar while they move.
if (listState.isScrollInProgress) hideToolbar()Jump Instantly
To snap straight to an item with no animation, call scrollToItem from a coroutine scope.
scope.launch {
listState.scrollToItem(index = 0)
}Scroll Smoothly
For a gentle glide instead of a jump, use animateScrollToItem. It is great for a back-to-top button.
scope.launch {
listState.animateScrollToItem(0)
}Why a Coroutine Scope
Scrolling is a suspend operation, so it must run in a coroutine. Grab a rememberCoroutineScope to launch it from a click.
val scope = rememberCoroutineScope()
Button(onClick = { scope.launch { listState.animateScrollToItem(0) } }) { }Show a Back-to-Top Button
Combine the two ideas: derive a visibility flag from firstVisibleItemIndex, then animate-scroll to zero on tap.
val showFab by remember {
derivedStateOf { listState.firstVisibleItemIndex > 5 }
}Survives Recomposition
Because the state is remembered, the scroll position survives recomposition. Use rememberSaveable variants to keep it across rotation.
State Drives the UI
The pattern is consistent: hold a scroll state, read it to react to position, and call its scroll functions to move the list yourself.
Quick Check
One on smooth scrolling.
Recap: Scroll Control
You learned to hold a scroll state, read firstVisibleItemIndex, and drive lists with scrollToItem and animateScrollToItem from a coroutine. 🚀
Aprende Kotlin con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 30
- Lecciones
- 120
Preguntas frecuentes
¿La lección «Estado de desplazamiento y desplazamiento programático» es gratis?
Sí — el texto completo de «Estado de desplazamiento y desplazamiento programático» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Jetpack Compose Academy, actualiza a CoddyKit PRO. El curso de Jetpack Compose Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Estado de desplazamiento y desplazamiento programático»?
Lea y controle la posición de desplazamiento de una lista. Practicas Jetpack Compose Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Jetpack Compose Academy?
No se requiere experiencia previa. Jetpack Compose Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Estado de desplazamiento y desplazamiento programático»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Jetpack Compose Academy?
Sí. Cada lección de Jetpack Compose Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Galerías con LazyVerticalGrid
- LazyRow para carruseles
- Celdas de grid adaptativas frente a fijas
- Estado de desplazamiento y desplazamiento programático