Paging 3 para Kotlin: guía completa con ejemplos prácticos
1. ¿Qué es y para qué sirve?
Paging 3 es una biblioteca de Google para Android, escrita en Kotlin, que resuelve uno de los problemas más comunes en el desarrollo móvil: la carga de datos por páginas (paginación). Cuando tienes una lista de miles o millones de elementos (como un feed de noticias, mensajes de chat o productos en un catálogo), cargarlos todos de una vez es imposible: provocaría desbordamiento de memoria, congelación de la interfaz y un enorme consumo de datos. Paging 3 automatiza el proceso de cargar datos en lotes (páginas) a medida que el usuario se desplaza por la lista.
La biblioteca está construida sobre principios modernos: usa corrutinas de Kotlin para el trabajo asíncrono, Flow para la actualización reactiva de datos y se integra completamente con Jetpack Compose y RecyclerView. A diferencia de versiones anteriores (Paging 2), Paging 3 ofrece una arquitectura más limpia, menos código repetitivo y soporte integrado para el manejo de errores, actualización de datos y almacenamiento en caché.
El valor principal de Paging 3 es que tú escribes la lógica para cargar una sola página (por ejemplo, una solicitud a una API), y la biblioteca decide por sí misma cuándo solicitar la siguiente, cómo almacenar los datos en memoria, cómo notificar al adaptador sobre los cambios y cómo manejar los estados de carga (cargando, error, lista vacía). Esto ahorra horas de desarrollo y hace que tu aplicación sea estable incluso al trabajar con conjuntos de datos enormes.
2. Instalación
Paging 3 es una biblioteca para Android/Kotlin, por lo que se instala a través del sistema de compilación Gradle, no mediante pip o npm. Agrega la dependencia en tu archivo build.gradle.kts (módulo app):
// build.gradle.kts (Module: app)
dependencies {
// Biblioteca principal de Paging 3
implementation("androidx.paging:paging-runtime-ktx:3.3.5")
// Si usas Jetpack Compose (opcional)
implementation("androidx.paging:paging-compose:3.3.5")
// Si usas RxJava (opcional)
implementation("androidx.paging:paging-rxjava3:3.3.5")
// Para pruebas (opcional)
testImplementation("androidx.paging:paging-common:3.3.5")
}
Después de sincronizar Gradle, la biblioteca está lista para usar. La versión mínima del SDK es 21 (Android 5.0).
3. Inicio rápido — ejemplo mínimo funcional
Crearemos una pantalla muy simple que carga una lista de números del 1 al 1000, con 20 elementos por página. El ejemplo consta de tres partes: la fuente de datos (PagingSource), el ViewModel y la interfaz de usuario (RecyclerView).
Paso 1. PagingSource — la fuente de datos
class NumberPagingSource : PagingSource<Int, Int>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Int> {
return try {
// Determinamos la clave de la siguiente página (si es null, es la primera carga)
val currentPage = params.key ?: 0
val pageSize = params.loadSize // normalmente 20
// Generamos los datos para la página actual
val start = currentPage * pageSize
val end = minOf(start + pageSize, 1000)
val numbers = (start until end).toList()
// Devolvemos el resultado con las claves para la página siguiente y anterior
LoadResult.Page(
data = numbers,
prevKey = if (currentPage > 0) currentPage - 1 else null,
nextKey = if (end < 1000) currentPage + 1 else null
)
} catch (e: Exception) {
LoadResult.Error(e)
}
}
// Devuelve la clave para recargar (normalmente null o la primera clave)
override fun getRefreshKey(state: PagingState<Int, Int>): Int? = null
}
Paso 2. ViewModel
class MainViewModel : ViewModel() {
val pager = Pager(
config = PagingConfig(pageSize = 20, enablePlaceholders = f También en la biblioteca
Aprendizaje automático en Java: revisión de las bibliotecas clave
Validación de datos en Swift (iOS/macOS): mejores prácticas y herramientas
bcrypt en Go: guía completa con ejemplos prácticos
Echo para Go: guía completa con ejemplos
Configuración de aplicaciones Swift: herramientas y bibliotecas para iOS/macOS