Paging 3 für Kotlin: Vollständiges Tutorial mit Beispielen
1. Was ist Paging 3 und warum braucht man es?
Paging 3 ist eine Bibliothek von Google für Android, die in Kotlin geschrieben ist und eines der häufigsten Probleme in der mobilen Entwicklung löst: das seitenweise Laden von Daten (Pagination). Wenn du eine Liste mit Tausenden oder Millionen von Elementen hast (z. B. einen Newsfeed, Chatnachrichten oder Produkte in einem Katalog), ist es unmöglich, alle auf einmal zu laden – das würde zu Speicherüberlauf, UI-Freezes und enormem Datenverbrauch führen. Paging 3 automatisiert das schrittweise Nachladen von Daten (Seiten), während der Benutzer durch die Liste scrollt.
Die Bibliothek basiert auf modernen Prinzipien: Sie nutzt Kotlin-Koroutinen für asynchrone Abläufe, Flow für reaktive Datenaktualisierungen und ist vollständig in Jetpack Compose und RecyclerView integriert. Im Vergleich zu früheren Versionen (Paging 2) bietet Paging 3 eine sauberere Architektur, weniger Boilerplate-Code und eine integrierte Unterstützung für Fehlerbehandlung, Datenaktualisierung und Caching.
Der Hauptvorteil von Paging 3: Du schreibst nur die Logik zum Laden einer einzelnen Seite (z. B. einen API-Aufruf), und die Bibliothek entscheidet selbstständig, wann die nächste Seite geladen wird, wie die Daten im Speicher verwaltet werden, wie der Adapter über Änderungen benachrichtigt wird und wie Ladezustände (Laden, Fehler, leere Liste) behandelt werden. Das spart Stunden an Entwicklungszeit und macht deine App auch bei riesigen Datenmengen stabil.
2. Installation
Paging 3 ist eine Bibliothek für Android/Kotlin und wird daher über das Gradle-Build-System installiert (nicht über pip oder npm). Füge die Abhängigkeit in deine build.gradle.kts-Datei (Modul: app) ein:
// build.gradle.kts (Module: app)
dependencies {
// Hauptbibliothek Paging 3
implementation("androidx.paging:paging-runtime-ktx:3.3.5")
// Für Jetpack Compose (optional)
implementation("androidx.paging:paging-compose:3.3.5")
// Für RxJava (optional)
implementation("androidx.paging:paging-rxjava3:3.3.5")
// Für Tests (optional)
testImplementation("androidx.paging:paging-common:3.3.5")
}
Nach der Gradle-Synchronisation ist die Bibliothek einsatzbereit. Die minimale SDK-Version ist 21 (Android 5.0).
3. Schnellstart – Minimales funktionierendes Beispiel
Wir erstellen einen einfachen Bildschirm, der eine Liste von Zahlen von 1 bis 1000 lädt, jeweils 20 Elemente pro Seite. Das Beispiel besteht aus drei Teilen: der Datenquelle (PagingSource), dem ViewModel und der UI (RecyclerView).
Schritt 1: PagingSource – Die Datenquelle
class NumberPagingSource : PagingSource<Int, Int>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Int> {
return try {
// Bestimme den Schlüssel für die nächste Seite (null = erster Ladevorgang)
val currentPage = params.key ?: 0
val pageSize = params.loadSize // normalerweise 20
// Generiere Daten für die aktuelle Seite
val start = currentPage * pageSize
val end = minOf(start + pageSize, 1000)
val numbers = (start until end).toList()
// Gib das Ergebnis mit Schlüsseln für die vorherige und nächste Seite zurück
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)
}
}
// Gibt den Schlüssel für das Neuladen zurück (normalerweise null oder den ersten Schlüssel)
override fun getRefreshKey(state: PagingState<Int, Int>): Int? = null
}
Schritt 2: ViewModel
class MainViewModel : ViewModel() {
val pager = Pager(
config = PagingConfig(pageSize = 20, enablePlaceholders = f Auch in der Bibliothek
Geolokalisierung und Karten in C# (.NET): Bibliotheken, Beispiele und Empfehlungen
ORM für JavaScript (Node.js): Vergleich von Sequelize, TypeORM, Prisma
Aufgabenwarteschlangen für PHP: RabbitMQ, Gearman und PhpAmqpLib
JWT-Token in Swift: Vollständiger Leitfaden zur Arbeit mit JSON Web Tokens
SwiftUI für Swift: Vollständiger Leitfaden mit Beispielen