Paging 3 pour Kotlin : guide complet avec exemples
1. Qu'est-ce que Paging 3 et pourquoi l'utiliser ?
Paging 3 est une bibliothèque développée par Google pour Android, écrite en Kotlin, qui résout l'un des problèmes les plus courants en développement mobile : le chargement par pages (pagination). Lorsque vous avez une liste de milliers ou de millions d'éléments (par exemple, un fil d'actualités, des messages dans un chat, des produits dans un catalogue), les charger tous en une seule fois est impossible — cela entraînerait un dépassement de mémoire, un gel de l'interface utilisateur et une consommation de données excessive. Paging 3 automatise le processus de chargement des données par lots (pages) au fur et à mesure que l'utilisateur fait défiler la liste.
La bibliothèque repose sur des principes modernes : elle utilise les coroutines Kotlin pour le travail asynchrone, Flow pour les mises à jour réactives des données et s'intègre parfaitement avec Jetpack Compose et RecyclerView. Contrairement aux versions précédentes (Paging 2), Paging 3 offre une architecture plus propre, moins de code passe-partout et une prise en charge intégrée de la gestion des erreurs, de la mise à jour des données et de la mise en cache.
La valeur principale de Paging 3 est la suivante : vous écrivez la logique de chargement d'une seule page (par exemple, une requête API), et la bibliothèque décide elle-même quand demander la page suivante, comment stocker les données en mémoire, comment notifier l'adaptateur des changements et comment gérer les états de chargement (chargement, erreur, liste vide). Cela vous fait gagner des heures de développement et rend votre application stable, même avec de très grands ensembles de données.
2. Installation
Paging 3 est une bibliothèque pour Android/Kotlin, elle s'installe donc via le système de build Gradle, et non via pip ou npm. Ajoutez la dépendance dans votre fichier build.gradle.kts (module app) :
// build.gradle.kts (Module: app)
dependencies {
// Bibliothèque principale Paging 3
implementation("androidx.paging:paging-runtime-ktx:3.3.5")
// Si vous utilisez Jetpack Compose (optionnel)
implementation("androidx.paging:paging-compose:3.3.5")
// Si vous utilisez RxJava (optionnel)
implementation("androidx.paging:paging-rxjava3:3.3.5")
// Pour les tests (optionnel)
testImplementation("androidx.paging:paging-common:3.3.5")
}
Après la synchronisation de Gradle, la bibliothèque est prête à être utilisée. La version minimale du SDK est 21 (Android 5.0).
3. Démarrage rapide — exemple minimal fonctionnel
Créons un écran très simple qui charge une liste de nombres de 1 à 1000, 20 éléments par page. L'exemple se compose de trois parties : la source de données (PagingSource), le ViewModel et l'interface utilisateur (RecyclerView).
Étape 1. PagingSource — la source de données
class NumberPagingSource : PagingSource<Int, Int>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Int> {
return try {
// Détermine la clé de la page suivante (si null, c'est le premier chargement)
val currentPage = params.key ?: 0
val pageSize = params.loadSize // généralement 20
// Génère les données pour la page actuelle
val start = currentPage * pageSize
val end = minOf(start + pageSize, 1000)
val numbers = (start until end).toList()
// Retourne le résultat avec les clés pour les pages suivante et précédente
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)
}
}
// Retourne la clé pour le rechargement (généralement null ou la première clé)
override fun getRefreshKey(state: PagingState<Int, Int>): Int? = null
}
Étape 2. ViewModel
class MainViewModel : ViewModel() {
val pager = Pager(
config = PagingConfig(pageSize = 20, enablePlaceholders = f Aussi dans la bibliothèque
Travailler avec XML en C# (.NET) : Guide complet pour débutants
Cryptographie en Java : chiffrement et hachage – guide pratique
Travailler avec les dates en Swift : Foundation et DateFormatter