</>AppInitDev DevelopersCentro de aprendizaje Android
Android • Kotlin · TUTORIAL PRÁCTICO

Implementar Paging 3 con LazyColumn en Jetpack Compose

Carga listas grandes por páginas y muestra estados de carga, vacío y error.

◎
Objetivo del tutorial

Presentar una lista paginada sin descargar todos los registros en memoria.

CONTEXTO

Por qué es importante

Las listas largas pueden ralentizar el inicio, consumir datos y perder la posición al navegar. Paging 3 conecta una fuente de datos con una interfaz que solicita lotes cuando hacen falta. Puedes usar un PagingSource de red o base local y, si necesitas sincronización, evaluar RemoteMediator.

ANTES DE EMPEZAR

Requisitos

  • Proyecto Kotlin con Compose y arquitectura básica ViewModel.
  • Dependencias de Paging 3 y paging-compose compatibles con tu BOM y versiones actuales.

Trabaja en un proyecto de pruebas. Revisa las versiones y condiciones específicas de la documentación oficial, ya que las APIs y las políticas evolucionan.

PASO A PASO

Implementación

01

Define el contrato del repositorio: clave de página…

Define el contrato del repositorio: clave de página, cantidad de elementos y condición de final de lista.

02

Crea un PagingSource que devuelva Page y controle…

Crea un PagingSource que devuelva Page y controle errores de red o almacenamiento. Evita devolver siempre la misma clave.

03

Expón Pager.flow desde el repositorio y aplica cachedIn(viewModelScope)…

Expón Pager.flow desde el repositorio y aplica cachedIn(viewModelScope) en tu ViewModel cuando corresponda.

04

En Compose usa collectAsLazyPagingItems para obtener el listado…

En Compose usa collectAsLazyPagingItems para obtener el listado y muestra elementos con claves estables si es posible.

05

Gestiona loadState.refresh y append para mostrar un indicador…

Gestiona loadState.refresh y append para mostrar un indicador, reintento y estado vacío sin bloquear toda la pantalla.

06

Prueba scroll veloz, conexión intermitente, rotación y cambios…

Prueba scroll veloz, conexión intermitente, rotación y cambios de filtro. Define cuándo invalidar la fuente al cambiar la consulta.

EJEMPLO EXPLICADO

Fragmento de referencia

KOTLIN
@Composable
fun ListaPaginada(viewModel: ProductosViewModel) {
    val items = viewModel.productos.collectAsLazyPagingItems()
    LazyColumn {
        items(count = items.itemCount) { indice ->
            val producto = items[indice]
            if (producto != null) Text(producto.nombre)
        }
    }
}
// Requiere tu modelo Producto y un ViewModel con Flow<PagingData<Producto>>.

Ejemplo educativo: cuando se indique, añade las importaciones, dependencias, claves de prueba o clases de tu proyecto. No se presenta como proyecto Android completo y compilado.

EJERCICIO

Ponlo a prueba

Prepara 200 elementos falsos y verifica que la interfaz renderice progresivamente sin crear 200 vistas al inicio.

RESULTADOS

Lista de comprobación

  • La implementación cumple el objetivo: presentar una lista paginada sin descargar todos los registros en memoria.
  • El comportamiento se verificó con datos de prueba y se documentaron los casos de fallo.
  • Los recursos, dependencias y políticas se comprobaron contra las referencias oficiales.
  • No se registran datos sensibles ni se da por probada una mejora sin evidencia.
DEPURACIÓN

Errores habituales

  • No reiniciar un Pager por cada recomposición.
  • No ignorar estados de error de carga siguiente.
  • No confundir cachedIn con persistencia de datos sin conexión.
PREGUNTAS FRECUENTES

¿Paging 3 reemplaza Room?

No. Paging administra el flujo de páginas y puede trabajar junto con Room como fuente local.

DOCUMENTACIÓN OFICIAL Y TÉCNICA

Referencias para ampliar

Consulta las versiones, limitaciones y requisitos vigentes antes de integrar los ejemplos en producción.

SIGUE APRENDIENDO

Tutoriales relacionados

← Más tutoriales de Desarrollo Android general con KotlinIr a AppInitDev ↗