Paging-Bibliothek – Übersicht Teil von Android Jetpack
Mit der Paging-Bibliothek können Sie Datenseiten aus einem größeren Dataset aus dem lokalen Speicher oder über ein Netzwerk laden und anzeigen. Mit diesem Ansatz kann Ihre App sowohl die Netzwerkbandbreite als auch die Systemressourcen effizienter nutzen. Die Komponenten der Paging-Bibliothek sind so konzipiert, dass sie in die empfohlene Android-App-Architektur passen, sich sauber in andere Jetpack-Komponenten einfügen und erstklassige Kotlin-Unterstützung bieten.
Vorteile der Paging-Bibliothek
Die Paging-Bibliothek umfasst die folgenden Funktionen:
- In-Memory-Caching für Ihre ausgelagerten Daten. So wird sichergestellt, dass Ihre App Systemressourcen effizient nutzt, wenn sie mit ausgelagerten Daten arbeitet.
- Integrierte Deduplizierung von Anfragen, die dafür sorgt, dass Ihre Anwendung Netzwerkbandbreite und Systemressourcen effizient nutzt.
- Integrierte Unterstützung für Kotlin-Koroutinen, -Abläufe und Jetpack Compose.
- Integrierte Unterstützung für die Fehlerbehandlung, einschließlich Aktualisierungs- und Wiederholungsfunktionen.
- Spezielle Testdienstprogramme wie
TestPagerundasSnapshot, um Paging-Quellen und Datentransformationen zu prüfen.
Einrichtung
Wenn Sie Paging-Komponenten in Ihre Android-App importieren möchten, fügen Sie der Datei build.gradle Ihrer App die folgenden Abhängigkeiten hinzu:
Kotlin
dependencies { val paging_version = "3.5.3" // Needed for Android Views and LiveData. Optional if only using // paging-compose implementation("androidx.paging:paging-runtime:$paging_version") // Needed to collect PagingData flows in Jetpack Compose implementation("androidx.paging:paging-compose:$paging_version") // Needed to test PagingSource and PagingData transformations in isolation testImplementation("androidx.paging:paging-testing:$paging_version") }
Groovy
dependencies { def paging_version = "3.5.3" // Needed for Android Views and LiveData. Optional if only using // paging-compose implementation "androidx.paging:paging-runtime:$paging_version" // Needed to collect PagingData flows in Jetpack Compose implementation "androidx.paging:paging-compose:$paging_version" // Needed to test PagingSource and PagingData transformations in isolation testImplementation "androidx.paging:paging-testing:$paging_version" }
Bibliotheksarchitektur
Die Komponenten der Paging-Bibliothek werden auf drei Ebenen Ihrer App ausgeführt:
- Die Repository-Ebene
- Die
ViewModel-Ebene - Die UI-Ebene
In diesem Abschnitt werden die Komponenten der Paging-Bibliothek beschrieben, die auf den einzelnen Ebenen ausgeführt werden, und wie sie zusammenarbeiten, um paginierte Daten zu laden und anzuzeigen.
Repository-Ebene
Die primäre Komponente der Paging-Bibliothek auf der Repository-Ebene ist PagingSource. Jedes PagingSource-Objekt definiert eine Datenquelle und wie Daten aus dieser Quelle abgerufen werden. Ein PagingSource-Objekt kann Daten aus einer beliebigen einzelnen Quelle laden, einschließlich Netzwerkquellen und lokaler Datenbanken.
Eine weitere Komponente der Paging-Bibliothek, die Sie verwenden können, ist RemoteMediator. Ein RemoteMediator-Objekt verarbeitet die Paginierung aus einer mehrschichtigen Datenquelle, z. B. einer Netzwerkdatenquelle mit einem lokalen Datenbankcache.
ViewModel-Ebene
Die Komponente Pager stellt eine öffentliche API zum Erstellen von Instanzen von PagingData bereit, die in reaktiven Streams verfügbar gemacht werden. Dies basiert auf einem PagingSource-Objekt und einem PagingConfig-Konfigurationsobjekt.
Die Komponente, die die ViewModel-Ebene mit der Benutzeroberfläche verbindet, ist PagingData. Ein PagingData-Objekt ist ein Container für einen Snapshot von paginierten Daten. Es fragt ein PagingSource-Objekt ab und speichert das Ergebnis.
UI-Ebene
Die primäre Paging-UI-API ist collectAsLazyPagingItems(). Sie stellt paginierte Elemente als Liste von Daten bereit, die von den Lazy-Layout-Komponenten von Compose wie LazyColumn und LazyRow einfach genutzt werden können.
Fügen Sie die Bibliothek androidx.paging:paging-compose hinzu, um Compose-kompatible APIs zu verwenden, mit denen die UI automatisch auf Datenlasten, Aktualisierungen und Fehler reagieren kann, ohne dass Adapter oder Diffing-Logik erforderlich sind. Verwenden Sie die Erweiterungsfunktion collectAsLazyPagingItems() für ein Flow<PagingData>, um den zurückgegebenen LazyPagingItems in einem LazyColumn an items() zu übergeben.
@Composable fun MessageList(pager: Pager<Int, Message>) { val lazyPagingItems = pager.flow.collectAsLazyPagingItems() LazyColumn { items( lazyPagingItems.itemCount, key = lazyPagingItems.itemKey { it.id } ) { index -> val message = lazyPagingItems[index] if (message != null) { MessageRow(message) } else { MessagePlaceholder() } } } }
Weitere Informationen finden Sie unter Große Datasets (Paging).
Empfehlungen für Sie
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Seitenweise Daten laden und anzeigen
- Zu Paging 3 migrieren
- Seite aus Netzwerk und Datenbank