Auslagerung
In dieser Tabelle sind alle Artefakte in der Gruppe androidx.paging
aufgeführt.
Artefakt | Stabile Version | Release Candidate | Beta-Ausgabe | Alphaversion |
---|---|---|---|---|
paging-* | 3.3.5 | - | – | - |
paging-compose | 3.3.5 | - | – | - |
Abhängigkeiten deklarieren
Wenn Sie eine Abhängigkeit von Paging hinzufügen möchten, müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.
Fügen Sie der Datei build.gradle
für Ihre App oder Ihr Modul die Abhängigkeiten für die erforderlichen Artefakte hinzu:
Cool
dependencies { def paging_version = "3.3.2" implementation "androidx.paging:paging-runtime:$paging_version" // alternatively - without Android dependencies for tests testImplementation "androidx.paging:paging-common:$paging_version" // optional - RxJava2 support implementation "androidx.paging:paging-rxjava2:$paging_version" // optional - RxJava3 support implementation "androidx.paging:paging-rxjava3:$paging_version" // optional - Guava ListenableFuture support implementation "androidx.paging:paging-guava:$paging_version" // optional - Jetpack Compose integration implementation "androidx.paging:paging-compose:3.3.2" }
Kotlin
dependencies { val paging_version = "3.3.2" implementation("androidx.paging:paging-runtime:$paging_version") // alternatively - without Android dependencies for tests testImplementation("androidx.paging:paging-common:$paging_version") // optional - RxJava2 support implementation("androidx.paging:paging-rxjava2:$paging_version") // optional - RxJava3 support implementation("androidx.paging:paging-rxjava3:$paging_version") // optional - Guava ListenableFuture support implementation("androidx.paging:paging-guava:$paging_version") // optional - Jetpack Compose integration implementation("androidx.paging:paging-compose:3.3.2") }
Weitere Informationen zur Verwendung von Kotlin-Erweiterungen finden Sie in der ktx-Dokumentation.
Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.
Feedback
Ihr Feedback hilft uns, Jetpack zu verbessern. Bitte teilen Sie uns mit, wenn Sie neue Probleme feststellen oder Ideen zur Verbesserung dieser Bibliothek haben. Sehen Sie sich die vorhandenen Probleme in dieser Bibliothek an, bevor Sie ein neues erstellen. Sie können einem vorhandenen Problem Ihre Stimme geben, indem Sie auf die Schaltfläche mit dem Stern klicken.
Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.
Version 3.3
Version 3.3.5
11. Dezember 2024
androidx.paging:paging-*:3.3.5
wird veröffentlicht. Version 3.3.5 enthält diese Commits.
Fehlerkorrekturen
- Fehler behoben, durch den
RecyclerView
IndexOutOfBoundsException
zurückgab, wenn der Nutzer beim Aktualisieren vonRecyclerView
scrollte. (Id1f16, b/381024738)
Version 3.3.4
13. November 2024
androidx.paging:paging-*:3.3.4
wird veröffentlicht. Version 3.3.4 enthält diese Commits.
Fehlerkorrekturen
- Bei Android-Unit-Tests, bei denen Paging 3.3 oder höher eingebunden wird, wird kein Fehler wie
Method isLoggable in android.util.Log not mocked
mehr ausgegeben. (Ia9400, b/331684448)
Version 3.3.2
7. August 2024
androidx.paging:paging-*:3.3.2
wird veröffentlicht. Version 3.3.2 enthält diese Commits.
Neue Funktionen
- Für
paging-common
undpaging-testing
wurden neue Kotlin Multiplatform-Zielgruppen hinzugefügt:watchos
,tvos
undlinuxArm64
(90c9768), (53e0eca)
Version 3.3.1
24. Juli 2024
androidx.paging:paging-*:3.3.1
wird veröffentlicht. Version 3.3.1 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, durch das
AsyncPagingDataDiffer
oder darauf aufbauende APIs wie diePagingDataAdapter
, die mitRecyclerView
verwendet wird, keine weiteren Ladevorgänge auslösen konnten, wenn die zugrunde liegende Datenquelle beim Scrollen aktualisiert wurde. (I60ca5, b/352586078) - Ein Absturz wurde behoben, der beim Entfernen von Elementen aus der zugrunde liegenden Datenquelle beim Scrollen durch eine
RecyclerView
mithilfe einerPagingDataAdapter
oderAsyncPagingDataDiffer
auftrat. (I8c65a, b/347649763)
Version 3.3.0
14. Mai 2024
androidx.paging:paging-*:3.3.0
wird veröffentlicht. Version 3.3.0 enthält diese Commits.
Wichtige Änderungen seit Version 3.2.0
PagingDataPresenter
ist jetzt eine öffentliche Klasse. Multiplattform-Präsentatoren können jetzt aufPagingDataPresenter
basieren, anstatt interne Paging-APIs oder dieAsyncPagingDataDiffer
vonpaging-runtime
zu benötigen.- In
hasError
undisIdle
wurden neueLoadStates
- undCombinedLoadStates
-Hilfsmethoden hinzugefügt, um zu prüfen, obLoadStates
bzw.NotLoading
den Status „Fehler“ hat. Außerdem wurde eine neueawaitNotLoading()
-Kotlin-Erweiterungsmethode fürFlow<CombinedLoadStates>
hinzugefügt, die wartet, bis eine Ladung den StatusNotLoading
oder „Fehler“ erreicht hat. PagingData.empty()
sendet jetzt standardmäßigNotLoading
-Status, es sei denn, dem Konstruktor werden benutzerdefinierteLoadStates
übergeben. Das unterscheidet sich vom bisherigen Verhalten, bei demLoadStates
nicht gesendet wird, wenn es an einePagingDataAdapter
gesendet wird, oder es werden Ladestatus gesendet, wenn es alsLazyPagingItems
erfasst wird. Wenn die Daten alsLazyPagingItems
erfasst werden, wird jetzt auch sofort nach der ersten Zusammenstellung eine leere Liste angezeigt.
Kompatibilität von Kotlin Multiplatform
Die Auslieferung von Artefakten, die mit Kotlin Multiplatform kompatibel sind, ist jetzt möglich. Dies ist vor allem auf die Upstream-Arbeiten aus dem Multi-Plattform-Paging-Projekt von CashApp zurückzuführen.
paging-common
hat alle Paging 3 APIs zucommon
verschoben und ist jetzt zusätzlich zu Android mit jvm und iOS kompatibel.paging-testing
hat seinen Code zucommon
verschoben und ist jetzt zusätzlich zu Android mit JVM und iOS kompatibel.paging-compose
hat seinen Code zucommon
verschoben und stellt ein Android-Artefakt bereit, das der Multiplattformunterstützung vonandroidx.compose
entspricht.paging-runtime
,paging-guava
,paging-rxjava2
undpaging-rxjava3
sind weiterhin nur für Android verfügbar.
Version 3.3.0-rc01
1. Mai 2024
androidx.paging:paging-*:3.3.0-rc01
wird ohne Änderungen in Paging 3.3.0-beta01 veröffentlicht. Version 3.3.0-rc01 enthält diese Commits.
Version 3.3.0-beta01
3. April 2024
androidx.paging:paging-*:3.3.0-beta01
wird ohne nennenswerte Änderungen veröffentlicht. Version 3.3.0-beta01 enthält diese Commits.
Version 3.3.0-alpha05
20. März 2024
androidx.paging:paging-*:3.3.0-alpha05
wird veröffentlicht. Version 3.3.0-alpha05 enthält diese Commits.
API-Änderungen
- Für die Auslagerung wird jetzt die AndroidX-Anmerkung
@MainThread
für gemeinsamen Code verwendet. (I78f0d, b/327682438)
Version 3.3.0-alpha04
6. März 2024
androidx.paging:paging-*:3.3.0-alpha04
wird veröffentlicht. Version 3.3.0-alpha04 enthält diese Commits.
Fehlerkorrekturen
- Kleinere Dokumentationsfehler im Zusammenhang mit der Einführung der Kotlin-Plattformübergreifenden Kompatibilität wurden behoben. (aosp/2950785)
Version 3.3.0-alpha03
7. Februar 2024
androidx.paging:paging-*:3.3.0-alpha03
wird veröffentlicht. Version 3.3.0-alpha03 enthält diese Commits.
Neue Funktionen
PagingDataPresenter
ist jetzt eine öffentliche Klasse. Multiplattform-Präsentatoren können jetzt aufPagingDataPresenter
basieren, anstatt interne Paging-APIs oder dieAsyncPagingDataDiffer
vonpaging-runtime
zu benötigen. (Id1f74, b/315214786)- Es wurden neue
LoadStates
- undCombinedLoadStates
-Hilfsmethoden hinzugefügt, um zu prüfen, obLoadStates
den Status „Fehler“ oderNotLoading
hat. Außerdem wurde eine neue API hinzugefügt, die auf eineLoadStateFlow
wartet, bis eine Ladung den StatusNotLoading
oder „Fehler“ erreicht hat. (Id6c67)
Verhaltensänderung
PagingData.empty()
sendet jetzt standardmäßigNotLoading
-Status, es sei denn, dem Konstruktor werden benutzerdefinierteLoadStates
übergeben. Das unterscheidet sich vom bisherigen Verhalten, bei demLoadStates
nicht gesendet wird, wenn es an einePagingDataAdapter
gesendet wird, oder es werden Ladestatus gesendet, wenn es alsLazyPagingItems
erfasst wird. Wenn die Daten alsLazyPagingItems
erfasst werden, wird jetzt auch sofort nach der ersten Zusammenstellung eine leere Liste angezeigt. (I4d11d, b/301833847)
Version 3.3.0-alpha02
20. September 2023
androidx.paging:paging-*:3.3.0-alpha02
wird veröffentlicht. Version 3.3.0-alpha02 enthält diese Commits.
Kompatibilität von Kotlin Multiplatform
Die Auslieferung von Artefakten, die mit Kotlin Multiplatform kompatibel sind, ist jetzt möglich. Dies ist vor allem auf die Upstream-Arbeiten aus dem Multi-Plattform-Paging-Projekt von CashApp zurückzuführen. So können wir Abweichungen zwischen zwei Repositories vermeiden und sie kompatibel halten.
paging-common
hat alle Paging 3 APIs zucommon
verschoben und ist jetzt zusätzlich zu Android mit jvm und iOS kompatibel.paging-testing
hat seinen Code zucommon
verschoben und ist jetzt zusätzlich zu Android mit JVM und iOS kompatibel.paging-compose
hat seinen Code zucommon
verschoben und stellt ein Android-Artefakt bereit, das der Multiplattformunterstützung vonandroidx.compose
entspricht.paging-runtime
,paging-guava
,paging-rxjava2
undpaging-rxjava3
sind weiterhin nur für Android verfügbar.
API-Änderungen
- Die öffentliche Logger-Schnittstelle, die nur für die interne Nutzung gedacht war, wurde eingestellt (I16e95, b/288623117)
Externer Beitrag
- Vielen Dank an veyndan von Cash App für die Unterstützung beim Umstellen der Paging-Funktion auf Kotlin Multiplatform (#560, #561, #562, #573, #576, #577, #578, #579, #580, #581, #583, #584, #586, #609)
Version 3.3.0-alpha01
20. September 2023
- Dies ist die erste plattformübergreifende Version der androidx.paging-Bibliotheken. Diese Version enthält nur
*-jvm
- und*-android
-Artefakte. Für macOS-, iOS- und Linux-Varianten verwenden Sie3.3.0-alpha02
.
Version 3.2
Version 3.2.1
6. September 2023
androidx.paging:paging-*:3.2.1
wird veröffentlicht. Version 3.2.1 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem die
asSnapshot()
API des Paging-Test-Artefakts hängen blieb, wenn ein mitPagingData.from(List)
erstellter Ablauf übergeben wurde, daasSnapshot()
im Gegensatz zurPagingData.from(List, LoadStates)
-Überladung keine Informationen dazu hatte, wann das Laden abgeschlossen ist. Diese Problemumgehung funktioniert nur für abzuschließende Abläufe (z.B.flowOf(PagingData.from(...))
). Bei nicht abzuschließenden Abläufen (z.B.MutableStateFlow
, verwenden Sie diePagingData.from
-Überladung, dieLoadStates
bereitstellt). (I502c3) - Bei der Paginierung wird jetzt intern
AndroidUiDispatcher.Main
verwendet, damit neue Daten im selben Frame verfügbar sind, sobald das Laden abgeschlossen ist. (Ia55af)
Version 3.2.0
26. Juli 2023
androidx.paging:paging-*:3.2.0
wird veröffentlicht. Version 3.2.0 enthält diese Commits.
Wichtige Änderungen seit Version 3.1.0
- Paging Compose hat die API-Stabilität erreicht und wurde wieder mit dem Rest von Paging zusammengeführt. Die Version stimmt jetzt mit allen anderen Paging-Artefakten überein. Zu den Änderungen seit Version 3.1.0 gehören:
- Unterstützung für die Vorschau einer Liste mit fiktiven Daten. Erstelle dazu eine
PagingData.from(fakeData)
und greife diesePagingData
in einerMutableStateFlow
(z. B.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
) auf. Übergebe diesen Fluss als Empfänger an@Preview
-Kompositionen, um eine Vorschau voncollectAsLazyPagingItems()
zu erhalten. - Unterstützung für alle Lazy-Layouts wie
LazyVerticalGrid
undHorizontalPager
sowie benutzerdefinierte Lazy-Komponenten aus Wear- und TV-Bibliotheken. Dies wurde durch neueLazyPagingItems
-Erweiterungsmethoden der unteren EbeneitemKey
unditemContentType
erreicht. So können Sie die Parameterkey
undcontentType
in den Standard-items
-APIs implementieren, die bereits fürLazyColumn
,LazyVerticalGrid
und ihre Entsprechungen in APIs wieHorizontalPager
verfügbar sind. items(lazyPagingItems)
unditemsIndexed(lazyPagingItems)
, die nurLazyListScope
unterstützen, wurden eingestellt.
- Unterstützung für die Vorschau einer Liste mit fiktiven Daten. Erstelle dazu eine
- Neues
paging-testing
-Artefakt mit APIs, die für die Durchführung von Unit-Tests für jede Schicht Ihrer App und deren Integration mit dem Paging entwickelt wurden. Dazu gehören beispielsweise:TestPager
-Klasse, mit der Sie das Verhalten Ihrer eigenen benutzerdefiniertenPagingSource
-Implementierung unabhängig vom Pager und der tatsächlichen Benutzeroberfläche validieren können.-
asPagingSourceFactory
APIs, mit denen entweder einFlow<List<Value>>
oder ein statischesList<Value>
in einPagingSourceFactory
umgewandelt werden kann, das in Tests an einen Pager übergeben werden kann asSnapshot
Kotlin-Erweiterung fürFlow<PagingData<Value>>
, dieFlow<PagingData<Value>>
in eine direkteList<Value>
übersetzt. Mit derasSnapshot lambda
können Sie die Benutzeroberfläche Ihrer App über APIs wiescrollTo
oderappendScrollWhile
nachahmen, damit Sie jederzeit prüfen können, ob der Daten-Snapshot in Ihrem Satz von paginaten Daten korrekt ist.
- Es wurden Standardprotokolle hinzugefügt, um Informationen zur Fehlerbehebung bei der Auslagerung auf zwei Ebenen bereitzustellen:
VERBOSE
undDEBUG
. Die Protokolle können über den Befehladb shell setprop log.tag.Paging [DEBUG|VERBOSE]
aktiviert werden. Das gilt sowohl für die Seitennavigation mit Ansichten als auch für die Seitennavigation mit Compose. - Es wurden Konstruktoren für
PagingDataAdapter
undAsyncPagingDataDiffer
hinzugefügt, dieCoroutineContext
anstelle vonCoroutineDispatcher
akzeptieren. - Es wurde eine neue
PagingSourceFactory
-Funktionsschnittstelle hinzugefügt, die eine explizitere API-Oberfläche bietet als die vorherigen Lambdas vom Typ () ->PagingSource
. Mit dieser Factory kann ein Pager instanziiert werden.
Version 3.2.0-rc01
21. Juni 2023
androidx.paging:paging-*:3.2.0-rc01
wird veröffentlicht. Version 3.2.0-rc01 enthält diese Commits.
Externer Beitrag
- Vielen Dank an Veyndan, der dazu beigetragen hat, dass das Auslagern nicht mehr von Android-/JVM-spezifischen Funktionen abhängt. (#553, #554, #555, #559)
Version 3.2.0-beta01
7. Juni 2023
androidx.paging:paging-*:3.2.0-beta01
wird veröffentlicht. Version 3.2.0-beta01 enthält diese Commits.
Paging Compose
- Paging Compose hat offiziell die API-Stabilität erreicht. Daher wurde die Version von
1.0.0-alpha20
auf die Version aller anderen Paginierungsartefakte aktualisiert.
API-Änderungen
- Die eingestellten APIs
items(LazyPagingItems)
unditemsIndexed(LazyPagingItems)
wurden aus Paging Compose entfernt. Ein Beispiel für die entsprechenden Ersatz-APIs finden Sie in den Versionshinweisen zu Paging Compose1.0.0-alpha20
. (I9626e)
Version 3.2.0-alpha06
24. Mai 2023
androidx.paging:paging-*:3.2.0-alpha06
wird veröffentlicht. Version 3.2.0-alpha06 enthält diese Commits.
Neue Funktionen
- Es wurde eine neue
PagingSourceFactory
-Funktionsoberfläche hinzugefügt, die eine explizitere API-Oberfläche als die vorhandenen() -> PagingSource
-Lambdas bietet. Mit dieser Fabrik kann einePager
instanziiert werden. (I33165, b/280655188) - Neue
paging-testing
API vonList<Value>.asPagingSourceFactory()
hinzugefügt, um einePagingSourceFactory
abzurufen, die nur aus einer unveränderlichen Datenliste geladen wird. Die vorhandene Erweiterung fürFlow<List<Value>>
sollte weiterhin für Tests mit mehreren Generationen statischer Daten verwendet werden. (Id34d1, b/280655188)
API-Änderungen
- Alle öffentlichen APIs in den Tests für die Seitensuche sind jetzt mit
@VisibleForTesting
gekennzeichnet, damit sichergestellt wird, dass diese APIs nur in Tests verwendet werden. (I7db6e) - Für die
asSnapshot
API muss keinCoroutineScope
mehr übergeben werden. Standardmäßig wird jetzt der Kontext verwendet, der vom übergeordneten Bereich übernommen wurde. (Id0a78, b/282240990) - Die Parameter des
TestPager
-Konstruktors wurden neu angeordnet, damit sie der Reihenfolge der Parameter desPager
-Konstruktors entsprechen (I6185a) - Beim migrierten Auslagerungstest wurde der Lambda-Typ
() -> PagingSource<Key, Value>
inPagingSourceFactory<Key, Value>
geändert. (I4a950, b/280655188)
Verhaltensänderungen
- Der Haupt-Dispatcher ist nicht mehr erforderlich, um
asSnapshot
-Suchtests auszuführen. Das Testverhalten ändert sich dadurch nicht mehr. (Ie56ea)
Version 3.2.0-alpha05
3. Mai 2023
androidx.paging:paging-*:3.2.0-alpha05
wird veröffentlicht. Version 3.2.0-alpha05 enthält diese Commits.
API-Änderungen
- Die Paging Testing API von
asSnapshot
verwendet jetzt standardmäßig ein leeres Lambda für den ParameterloadOperations
. So können SieasSnapshot
aufrufen, ohne Ladevorgänge anzugeben, um die Daten aus dem ursprünglichen Aktualisierungsladevorgang abzurufen. (Ied354, b/277233770)
Verbesserungen an der Dokumentation
- Die Dokumentation zu
asPagingSourceFactory()
wurde aktualisiert, um zu verdeutlichen, dass es sich um eine Erweiterungsmethode für eineFlow
handelt, die eine wiederverwendbare Fabrik zum Generieren vonPagingSource
-Instanzen zurückgibt. (I5ff4f, I705b5) - Die Dokumentation zum
LoadResult.Page
-Konstruktor wurde aktualisiert, um klarzustellen, dassitemsBefore
unditemsAfter
überschrieben werden müssen, um das Springen zu unterstützen. (Ied354)
Externe Beiträge
- Vielen Dank an Veyndan, der dazu beigetragen hat, dass das Auslagern nicht mehr von Android-/JVM-spezifischen Funktionen abhängt. (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, #493)
Version 3.2.0-alpha04
8. Februar 2023
androidx.paging:paging-*:3.2.0-alpha04
wird veröffentlicht. Version 3.2.0-alpha04 enthält diese Commits.
Auslagerungstests
- Das
paging-testing
-Artefakt enthält jetzt eineasPagingSourceFactory
-Methode, mit der einepagingSourceFactory
aus einerFlow<List<Value>>
erstellt wird, die an einen Pager übergeben werden soll. JedesList<Value>>
, das vom Ablauf gesendet wird, stellt eine Generation von paginaten Daten dar. Dies erleichtert die Seitentests für beispielsweisePagingData
-Transformationen, da eine Datenquelle gefälscht werden kann, aus der der Pager Daten abrufen kann. (I6f230, b/235528239) Das
paging-testing
-Artefakt wurde um neue APIs erweitert, mit denen die Richtigkeit der Daten in einemFlow<PagingData<T>>
überprüft werden kann. So können Sie beispielsweise die Ausgabe einerFlow<PagingData<T>>
aus Ihrer ViewModel-Ebene prüfen.Dies geschieht über die
asSnapshot
-Kotlin-Erweiterung inFlow<PagingData<Value>>
, dieFlow<PagingData<Value>>
in eine direkteList<Value>
übersetzt. Mit demasSnapshot
-Lambda können Sie die Benutzeroberfläche Ihrer App über APIs wiescrollTo
oderappendScrollWhile
auf wiederholbare und konsistente Weise nachahmen, damit Sie jederzeit prüfen können, ob der Daten-Snapshot in Ihrem Satz von paginaten Daten korrekt ist.// Create your ViewModel instance val viewModel = … // Get the Flow of PagingData from the ViewModel val data< Flow<PagingData<String>> = viewModel.data val snapshot: List<String> = data.asSnapshot { // Each operation inside the lambda waits for the data to settle before continuing scrollTo(index = 50) // While you can’t view the items within the asSnapshot call, // you can continuously scroll in a direction while some condition is true // i.e., in this case until you hit a placeholder item appendScrollWhile { item: String -> item != “Header 1” } } // With the asSnapshot complete, you can now verify that the snapshot // has the expected values
asSnapshot
ist einesuspend
-Methode, die voraussichtlich inrunTest
ausgeführt wird. Weitere Informationen finden Sie unter Kotlin-Coroutinen unter Android testen. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)
API-Änderungen
- UI-Aufrufe von
getItem
undpeek
inAsyncPagingDataDiffer
undPagingDataAdapter
sind jetzt korrekt als nur im Hauptthread aufrufbar gekennzeichnet. (I699b6) - Platzhalter wurden aus generischen Typen entfernt, die von
TestPager
verwendet werden. Dadurch können die Ergebnisse dieser Methoden einfacher in Code verwendet werden, der in der Programmiersprache Java geschrieben wurde. (I56c42)
Version 3.2.0-alpha03
24. Oktober 2022
androidx.paging:paging-*:3.2.0-alpha03
wird veröffentlicht. Version 3.2.0-alpha03 enthält diese Commits.
Auslagerungstests
Dieser Release enthält ein neues Artefakt: paging-testing
. Dieses Artefakt enthält APIs, die für Unit-Tests jeder Schicht Ihrer App und ihrer Integration mit dem Paging entwickelt wurden.
Diese erste Version enthält beispielsweise eine TestPager
-Klasse, mit der Sie das Verhalten Ihrer eigenen benutzerdefinierten PagingSource
-Implementierung unabhängig von der Pager
und der realen Benutzeroberfläche validieren können, die Sie normalerweise zur Simulation der End-to-End-Paging-Integration benötigen.
TestPager
sollte als Fake betrachtet werden – ein Test-Double, der die tatsächliche Implementierung von Pager
widerspiegelt und gleichzeitig eine vereinfachte API-Oberfläche zum Testen einer PagingSource
bietet. Diese APIs sind suspend
-APIs und sollten wie im Leitfaden zum Testen von Kotlin-Coroutinen auf Android beschrieben in runTest
ausgeführt werden.
Ein Beispiel für die Verwendung dieser APIs finden Sie in den room-paging
-Tests, die für die Verwendung von TestPager
umgeschrieben wurden.
API-Änderungen
- Ermöglicht eine praktische Iteration von
LoadResult.Page.data
bisLoadResult.Page.iterator()
. So ist die indirekte Verwendung derflatten
-Methode der Kotlin-Standardbibliothek möglich, wenn einList<LoadResult.Page>
übergeben wird, z. B. diepages
-Eigenschaft vonPagingState
, die an diePagingSource.getRefreshKey
-Methode übergeben wird. (Ie0718)
Version 3.2.0-alpha02
10. August 2022
androidx.paging:paging-*:3.2.0-alpha02
wird veröffentlicht. Version 3.2.0-alpha02 enthält diese Commits.
Neue Funktionen
- Die Auslagerung stellt jetzt Logs über die Klassen
AsyncPagingDataDiffer
oderPagingDataAdapter
bereit, um Debug-Informationen ausPagingData
zu erfassen. - Die Logs können über den Befehl
adb shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE].
aktiviert werden(b/235527159).
Fehlerkorrekturen
- Der Fehler beim fehlenden
PagingDataDiffer
-Konstruktor bei Verwendung vonpaging-common:3.2.0-alpha01
mit der Laufzeitpaging-runtime:3.1.1
oder älter wurde behoben.(b/235256201)
Version 3.2.0-alpha01
1. Juni 2022
androidx.paging:paging-*:3.2.0-alpha01
wird veröffentlicht. Version 3.2.0-alpha01 enthält diese Commits.
API-Änderungen
- Es wurden Konstruktoren für
PagingDataAdapter
undAsyncPagingDataDiffer
hinzugefügt, dieCoroutineContext
anstelle vonCoroutineDispatcher
akzeptieren. (Idc878) - Standardmäßig wirken sich
PagingData.from()
undPagingData.empty()
nicht mehr aufCombinedLoadStates
auf der Seite des Vortragenden aus. Es wurde eine neue Überladung hinzugefügt, mit dersourceLoadStates
undremoteLoadStates
an diese Konstruktoren übergeben werden können, um das bestehende Verhalten beizubehalten, bei demLoadStates
als vollständig terminal (d.h.NotLoading(endOfPaginationReached = false)
), mit der Option, bei Bedarf auch Remote-Status einzuschließen. Wenn keineLoadStates
übergeben werden, wird die vorherigeCombinedLoadStates
auf der Seite des Vortragenden beibehalten, wenn er die statischePagingData
empfängt. (Ic3ce5, b/205344028)
Fehlerkorrekturen
- Das Ergebnis von
PagingSource.getRefreshKey()
wird jetzt in Fällen, in denen es „null“ zurückgeben würde, aber eine nicht-null-Wert-initialKey
festgelegt wurde, korrekt vorinitialKey
priorisiert. (Ic9542, b/230391606)
Externer Beitrag
- :compose:ui:ui-test API (updateApi) aufgrund der Migration von test-coroutines-lib aktualisiert (I3366d)
Version 3.1
Version 3.1.1
9. März 2022
androidx.paging:paging-*:3.1.1
wird veröffentlicht. Version 3.1.1 enthält diese Commits.
Fehlerkorrekturen
- Zwischen den Generationen wurden
LoadState.NotLoading
-Ereignisse entfernt, die von.cachedIn()
fälschlicherweise eingefügt wurden. Durch diese Änderung lässt sich viel einfacher aufLoadState
-Änderungen reagieren, da redundanteLoadState.NotLoading
-Ereignisse entfernt werden, die zwischen den Wiederholungen fehlgeschlagener Ladevorgänge, beim Aktualisieren oder bei der Ungültigmachung generiert wurden.
Version 3.1.0
17. November 2021
androidx.paging:paging-*:3.1.0
wird veröffentlicht. Version 3.1.0 enthält diese Commits.
Wichtige Änderungen seit Version 3.0.0
Flow<PagingData>.observable
undFlow<PagingData>.flowable
APIs sind nicht mehr experimentell- Verhalten ändert sich bei
LoadState
:endOfPaginationReached
ist jetzt immerfalse
fürLoadType.REFRESH
, sowohl fürPagingSource
als auch fürRemoteMediator
.LoadStates
aus dem Paging wartet jetzt auf gültige Werte sowohl vonPagingSource
als auch vonRemoteMediator
, bevor es weitergeleitet wird. Neue Generationen vonPagingData
beginnen jetzt immer korrekt mitLoading
für den Aktualisierungsstatus, anstatt in einigen Fällen fälschlicherweise aufNotLoading
zurückgesetzt zu werden..loadStateFlow
und.addLoadStateListener
senden in Presenter APIs nicht mehr redundant eine anfänglicheCombinedLoadStates
, bei der die Mediator-Status immer aufnull
festgelegt sind.
- Die Stornierung früherer Generationen erfolgt jetzt sofort bei Ungültigmachung oder neuen Generationen. Die Verwendung von
.collectLatest
aufFlow<PagingData>
sollte nicht mehr erforderlich sein, wird aber weiterhin empfohlen. PagingSource.LoadResult.Invalid
wurde als neuer Rückgabetyp vonPagingSource.load
hinzugefügt. Dadurch werden alle ausstehenden oder zukünftigen Ladeanfragen an diesePagingSource
von Paging verworfen und ungültig gemacht. Dieser Rückgabetyp ist für potenziell ungültige oder veraltete Daten ausgelegt, die aus der Datenbank oder dem Netzwerk zurückgegeben werden können.- Die
.onPagesPresented
- und.addOnPagesUpdatedListener
-APIs für Vortragende wurden hinzugefügt. Sie werden synchron ausgelöst, wenn Seiten in der Benutzeroberfläche angezeigt werden. Seitenaktualisierungen können in den folgenden Fällen erfolgen:- Das initiale Laden einer neuen Generation von PagingData wird abgeschlossen, unabhängig davon, ob die neue Generation Änderungen an den angezeigten Elementen enthält. Auch wenn eine neue Generation das erste Laden ohne Aktualisierungen durchführt, weil die Liste genau dieselbe ist, wird dieser Rückruf ausgelöst.
- Es wird eine Seite eingefügt, auch wenn sie keine neuen Elemente enthält.
- Eine Seite wird gelöscht, auch wenn sie leer war.
Version 3.1.0-rc01
3. November 2021
androidx.paging:paging-*:3.1.0-rc01
wird veröffentlicht. Version 3.1.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Behobenes Problem: In .cachedIn() kam es zu einer Race-Condition und einem Speicherleck, wenn mehrere Ladeereignisse von Paging downstream gesendet wurden, während keine Beobachter vorhanden waren oder wenn ein Beobachter zu neuen PagingData wechselte. (Ib682e)
Version 3.1.0-beta01
13. Oktober 2021
androidx.paging:paging-*:3.1.0-beta01
wird veröffentlicht. Version 3.1.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem viele schnelle Elementzugriffe dazu führen konnten, dass sie bei prefetchDistance nicht berücksichtigt wurden, was zu einer Verzögerung beim Laden der Seite führte. Das ist besonders dann ein Problem, wenn viele Elemente gleichzeitig in einer Reihenfolge angeordnet sind, bei der das Laden gegen die Scrollrichtung des Nutzers priorisiert wird. Diese Elementzugriffe werden jetzt zwischengespeichert und synchron priorisiert, um zu verhindern, dass sie verworfen werden. (aosp/1833273)
Version 3.1.0-alpha04
29. September 2021
androidx.paging:paging-*:3.1.0-alpha04
wird veröffentlicht. Version 3.1.0-alpha04 enthält diese Commits.
API-Änderungen
- Die APIs
Flow<PagingData>.observable
undFlow<PagingData>.flowable
sind nicht mehr experimentell. (Ie0bdd)
Fehlerkorrekturen
- Bei LoadStates ist
endOfPaginationReached
jetzt immerfalse
fürLoadType.REFRESH
. Bisher war es möglich, dass „endOfPaginationReached“ für „RemoteMediator“true
war, aber nicht für „PagingSource“.REFRESH
Dieses Verhalten wurde jetzt konsolidiert, sodass immerfalse
zurückgegeben wird, da es nie sinnvoll ist, dass REFRESH endgültig ist. Es ist jetzt als Teil des API-Vertrags in LoadStates dokumentiert. Wenn Sie entscheiden, ob die Paginierung beendet wird, sollten Sie immer die Anweisungen APPEND oder PREPEND berücksichtigen. (I047b6) LoadStates von Paging warten jetzt auf gültige Werte sowohl von PagingSource als auch von RemoteMediator, bevor sie zwischen den Generationen weitergeleitet werden. So wird verhindert, dass neue PagingData-Generationen „Nicht geladen“ in CombinedLoadStates.source.refresh senden, wenn bereits „Wird geladen“ festgelegt wurde. Neue PagingData-Generationen beginnen jetzt immer korrekt mit „Wird geladen“ für den Aktualisierungsstatus, anstatt in einigen Fällen fälschlicherweise zuerst auf „Nicht geladen“ zurückgesetzt zu werden.
Die Stornierung früherer Generationen erfolgt jetzt sofort bei Ungültigkeit oder neuen Generationen. Die Verwendung von .collectLatest auf
Flow<PagingData>
sollte nicht mehr erforderlich sein, wird aber weiterhin dringend empfohlen. (I0b2b5, b/177351336, b/195028524).loadStateFlow
und.addLoadStateListener
in Presenter-APIs senden nicht mehr redundant eine anfänglicheCombinedLoadStates
, bei der die Mediatorstatus immer aufnull
und die Quellstatus immer aufNotLoading(endOfPaginationReached = false)
gesetzt sind. Das bedeutet Folgendes:- Mediator-Status werden immer ausgefüllt, wenn du RemoteMediator verwendest.
- Wenn Sie einen neuen loadState-Listener oder einen neuen Collector für
.loadStateFlow
registrieren, wird der aktuelle Wert nicht mehr sofort gesendet, wenn kein echterCombinedLoadStates
vonPagingData
empfangen wurde. Das kann passieren, wenn ein Collector oder Listener gestartet wird, bevor einPagingData
gesendet wurde. (I1a748)
Version 3.1.0-alpha03
21. Juli 2021
androidx.paging:paging-*:3.1.0-alpha03
wird veröffentlicht. Version 3.1.0-alpha03 enthält diese Commits.
API-Änderungen
PagingSource wird ein dritter Rückgabetyp für LoadResult hinzugefügt: LoadResult.Invalid. Wenn PagingSource.load LoadResult.Invalid zurückgibt, werden die geladenen Daten verworfen und die PagingSource ungültig. Dieser Rückgabetyp ist für potenziell ungültige oder veraltete Daten ausgelegt, die aus der Datenbank oder dem Netzwerk zurückgegeben werden können.
Wenn beispielsweise in die zugrunde liegende Datenbank geschrieben wird, die PagingSource aber nicht rechtzeitig ungültig wird, werden möglicherweise inkonsistente Ergebnisse zurückgegeben, wenn die Implementierung von der Unveränderlichkeit des zugrunde liegenden Datasets abhängt, von dem aus geladen wird (z.B. LIMIT/OFFSET-Datenbankimplementierungen). In diesem Szenario wird empfohlen, nach dem Laden auf Ungültigheit zu prüfen und LoadResult.Invalid zurückzugeben. Dadurch werden alle ausstehenden oder zukünftigen Ladeanfragen an diese PagingSource von Paging verworfen und ungültig gemacht.
Dieser Rückgabetyp wird auch von der Paging2 API unterstützt, die LivePagedList oder RxPagedList nutzt. Wenn Sie eine PagingSource mit den PagedList APIs von Paging2 verwenden, wird die PagedList sofort getrennt. Dadurch werden weitere Versuche zum Laden von Daten in dieser PagedList verhindert und die PagingSource wird ungültig.
LoadResult ist eine versiegelte Klasse. Das bedeutet, dass diese Änderung nicht mit der Quelle kompatibel ist. Bei Anwendungsfällen, in denen PagingSource.load-Ergebnisse direkt verwendet werden, muss LoadResult.Invalid zur Kompilierungszeit verarbeitet werden. Kotlin-Nutzer, die den Rückgabetyp mit exhaustive-when prüfen, müssen beispielsweise eine Prüfung für den ungültigen Typ hinzufügen. (Id6bd3, b/191806126, b/192013267)
Fehlerkorrekturen
- Callbacks zur Datenannullierung, die über PagingSource.registerInvalidatedCallback oder DataSource.addInvalidatedCallback hinzugefügt wurden, werden jetzt automatisch ausgelöst, wenn sie bei einer PagingSource / DataSource registriert wurden, die bereits ungültig war. Dadurch wird eine Race-Bedingung behoben, die dazu führte, dass beim Paging Invalidation-Signale gelöscht wurden und das System hängenblieb, wenn eine Quelle angegeben wurde, die bereits beim ersten Laden ungültig war. Außerdem werden invalidate-Callbacks jetzt nach dem Auslösen ordnungsgemäß entfernt, da sie garantiert höchstens einmal aufgerufen werden. (I27e69)
- Senden des Platzhalter-Anfangswerts (InitialPagedList) aus einem neu instanziierten PagedList-Stream, z.B. Mit LivePagedListBuilder oder RxPagedListBuilder werden zuvor geladene Daten nicht mehr gelöscht.
Version 3.1.0-alpha02
1. Juli 2021
androidx.paging:paging-*:3.1.0-alpha02
wird veröffentlicht. Version 3.1.0-alpha02 enthält diese Commits.
Neue Funktionen
Es wurden die Listener-API „onPagesPresented“ und die Flow-Presenter-API hinzugefügt, die sofort ausgelöst werden, nachdem die angezeigten Seiten in der Benutzeroberfläche aktualisiert wurden.
Da diese Updates synchron mit der Benutzeroberfläche erfolgen, können Sie Adaptermethoden wie .snapshot oder .getItemCount aufrufen, um den Status nach der Anwendung des Updates zu prüfen. Hinweis: .snapshot() wurde explizit aufgerufen, da es bei jeder Aktualisierung teuer werden kann.
Seitenaktualisierungen können in den folgenden Fällen erfolgen:
- Das initiale Laden einer neuen Generation von PagingData wird abgeschlossen, unabhängig davon, ob die neue Generation Änderungen an den angezeigten Elementen enthält. Auch wenn eine neue Generation das erste Laden ohne Aktualisierungen durchführt, weil die Liste genau dieselbe ist, wird dieser Rückruf ausgelöst.
- Es wird eine Seite eingefügt, auch wenn sie keine neuen Elemente enthält.
- Eine Seite wird gelöscht, auch wenn sie leer ist (I272c9, b/189999634)
Fehlerkorrekturen
- Beim Zugriff auf PagedList.dataSource über den ursprünglichen Wert, der von LivePagedList oder RxPagedList generiert wurde, wird nicht mehr fälschlicherweise eine IllegalStateException geworfen (I96707)
Version 3.1.0-alpha01
2. Juni 2021
androidx.paging:paging-*:3.1.0-alpha01
wird veröffentlicht. Version 3.1.0-alpha01 enthält diese Commits.
API-Änderungen
- Von
paging-rxjava3
bereitgestellte Klassen befinden sich jetzt im Paketandroidx.paging.rxjava3
, damit sie nicht mitpaging-rxjava2
(Ifa7f6) in Konflikt stehen.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem Paging manchmal No-Op-Unterschiedsereignisse an RecyclerView sendete, was dazu führen konnte, dass bestimmte Listener zu früh ausgelöst wurden. (Ic507f, b/182510751)
Externer Beitrag
- Dem rxjava3-Artefakt wurden verworfene PagedList-APIs zur Kompatibilität hinzugefügt (Id1ce2, b/182497591)
Paging Compose Version 1.0.0
Version 1.0.0-alpha20
24. Mai 2023
androidx.paging:paging-compose:1.0.0-alpha20
wird veröffentlicht. Version 1.0.0-alpha20 enthält diese Commits.
Neue Funktionen
- Die Funktion „Paging Compose“ unterstützt jetzt die Vorschau einer Liste mit fiktiven Daten. Dazu erstellen Sie eine
PagingData.from(fakeData)
und legen diesePagingData
in eineMutableStateFlow
ein (z. B.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Wenn du diese Daten als Eingabe für@Preview
verwendest, kannst du dir mitcollectAsLazyPagingItems()
eine Vorschau vonLazyPagingItems
ansehen. (I8a78d, b/194544557)
Fehlerkorrekturen
- Zwischengespeicherte Daten aus
pager.flow.cachedIn
, die inLazyPagingItems
erfasst wurden, sind jetzt nach der Statuswiederherstellung sofort verfügbar, ohne dass eine asynchrone Erhebung erforderlich ist. Das bedeutet, dass die im Cache gespeicherten Daten nach der Wiederherstellung des Status sofort zur Darstellung bereit sind. (I97a60, b/177245496)
Version 1.0.0-alpha19
3. Mai 2023
androidx.paging:paging-compose:1.0.0-alpha19
wird veröffentlicht. Version 1.0.0-alpha19 enthält diese Commits.
Unterstützung aller Lazy-Layouts
Bisher wurden in Paging Compose benutzerdefinierte items
- und itemsIndexed
-Erweiterungen für LazyListScope
bereitgestellt. Das bedeutete, dass Paging Compose nicht mit anderen Lazy-Layouts wie LazyVerticalGrid
, HorizontalPager
oder anderen benutzerdefinierten Lazy-Komponenten aus den Wear- und TV-Bibliotheken verwendet werden konnte. Die Behebung dieser Einschränkung ist das Hauptupdate dieser Version.
Um mehr Lazy-Layouts zu unterstützen, mussten wir APIs auf einer anderen Ebene entwickeln. Anstatt für jedes Lazy-Layout eine benutzerdefinierte items
API bereitzustellen, bietet Paging Compose jetzt Erweiterungsmethoden auf etwas niedrigerer Ebene für LazyPagingItems
in itemKey
und itemContentType
. Diese APIs helfen Ihnen dabei, die key
- und contentType
-Parameter in die standardmäßigen items
-APIs zu implementieren, die bereits für LazyColumn
, LazyVerticalGrid
und ihre Entsprechungen in APIs wie HorizontalPager
vorhanden sind. (Ifa13b, Ib04f0, b/259385813)
Das bedeutet, dass die Unterstützung eines LazyVerticalGrid
so aussehen würde:
// This part is unchanged
val lazyPagingItems = pager.collectAsLazyPagingItems()
LazyVerticalGrid(columns = GridCells.Fixed(2)) {
// Here we use the standard items API
items(
count = lazyPagingItems.itemCount,
// Here we use the new itemKey extension on LazyPagingItems to
// handle placeholders automatically, ensuring you only need to provide
// keys for real items
key = lazyPagingItems.itemKey { it.uniqueId },
// Similarly, itemContentType lets you set a custom content type for each item
contentType = lazyPagingItems.itemContentType { "contentType" }
) { index ->
// As the standard items call provides only the index, we get the item
// directly from our lazyPagingItems
val item = lazyPagingItems[index]
PagingItem(item = item)
}
}
Weitere Beispiele für die Verwendung dieser neuen APIs finden Sie in unseren Beispielen.
Durch diese Änderungen werden die Beispiele für LazyColumn
und LazyRow
zwar um einige Zeilen länger, aber wir sind der Meinung, dass Einheitlichkeit bei allen Lazy-Layouts ein wichtiger Faktor für Nutzer ist, die Paging Compose in Zukunft verwenden. Aus diesem Grund wurden die vorhandenen Erweiterungen für LazyListScope
eingestellt. (I0c459, I92c8f, b/276989796)
API-Änderungen
- Zur Vereinfachung der Migration zu den neuen APIs unterstützen die Erweiterungsfunktionen
items
unditemsIndexed
inLazyListScope
jetzt einencontentType
-Parameter, der der Unterstützung in den neuen APIs entspricht. (Ib1918, b/255283378)
Abhängigkeitsupdates
- Die Abhängigkeit von Paging Compose wurde von Compose 1.0.5 auf Compose 1.2.1 aktualisiert. (Ib1918, b/255283378)
Version 1.0.0-alpha18
8. Februar 2023
androidx.paging:paging-compose:1.0.0-alpha18
wird ohne Änderungen veröffentlicht. Version 1.0.0-alpha18 enthält diese Commits.
Version 1.0.0-alpha17
24. Oktober 2022
androidx.paging:paging-compose:1.0.0-alpha17
wird veröffentlicht. Version 1.0.0-alpha17 enthält diese Commits.
Neue Funktionen
- Fügen Sie beim Aufrufen von
collectLazyPagingItems
die Unterstützung für eine benutzerdefinierteCoroutineContext
hinzu. (I7a574, b/243182795, b/233783862)
Version 1.0.0-alpha16
10. August 2022
androidx.paging:paging-compose:1.0.0-alpha16
wird veröffentlicht. Version 1.0.0-alpha16 enthält diese Commits.
Neue Funktionen
- Die Funktion „Paging“ stellt jetzt Logs über die Klasse
LazyPagingItems
bereit, um Informationen zur Fehlerbehebung bereitzustellen, die aus PagingData erfasst wurden. - Die Protokolle können über den Befehl
adb shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE]
aktiviert werden. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
Fehlerkorrekturen
- Der Fehler beim fehlenden
PagingDataDiffer
-Konstruktor bei Verwendung vonpaging-compose:1.0.0-alpha15
mitpaging-common:3.1.1
oder älter wurde behoben.(b/235256201,b/239868768)
Version 1.0.0-alpha15
1. Juni 2022
androidx.paging:paging-compose:1.0.0-alpha15
wird veröffentlicht. Version 1.0.0-alpha15 enthält diese Commits.
API-Änderungen
- Es wurden Konstruktoren für
PagingDataAdapter
undAsyncPagingDataDiffer
hinzugefügt, dieCoroutineContext
anstelle vonCoroutineDispatcher
akzeptieren. (Idc878)
Fehlerkorrekturen
LazyPagingItems
legt jetzt die anfänglicheloadState
auf eineLoadState.Loading
-Aktualisierung fest. (I55043, b/224855902)
Version 1.0.0-alpha14
13. Oktober 2021
androidx.paging:paging-compose:1.0.0-alpha14
wird veröffentlicht. Version 1.0.0-alpha14 enthält diese Commits.
Version 1.0.0-alpha13
29. September 2021
androidx.paging:paging-compose:1.0.0-alpha13
wird veröffentlicht. Version 1.0.0-alpha13 enthält diese Commits.
API-Änderungen
- Die Funktion
LazyPagingItems.snapshot()
wurde durch dasLazyPagingItems.itemSnapshotList
-Attribut ersetzt (Ie2da8) - Die eingestellte Funktion
LazyPagingItems.getAsState()
wurde entfernt (Ie65e4)
Version 1.0.0-alpha12
21. Juli 2021
androidx.paging:paging-compose:1.0.0-alpha12
wird veröffentlicht. Version 1.0.0-alpha12 enthält diese Commits.
API-Änderungen
- Für
items(lazyPagingItems)
unditemsIndexed(lazyPagingItems)
, die zum Verbinden der Paginierung mitLazyColumn/Row
verwendet werden, kann jetzt der Parameter „key“ angegeben werden. Damit lässt sich ein stabiler Schlüssel für das Element angeben. Weitere Informationen zu Schlüsseln (I7986d) - Die Funktion
lazyPagingItems.getAsState(index)
ist jetzt eingestellt. Verwenden Sie stattdessenlazyPagingItems[index]
. (I086cb, b/187339372)
Version 1.0.0-alpha11
30. Juni 2021
androidx.paging:paging-compose:1.0.0-alpha11
wird veröffentlicht. Version 1.0.0-alpha11 enthält diese Commits.
Version 1.0.0-alpha10
2. Juni 2021
androidx.paging:paging-compose:1.0.0-alpha10
wird veröffentlicht. Version 1.0.0-alpha10 enthält diese Commits.
Version 1.0.0-alpha09
18. Mai 2021
androidx.paging:paging-compose:1.0.0-alpha09
wird veröffentlicht. Version 1.0.0-alpha09 enthält diese Commits.
Fehlerkorrekturen
- Die itemCount- und item-Getter von LazyPagingItems sind jetzt beobachtbar, sodass sie auch mit LazyVerticalGrid verwendet werden können (Ie2446, b/171872064, b/168285687)
Kompatibilität von Compose
androidx.paging:paging-compose:1.0.0-alpha09
ist nur mit Compose-Version1.0.0-beta07
und höher kompatibel.
Version 1.0.0-alpha08
24. Februar 2021
androidx.paging:paging-compose:1.0.0-alpha08
wird veröffentlicht. Version 1.0.0-alpha08 enthält diese Commits.
Aktualisiert, um die Einbindung in Compose 1.0.0-beta01 zu ermöglichen.
Version 1.0.0-alpha07
10. Februar 2021
androidx.paging:paging-compose:1.0.0-alpha07
wird veröffentlicht. Version 1.0.0-alpha07 enthält diese Commits.
Aktualisiert, um Compose alpha12 zu unterstützen.
Version 1.0.0-alpha06
28. Januar 2021
androidx.paging:paging-compose:1.0.0-alpha06
wird veröffentlicht. Version 1.0.0-alpha06 enthält diese Commits.
Fehlerkorrekturen
Aktualisiert, damit die Abhängigkeit von Compose 1.0.0-alpha11 besteht.
Version 1.0.0-alpha05
13. Januar 2021
androidx.paging:paging-compose:1.0.0-alpha05
wird veröffentlicht. Version 1.0.0-alpha05 enthält diese Commits.
Aktualisiert, um von Compose 1.0.0-alpha10 abhängig zu sein.
Version 1.0.0-alpha04
16. Dezember 2020
androidx.paging:paging-compose:1.0.0-alpha04
wird veröffentlicht. Version 1.0.0-alpha04 enthält diese Commits.
Fehlerkorrekturen
- Die praktischen Eigenschaften
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
undCombinedLoadStates.append
wurden so aktualisiert, dass der Status vonLoading
nur dann aufNotLoading
umgestellt wird, wenn sowohl der Mediator- als auch der QuellladestatusNotLoading
ist. So wird sichergestellt, dass das Remote-Update angewendet wurde. (I65619)
Version 1.0.0-alpha03
2. Dezember 2020
androidx.paging:paging-compose:1.0.0-alpha03
wird veröffentlicht. Version 1.0.0-alpha03 enthält diese Commits.
- Aktualisiert, um mit Compose 1.0.0-alpha08 übereinzustimmen.
Version 1.0.0-alpha02
11. November 2020
androidx.paging:paging-compose:1.0.0-alpha02
wird veröffentlicht. Version 1.0.0-alpha02 enthält diese Commits.
API-Änderungen
.peek()
-,.snapshot()
-,.retry()
- und.refresh()
-Methoden zuLazyPagingItem
s hinzugefügt, die dieselben Funktionen wieAsyncPagingDataDiffer
/PagingDataAdapter
bieten (Iddfe8, b/172041660)
Version 1.0.0-alpha01
28. Oktober 2020
androidx.paging:paging-compose:1.0.0-alpha01
wird veröffentlicht. Version 1.0.0-alpha01 enthält diese Commits.
Neue Funktionen
Das paging-compose
-Artefakt ermöglicht die Integration zwischen der Paging Library und Jetpack Compose. Ein einfaches Anwendungsbeispiel:
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
Version 3.0.1
Version 3.0.1
21. Juli 2021
androidx.paging:paging-*:3.0.1
wird veröffentlicht. Version 3.0.1 enthält diese Commits.
Fehlerkorrekturen
- Beim Zugriff auf
PagedList.dataSource
über den ursprünglichen Wert, der vonLivePagedList
oderRxPagedList
generiert wurde, wird nicht mehr fälschlicherweise eine IllegalStateException ausgelöst (I96707)
Version 3.0.0
Version 3.0.0
5. Mai 2021
androidx.paging:paging-*:3.0.0
wird veröffentlicht. Version 3.0.0 enthält diese Commits.
Wichtige Funktionen von 3.0.0
Der Großteil der vorhandenen API von Paging 2.x.x wurde zugunsten der neuen Paging 3 APIs eingestellt. Dadurch konnten die folgenden Verbesserungen erzielt werden:
- Erstklassige Unterstützung für Kotlin-Coroutinen und Flow
- Support bei Stornierungen
- Integrierte Signale für Ladestatus und Fehler
- Funktion „Wiederholen und aktualisieren“
- Alle drei DataSource-Unterklassen wurden in einer einheitlichen PagingSource-Klasse kombiniert.
- Benutzerdefinierte Seitentransformationen, einschließlich einer integrierten Option zum Hinzufügen von Trennlinien
- Kopf- und Fußzeilen des Status werden geladen
Version 3.0.0-rc01
21. April 2021
androidx.paging:paging-*:3.0.0-rc01
wird veröffentlicht. Version 3.0.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem Paging manchmal No-Op-Unterschiedsereignisse an RecyclerView sendete, was dazu führen konnte, dass bestimmte Listener zu früh ausgelöst wurden. (Ic507f, b/182510751)
Version 3.0.0-beta03
24. März 2021
androidx.paging:paging-*:3.0.0-beta03
wird veröffentlicht. Version 3.0.0-beta03 enthält diese Commits.
Fehlerkorrekturen
- Wir haben die Verarbeitung von Platzhaltern beim Aktualisieren der Liste überarbeitet, um unerwartete Sprünge im RecyclerView zu vermeiden. Weitere Informationen finden Sie unter NullPaddedDiffing.md. (If1490, b/170027529, b/177338149)
- Die verschiedenen PagedList-Builder (alter Kompatibilitätspfad) rufen
DataSource.Factory.create()
nicht mehr fälschlicherweise synchron im Hauptthread auf, wenn.build()
aufgerufen wird. (b/182798948)
Version 3.0.0-beta02
10. März 2021
androidx.paging:paging-*:3.0.0-beta02
wird veröffentlicht. Version 3.0.0-beta02 enthält diese Commits.
API-Änderungen
- Die
@ExperimentalCoroutinesApi
-Opt-in-Anforderung wird jetzt korrekt an Rx3-Erweiterungen weitergegeben. Bisher wurden sie in der Methode@get
markiert, die vom Kotlin-Compiler aufgrund von https://youtrack.jetbrains.com/issue/KT-45227 (I5733c) ignoriert wird.
Fehlerkorrekturen
- Einschränkungen für die öffentliche Nutzung experimenteller APIs erzwingen (I6aa29, b/174531520)
- Ein Fehler wurde behoben, der dazu führte, dass
PagingState
immernull
war, wenn die Remoteaktualisierung aufgerufen wurde. - Es wurde ein Fehler behoben, durch den leere Seiten, die von PagingSource zurückgegeben wurden, verhindern konnten, dass Paging noch einmal abgerufen wurde, um
prefetchDistance
zu erfüllen, was dazu führte, dass Paging „hängen blieb“.
Version 3.0.0-beta01
10. Februar 2021
androidx.paging:paging-*:3.0.0-beta01
wird veröffentlicht. Version 3.0.0-beta01 enthält diese Commits.
API-Änderungen
- Rx2- und Rx3-Wrapper geben jetzt die experimentelle Anmerkung an, von der sie abhängen. Wenn Sie die Rx-kompatiblen Wrapper in „paging-rxjava2“ oder „paging-rxjava3“ verwenden, müssen Sie die Verwendungen jetzt mit
@OptIn(ExperimentalCoroutinesApi::class)
(Ib1f9d) annotieren.
Fehlerkorrekturen
- Behoben: Fehler
IndexOutOfBoundsException: Inconsistency detected
, der manchmal bei Verwendung vonDataSource
APIs der Version 2 über Kompatibilitätspfade auftritt isInvalid
-Aufrufe während der Initialisierung vonDataSource
, die über Kompatibilitätspfade verwendet werden, werden jetzt korrekt im fetchDispatcher und nicht im Hauptthread gestartet. Dadurch wird einIllegalStateException
behoben, der durch den Datenbankzugriff auf den Hauptthread bei Verwendung derPagingSource
-Implementierung von Room verursacht wurde.
Version 3.0.0-alpha13
27. Januar 2021
androidx.paging:paging-*:3.0.0-alpha13
wird veröffentlicht. Version 3.0.0-alpha13 enthält diese Commits.
API-Änderungen
PagingSource.getRefreshKey
muss jetzt implementiert werden. Es handelt sich um eine abstrakte Funktion ohne Standardimplementierung. Migrierende Nutzer können weiterhin die Standardimplementierung zurückgeben, die einfachnull
zurückgibt.getRefreshKey()
sollte jedoch eine echte Implementierung haben, die einen Schlüssel basierend auf der aktuellen Scrollposition des Nutzers zurückgibt, damit die Seitenabfolge bei Bedarf überPagingState.anchorPosition
zentriert um den Viewport herum weiter geladen werden kann. (I4339a)InvalidatingPagingSourceFactory
ist jetzt eine finale Klasse (Ia3b0a).- Konfigurieren des Terminal-Separators (Header / Fußzeile) mit einem zusätzlichen optionalen Parameter „SeparatorType“ Es gibt zwei Optionen:
FULLY_COMPLETE
– bestehendes Verhalten: Warten, bis sowohl PagingSource als auch RemoteMediator „endOfPaginationReached“ markieren, bevor Terminaltrennzeichen hinzugefügt werden. Wenn RemoteMediator nicht verwendet wird, wird der Remote-loadState ignoriert. Das ist vor allem dann nützlich, wenn Sie Abschnittsabscheider nur anzeigen lassen möchten, wenn der Abschnitt vollständig geladen ist, einschließlich des Abrufs aus einer Remotequelle, z.B. einem Netzwerk.SOURCE_COMPLETE
– Warten Sie nur, bis PagingSource „endOfPaginationReached“ markiert, auch wenn RemoteMediator verwendet wird. So können Kopf- und Fußzeilen synchron mit dem ersten Laden angezeigt werden, sodass Nutzer nicht scrollen müssen, um Terminaltrennzeichen zu sehen. (Ibe993, b/174700218)
Fehlerkorrekturen
- Ein seltener Speicherleck wurde behoben, der auftritt, wenn eine PagingSource ungültig gemacht wird, bevor der PageFetcher überhaupt mit dem Laden aus ihr beginnen kann. (I9606b, b/174625633)
Version 3.0.0-alpha12
13. Januar 2021
androidx.paging:paging-*:3.0.0-alpha12
wird veröffentlicht. Version 3.0.0-alpha12 enthält diese Commits.
API-Änderungen
- InvalidatingPagingSourceFactory ist keine abstrakte Klasse mehr, da sie nie abstrakte Methoden hatte. (I4a8c4)
- Es wurde eine Überladung von .cachedIn() hinzugefügt, die für Java-Nutzer ViewModel anstelle von Lifecycle oder CoroutineScope akzeptiert. (I97d81, b/175332619)
- Java-Aufrufern die asynchrone Verwendung von PagingData-Transformationsvorgänge ermöglichen, indem ein Executor in die Argumente des Transformationsoperators aufgenommen wird. Das Suffix „-Sync“ wurde bei allen Transformationsoperatoren mit „-Sync“ entfernt. Kotlin-Coroutine-Nutzer müssen die Mehrdeutigkeit beseitigen, indem sie die Erweiterungsfunktion aufrufen, die stattdessen einen Block zum Aussetzen akzeptiert.
Alle Transformationsoperatoren für PagingData wurden in Erweiterungen unter der statischen Klasse „PagingDataTransforms“ verschoben. Java-Nutzer müssen sie über statische Helfer aufrufen, z.B.
PagingDataTransforms.map(pagingData, transform)
Für Kotlin-Nutzer ist die Syntax identisch, Sie müssen die Funktion jedoch importieren. (If6885, b/172895919)
Fehlerkorrekturen
- Ein Fehler wurde behoben, aufgrund dessen
RemoteMediator.load()
währendadapter.refresh()
nicht aufgerufen wurde, wenn das Ende der Paginierung bereits erreicht wurde.
Version 3.0.0-alpha11
16. Dezember 2020
androidx.paging:paging-*:3.0.0-alpha11
wird veröffentlicht. Version 3.0.0-alpha11 enthält diese Commits.
Neue Funktionen
- Unterstützung für den gespeicherten Status für die folgenden grundlegenden Anwendungsfälle hinzugefügt (vollständige Unterstützung, insbesondere bei der mehrschichtigen Quelle, ist noch in Arbeit):
- Der Ablauf wird im Cache gespeichert und die Anwendung wird nicht beendet (z.B. wird der Ablauf in einem Ansichtsmodell im Cache gespeichert und die Aktivität wird im Prozess neu erstellt)
- Die Paginierungsquelle wird gezählt, Platzhalter sind aktiviert und das Layout ist nicht versetzt.
API-Änderungen
PagingSource.getRefreshKey()
ist jetzt eine stabile API (I22f6f, b/173530980)PagingSource.invalidate
ist keine offene Funktion mehr. Wenn Sie benachrichtigt werden möchten, wenn eine Datensatz-Ungültigmachung erfolgt, sollten Sie die Methode „registerInvalidatedCallback“ aufrufen, anstatt „invalidate“ zu überschreiben. (I628d9, b/173029013, b/137971356)- Pager hat jetzt neben den regulären Konstruktoren einen einzelnen experimentellen Konstruktor, anstatt experimentelle APIs über die Opt-in-Anmerkung in die öffentliche API zu schleusen. (I9dc61, b/174531520)
- Die praktischen Eigenschaften
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
undCombinedLoadStates.append
wurden so aktualisiert, dass der Status vonLoading
nur dann aufNotLoading
umgestellt wird, wenn sowohl der Mediator- als auch der QuellladestatusNotLoading
ist. So wird sichergestellt, dass das Remote-Update angewendet wurde. (I65619) LoadParams.pageSize wurde entfernt (war bereits eingestellt). Wir empfehlen,
LoadParams.loadSize
in Ihrer PagingSource zu verwenden.LoadParams.loadSize
entspricht immerPagingConfig.pageSize
, mit Ausnahme des Aufrufs zum Initialisieren des Ladevorgangs, bei dem esPagingConfig.initialLoadSize
entspricht.Wenn Sie Ihre Paging2-Datenquelle ohne Pager oder PaginatedList testen, stimmt
pageSize
möglicherweise nicht mitPagingConfig.pageSize
überein, wenn Sie auchinitialLoadSize
festlegen. Wenn das für Ihre Tests wichtig ist, verwenden Sie stattdessen einen Pager/PagedList, mit dem intern die richtige PageSize für Ihre DataSource-Lademethoden festgelegt wird. (I98ac7, b/149157296)
Fehlerkorrekturen
- Ein Absturz aufgrund einer IllegalStateException bei Verwendung von Trennzeichen mit festgelegter PagingConfig.maxSize wurde behoben. (I0ed33, b/174787528)
- Ein Fehler wurde behoben, durch den der Ladestatus für PREPEND / APPEND nicht sofort nach dem ersten Laden auf
NotLoading(endOfPaginationReached = true)
aktualisiert wurde, wenn RemoteMediator festgelegt war (I8cf5a) - Es wurde ein Fehler behoben, bei dem APIs auf Presenter-Seite wie .snapshot() und .peek() bei Aktualisierungen von ListUpdateCallback die vorherige (veraltete) Liste zurückgaben.
- Ein Fehler wurde behoben, durch den Trennoperatoren bei Verwendung mit RemoteMediator keine Kopf- oder Fußzeilen hinzugefügt haben.
- Es wurde ein Fehler behoben, durch den der LoadState für RemoteMediator auf „NotLoading“ aktualisiert wurde und im Status „Wird geladen“ hängen blieb.
- Ein Fehler wurde behoben, durch den die Paging2.0-Kompatibilitäts-API
.asPagingSourceFactory()
dazu führen konnte, dass die zugrunde liegendeDataSource
im falschen CoroutineDispatcher initialisiert wurde. Dadurch werden Abstürze und mögliche ANR-Fälle behoben, insbesondere wenn die aktuelle Implementierung von PagingSource von Room verwendet wird, die diesen Kompatibilitätspfad verwendet.
Version 3.0.0-alpha10
2. Dezember 2020
androidx.paging:paging-*:3.0.0-alpha10
wird veröffentlicht. Version 3.0.0-alpha10 enthält diese Commits.
API-Änderungen
Die veralteten APIs
dataRefreshFlow
unddataRefreshListener
wurden entfernt, da sie mit den Updates für „loadStateFlow“ und „Listener“ redundant sind. Für Nutzer, die migrieren, entspricht das loadStateFlow-Äquivalent:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
Fehlerkorrekturen
- „endOfPaginationReached“ für RemoteMediator
REFRESH
wird jetzt korrekt an LoadState-Aktualisierungen weitergegeben und verhindert, dassAPPEND
undPREPEND
ausgelöst werden. (I94a3f, b/155290248) - Wenn eine leere Liste angezeigt wird, weil die Startseite leer ist oder die Ergebnisse stark gefiltert wurden, wird das Laden von
PREPEND
- oderAPPEND
-Seiten durch die Paginierung nicht mehr verhindert. (I3e702, b/168169730) - Ein Problem wurde behoben, bei dem
getRefreshKey
bei nachfolgenden Generationen von PagingSource nicht aufgerufen wird, wenn Invalidationen schnell auftreten. (I45460, b/170027530)
Externer Beitrag
- Die neue abstrakte Klasse „InvalidatingPagingSourceFactory“ mit einer
.invalidate()
API wurde hinzugefügt, die „invalidate“ an alle von ihr gesendeten PagingSources weiterleitet. Vielen Dank an @claraf3! (Ie71fc, b/160716447)
Bekannte Probleme
- Kopf- und Fußzeilen aus der Transformation „.insertSeparators()“ werden bei Verwendung von RemoteMediator b/172254056 möglicherweise nicht sofort angezeigt.
- Die Verwendung von RemoteMediator kann dazu führen, dass die Remote-
LoadState
hängen bleibt, wenn die Ungültigmachung undPagingSource.load(LoadParams.Refresh(...))
abgeschlossen werden, bevorRemoteMediator.load()
zurückgegeben wird. b/173717820
Version 3.0.0-alpha09
11. November 2020
androidx.paging:paging-*:3.0.0-alpha09
wird veröffentlicht. Version 3.0.0-alpha09 enthält diese Commits.
API-Änderungen
- Die Methoden „dataRefreshFlow“ und „Listener“ mit einer „replaceWith“-Klausel werden vollständig eingestellt. (I6e2dd)
Fehlerkorrekturen
- Fehlerbehebung:
IllegalArgumentException
wird geworfen, wenn Trennzeichen mit RemoteMediator verwendet werden und eine Invalidation ausgelöst wird, während eine Remote-Ladevorgang, der „endOfPagination“ zurückgeben würde, noch ausgeführt wird (I3a260)
Version 3.0.0-alpha08
28. Oktober 2020
androidx.paging:paging-*:3.0.0-alpha08
wird veröffentlicht. Version 3.0.0-alpha08 enthält diese Commits.
API-Änderungen
- Die Kotlin-/Java-Varianten von
DataSource.InvalidatedCallback
wurden kombiniert, indem SAM-Konvertierungen in Kotlin über die funktionale Schnittstelle (verfügbar in Kotlin 1.4) aktiviert wurden. Außerdem wird ein Fehler behoben, bei dem die Kotlin-Variante der invalidate-Callbacks nicht aufgerufen wurde, nachdem sie durch.map
oder.mapByPage
transformiert wurde. (I1f244, b/165313046)
Fehlerkorrekturen
- Die Interaktion der Paginierung mit ViewPager wurde erheblich verbessert. Insbesondere wird ein
RemoteMediator#load
-Aufruf durch das Paging nicht mehr aufgrund einer Seitenungültigkeit abgebrochen. Außerdem wird keine Ladeanfrage mehr zum Anhängen oder Voranstellen gesendet, wenn REFRESH erforderlich ist, bis die REFRESH-Anfrage erfolgreich abgeschlossen wurde. (I6390b, b/162252536) - API-Lint-Prüfung für fehlende Getter-Matching-Builder ist für androidx aktiviert (I4bbea, b/138602561)
- Es wurde ein Fehler behoben, durch den
.withLoadState*
ConcatAdapter
-Hilfsprogramme abstürzten, weil RecyclerView aus dem Hintergrund-Thread benachrichtigt wurde (I18bb5, b/170988309) - Ein Fehler wurde behoben, durch den beim Laden einer sehr kleinen, nicht leeren Seite manchmal verhindert wurde, dass das Vorladen die Ladevorgänge richtig auslöste.Iffda3 b/169259468
Version 3.0.0-alpha07
1. Oktober 2020
androidx.paging:paging-*:3.0.0-alpha07
wird veröffentlicht. Version 3.0.0-alpha07 enthält diese Commits.
API-Änderungen
- Async PagingData-Guava-basierte Operatoren akzeptieren jetzt einen Executor als Parameter, um den Ausführungskontext zu steuern. (Id4372)
Fehlerkorrekturen
- Die IndexOutOfBounds-Ausnahme, die in RemoteMediator aufgrund einer Race-Condition geworfen wurde, wurde behoben. (I00b7f, b/165821814)
- Es wurde eine Race-Condition bei der Umwandlung von DataSource in PagingSource behoben, die dazu führen konnte, dass die resultierende PagingSource Invalidate-Signale von DataSource ignorierte.
- Ein Problem in der Logik zum Abrufen von Seiten wurde behoben, durch das manchmal keine neuen Generationen von PagingSource übernommen wurden, bis PagingDataAdapter.refresh() aufgerufen wurde.
- Ein Problem wurde behoben, durch das die Scrollposition manchmal verloren ging, wenn eine DataSource in eine PagingSource umgewandelt wurde (z. B. die von Room erstellte) und in Verbindung mit RemoteMediator verwendet wurde.
Externer Beitrag
- Vielen Dank an @simonschiller für das Hinzufügen von RxJava2-, RxJava3- und Guava-basierten asynchronen Transformationsoperatoren für PagingData.
Version 3.0.0-alpha06
2. September 2020
androidx.paging:paging-*:3.0.0-alpha06
wird veröffentlicht. Version 3.0.0-alpha06 enthält diese Commits.
API-Änderungen
UnsupportedOperationException
mit klarerer Fehlermeldung zur fehlenden Unterstützung für stabile IDs wird jetzt geworfen, wennPagingDataAdapter.setHasStableIds
aufgerufen wird. (Ib3890, b/158801427)
Fehlerkorrekturen
- Mit „insertSeparators“ werden keine leeren Seiten mehr herausgefiltert. So kann der Vortragende den Prefetch-Abstand auch dann einhalten, wenn viele leere Seiten eingefügt werden. (I9cff6, b/162538908)
Version 3.0.0-alpha05
19. August 2020
androidx.paging:paging-*:3.0.0-alpha05
wird veröffentlicht. Version 3.0.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Bei der Paginierung werden Seiten jetzt auch dann korrekt vorab geladen, wenn die angezeigten Daten stark gefiltert sind.
- Wenn
LoadResult.Error
zu einem wiederholten Laden zurückgegeben wird, wird der Wiederholungsversuch für Elementzugriffe nicht mehr fälschlicherweise ausgelöst.
Externer Beitrag
- Vielen Dank an Clara F. für die Hilfe beim Optimieren einiger Tests. (549612)
Version 3.0.0-alpha04
5. August 2020
androidx.paging:paging-*:3.0.0-alpha04
wird veröffentlicht. Version 3.0.0-alpha04 enthält diese Commits.
API-Änderungen
- Die
peek()
API wurdeAsyncPagingDataDiffer
undPagingDataAdapter
hinzugefügt, um den Zugriff auf dargestellte Daten zu ermöglichen, ohne dass Seiten geladen werden müssen. (I38898, b/159104197) PagingDataAdapter
undAsyncPagingDataDiffer
wurden einesnapshot()
API hinzugefügt, damit die angezeigten Elemente abgerufen werden können, ohne dass das Laden der Seite ausgelöst wird. (I566b6, b/159104197)- Es wurde ein
PagingData.from(List<T>)
-Konstruktor hinzugefügt, um statische Listen zu präsentieren. Diese können mit dem gesamten PagingData-Ablauf kombiniert werden, um statische Listen in bestimmten Status anzuzeigen, z. B. bevor die anfängliche Aktualisierung abgeschlossen ist oder einfach zum Testen von Transformationen. (Id134d) - Die APIs „dataRefresh Flow“ und „Listener“ werden eingestellt, da sie dazu dienen sollten, den Status der angezeigten Elemente bei REFRESH zu veröffentlichen. Aufgrund von Verbesserungen beim Timing des „loadState Flow“/Listener-Callbacks und der „itemCount“-Eigenschaft sind sie jedoch redundant. (Ia19f3)
- RxJava3-Kompatibilitäts-Wrapper für
PagingSource
undRemoteMediator
hinzugefügt (I49ef3, b/161480176)
Fehlerkorrekturen
PositionalDataSource
, die über dentoPagingSourceFactory
-Hilfstool inPagingSource
umgewandelt wurden, einschließlichPagingSource
, die von Room erstellt wurden, werden jetzt korrekt markiert, um das Springen zu unterstützen. (I3e84c, b/162161201)- Ein Fehler wurde behoben, bei dem die Verwendung der synchronen Variante von „submitData“ manchmal zu einem Race führte, der einen
ClosedSendChannelException
verursachte (I4d702, b/160192222)
Externer Beitrag
- Vielen Dank an Zac Sweers, der im Namen von Slack RxJava3-Kompatibilitäts-Wrapper hinzugefügt hat. (I49ef3, b/161480176)
Version 3.0.0-alpha03
22. Juli 2020
androidx.paging:paging-*:3.0.0-alpha03
wird veröffentlicht. Version 3.0.0-alpha03 enthält diese Commits.
API-Änderungen
- Der Konstruktor für PagingState ist jetzt öffentlich. Das sollte das Testen von Implementierungen von getRefreshKey() erleichtern (I8bf15)
- Kotlin-Varianten der DataSource-Map-Funktion wurden in Java ausgeblendet, um Unklarheiten zwischen Original- und Kotlin-Varianten zu beheben. (If7b23, b/161150011)
- Redundante APIs, die als praktische Funktion für Kotlin-Nutzer gedacht sind, wurden mit dem Attribut „@JvmSynthetic“ gekennzeichnet (I56ae5).
- Überladungen für den Konstruktor von LoadResult.Page hinzugefügt, bei denen „itemsBefore“ und „itemsAfter“ standardmäßig auf COUNT_UNDEFINED festgelegt sind (I47849)
- Vorhandene PagingData-Operatoren akzeptieren jetzt Aussetzungsmethoden. Außerdem wurden die neuen nicht aussetzenden Operatoren „mapSync“, „flatMapSync“ und „filterSync“ für Java-Nutzer eingeführt. Die vorhandenen Transformationsmethoden wurden in Erweiterungsfunktionen verschoben. Kotlin-Nutzer müssen sie jetzt importieren. (I34239, b/159983232)
Fehlerkorrekturen
- Bei Paginierungsquellen für „Room“ (und „PositionalDataSource“) wird jetzt ein vorangestellter Trennstrich als Teil der ersten Seite angezeigt, sodass der Nutzer nicht scrollen muss, um ihn zu sehen. (I6f747, b/160257628)
- Artikelzugriffe auf Platzhalter lösen jetzt korrekt das Laden von PagingSource aus, bis eine Seite zurückgegeben wird, die den angeforderten Index erfüllt, nachdem sie durch PagingData.filter() transformiert wurde (I95625, b/158763195)
- Behebung eines Fehlers, durch den das Scrollen nach dem Zurückgeben eines Fehlers durch PagingSource manchmal verhinderte, dass PagingDataAdapter.retry() noch einmal ausgeführt wurde. (I1084f, b/160194384)
- Ein Problem wurde behoben, bei dem nach dem Einfügen einer Seite möglicherweise keine Seiten geladen wurden, obwohl der Artikelzugriff innerhalb von prefetchDistance lag (Ie95ae, b/160038730)
- Durch die Einstellung von PagingConfig.maxSize werden nach einem Drop-Ereignis keine Platzhalter mehr aktiviert (I2be29, b/159667766)
Version 3.0.0-alpha02
24. Juni 2020
androidx.paging:paging-*:3.0.0-alpha02
wird veröffentlicht. Version 3.0.0-alpha02 enthält diese Commits.
API-Änderungen
- Überladungen für den Konstruktor von
PagingConfig
mit gängigen Standardwerten hinzugefügt (I39c50, b/158576040) - Überladungen für Konstruktoren von
PagingDataAdapter
undAsyncPagingDataDiffer
mit gängigen Standardwerten hinzugefügt (Ie91f5) - Die Adapter-APIs
dataRefreshFlow
unddataRefreshListener
geben jetzt einen booleschen Wert zurück, um anzugeben, ob einePagingData
leer ist (I6e37e, b/159054196) - RxJava- und Guava-APIs für RemoteMediator hinzugefügt: RxRemoteMediator und ListenableFutureRemoteMediator
- Dem PagingState wurden Helfer für den Zugriff auf gängige Elemente wie
isEmpty()
undfirstItemOrNull()
hinzugefügt (I3b5b6, b/158892717)
Fehlerkorrekturen
- Der Pager prüft jetzt bei der Fertigung, ob PagingSource wiederverwendet wird, um eine versehentliche Wiederverwendung ungültiger PagingSources zu verhindern, was zu einem unklaren Fehler geführt hat (I99809, b/158486430)
- Fehler bei RemoteMediator REFRESH verhindern nicht mehr das Laden von PagingSource (I38b1b, b/158892717)
- Die nicht anhaltende Version von
submitData
führt nicht mehr zu einem Absturz aufgrund gleichzeitiger Erfassung mehrererPagingData
, wenn sie nach der anhaltenden Version vonsubmitData
aufgerufen wird. (I26358, b/158048877) - Der Fehler „cannot collect twice from pager“ (nicht zweimal vom Pager abrufen können) wurde behoben, der nach einer Konfigurationsänderung auftreten konnte (I58bcc, b/158784811)
Version 3.0.0-alpha01
10. Juni 2020
androidx.paging:paging-*:3.0.0-alpha01
wird veröffentlicht. Version 3.0.0-alpha01 enthält diese Commits.
Die Paging Library wurde auf Version 3.0 aktualisiert, um mehrere wichtige neue Funktionen zu ermöglichen.
Neue Funktionen in Version 3.0
- Erstklassige Unterstützung für Kotlin-Coroutinen und Flow
- Unterstützung für asynchrones Laden mit Suspend-Funktionen von Goroutines, RxJava Single oder Guava ListenableFuture-Primitiven
- Integrierte Ladestatus- und Fehlersignale für responsives UI-Design, einschließlich Wiederholungs- und Aktualisierungsfunktionen.
- Verbesserungen an der Repository-Ebene
- Vereinfachte Benutzeroberfläche für Datenquellen
- Vereinfachte Netzwerk- und Datenbankpaginierung
- Support bei Kündigungen
- Verbesserungen an der Darstellungsschicht
Bekannte Probleme
- Javadocs für Paging 3 sind noch nicht verfügbar. In der Zwischenzeit können Sie die oben verlinkten Anleitungen oder die Kotlin-Dokumentation verwenden. (b/158614050)
Version 2.1.2
Version 2.1.2
18. März 2020
androidx.paging:paging:2.1.2
wird veröffentlicht. Version 2.1.2 enthält diese Commits im Vergleich zu Version 2.1.0.
Fehlerkorrekturen
- Behebung eines Problems mit
IndexOutOfBoundsException
in seltenen Fällen beim Umwandeln einer Position während der Ungültigmachung.
Release-Problem
Die Version
2.1.1
der Paging API wurde fälschlicherweise aus einem falsch konfigurierten Branch veröffentlicht. Dadurch wurden teilweise implementierte APIs und Funktionen freigegeben, die erst in einem zukünftigen Release verfügbar sein sollten.Die Auslagerung
2.1.2
enthält die Korrektur für die Lastzentrierung, die ursprünglich in 2.1.1 veröffentlicht wurde, aber dieses Mal korrekt auf die Version 2.1.0 angewendet wurde. Wenn Sie derzeit Version 2.1.1 verwenden, wird ein Upgrade auf diese Version dringend empfohlen.
Version 2.1.1
Version 2.1.1
18. Dezember 2019
androidx.paging:paging-*:2.1.1
wird veröffentlicht. Version 2.1.1 enthält diese Commits.
Fehlerkorrekturen
- Kontinuierliche anfängliche Ladevorgänge von PositionalDataSources sind jetzt auf den letzten Zugriff ausgerichtet, wenn Platzhalter deaktiviert sind
Version 2.1.0
Version 2.1.0
25. Januar 2019
Die Seitennummerierung 2.1.0
wird ohne Änderungen von 2.1.0-rc01
veröffentlicht.
Version 2.1.0-rc01
6. Dezember 2018
Die Seitennummerierung 2.1.0-rc01
wird ohne Änderungen von 2.1.0-beta01
freigegeben.
Version 2.1.0-beta01
1. November 2018
Die Seitennummerierung 2.1.0-beta01
wird ohne Änderungen von 2.1.0-alpha01
freigegeben.
Version 2.1.0-alpha01
12. Oktober 2018
Die 2.1.0-alpha01
-Version für die Auslagerung enthält zwei wichtige Ergänzungen – das Auslagern von Seiten und KTX-Erweiterungsbibliotheken für jedes Artefakt – sowie mehrere andere API-Änderungen und Fehlerkorrekturen.
API-Änderungen
PagedList.Config.Builder.setMaxSize()
wurde hinzugefügt, um die Anzahl der geladenen Elemente im Arbeitsspeicher zu begrenzen.androidx.paging.Config()
als Kotlin-Alternative fürPagedList.Config.Builder
hinzugefügtandroidx.paging.PagedList()
als Kotlin-Alternative fürPagedList.Builder
hinzugefügtDataSourceFactory.toLiveData()
als Kotlin-Alternative fürLivePagedListBuilder
hinzugefügtDataSourceFactory.toObservable()
undtoFlowable()
wurden als Kotlin-Alternativen fürRxPagedListBuilder
hinzugefügtAsyncPagedListDiffer.addPagedListListener()
wurde hinzugefügt, um zu überwachen, wann die PagedList getauscht wird. b/111698609- Variante
PagedListAdapter.onCurrentListChanged()
hinzugefügt, die alte und neue Liste weitergibt, vorherige Variante eingestellt - Es wurden
PagedListAdapter/AsyncPagedListDiffer.submitList()
Varianten hinzugefügt, die einen zusätzlichen Rückruf annehmen, der ausgelöst wird, wenn die Paginierungsliste nach dem Vergleich angezeigt wird. So können Sie einen PagedList-Swap mit anderen UI-Änderungen synchronisieren. b/73781068 PagedList.getLoadedCount()
hinzugefügt, um anzugeben, wie viele Elemente sich im Arbeitsspeicher befinden. Wenn Platzhalter deaktiviert sind, ist der Rückgabewert immer.size()
.
Fehlerkorrekturen
- Es wurde eine Race-Bedingung beim Vergleich behoben, wenn Listen wiederverwendet werden b/111591017
PagedList.loadAround()
gibt jetztIndexOutOfBoundsException
zurück, wenn der Index ungültig ist. Bisher kam es in diesem Fall zu einem Absturz mit einer unklaren anderen Ausnahme.- Ein Fall wurde behoben, bei dem eine extrem kleine anfängliche Ladegröße in Verbindung mit unveränderten Daten dazu führte, dass keine weiteren Daten geladen wurden b/113122599
Version 2.0.0
Version 2.0.0
1. Oktober 2018
2.0.0
für die Seitennavigation wird mit einer einzelnen Fehlerkorrektur veröffentlicht.
Fehlerkorrekturen
- Ein Absturz wurde behoben, der beim sehr schnellen Scrollen mit
PositionalDataSource
und Platzhaltern auftreten konnte b/114635383.
Version 2.0.0-beta01
2. Juli 2018
Fehlerkorrekturen
- Behoben: In einigen Fällen, in denen Inhalte vorangestellt wurden, sind sie verschwunden (Platzhalter deaktiviert, PositionalDataSource) b/80149146
- (Bereits in
1.0.1
veröffentlicht) Abstürze behoben, bei denenPagedListAdapter
undAsyncPagedListDiffer
keine Bewegungsereignisse signalisierten. b/110711937
Abhängigkeiten vor AndroidX
Fügen Sie für die folgenden Versionen von Paging, die vor Android X erschienen sind, die folgenden Abhängigkeiten hinzu:
dependencies {
def paging_version = "1.0.0"
implementation "android.arch.paging:runtime:$paging_version"
// alternatively - without Android dependencies for testing
testImplementation "android.arch.paging:common:$paging_version"
// optional - RxJava support
implementation "android.arch.paging:rxjava2:$paging_version"
}
Version 1.0.1
Version 1.0.1
26. Juni 2018
Die 1.0.1
-Seitenleiste wird mit einer einzelnen Fehlerkorrektur in runtime
veröffentlicht. Wir empfehlen dringend, 1.0.1
zu verwenden, um die Stabilität zu erhöhen. Paging RxJava2 1.0.1
ist ebenfalls veröffentlicht und identisch mit 1.0.0-rc1
.
Fehlerkorrekturen
- Abstürze wurden behoben, bei denen
PagedListAdapter
undAsyncPagedListDiffer
keine Verschiebungsereignisse signalisierten. b/110711937
RxJava2 Version 1.0.0
RxJava2 Version 1.0.0-rc1
16. Mai 2018
Paging RxJava2 1.0.0-rc1
wird ohne Änderungen gegenüber der ursprünglichen Alphaversion zum Release-Kandidaten.
Version 1.0.0
Version 1.0.0-rc1
19. April 2018 Releasekandidat für die Paginierung
Für die 1.0.0
-Version von Paging sind keine weiteren bekannten Probleme oder neuen Funktionen geplant. Bitte aktualisieren Sie Ihre Projekte auf 1.0.0-rc1
und helfen Sie uns bei den Härtetests, damit wir eine stabile 1.0.0
bereitstellen können.
In dieser Version gibt es keine Änderungen. Sie entspricht 1.0.0-beta1
.
Version 1.0.0-beta1
5. April 2018
Die Seitensuche befindet sich noch für kurze Zeit in der Betaphase, bevor sie in die Release-Kandidatenphase übergeht.
Wir planen keine weiteren API-Änderungen für Paging 1.0
und die Anforderungen an API-Änderungen sind sehr hoch.
Der Alpha-RxJava2-Support für das Paging wird als separates optionales Modul (android.arch.paging:rxjava2:1.0.0-alpha1
) veröffentlicht und wird vorübergehend separat versioniert, bis er stabil ist.
Diese neue Bibliothek bietet eine RxJava2-Alternative zu LivePagedListBuilder
, mit der Observable
s und Flowable
s mit Scheduler
s anstelle von Executor
s erstellt werden können:
Kotlin
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
Java
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
Neue Funktionen
RxPagedListBuilder
wird über das neue Artefaktandroid.arch.paging:rxjava2
hinzugefügt.
API-Änderungen
API-Änderungen zur Klärung der Rolle von Executors in Buildern:
setBackgroundThreadExecutor()
wurde insetFetchExecutor()
umbenannt (inPagedList.Builder
undLivePagedListBuilder
)setMainThreadExecutor()
wurde insetNotifyExecutor()
umbenannt (inPagedList.Builder
).
Das Mitglied
PagedList.mCallbacks
ist jetzt privat.
Fehlerkorrekturen
LivePagedListBuilder
löst die anfänglichePagedList
-Auslastung auf dem angegebenen Executor aus, anstatt auf dem Arch Components IO-Thread-Pool.Invalidate-Verhalten in internen
DataSource
-Wrappern korrigiert, die zur Implementierung vonDataSource.map
und zum Laden vonPositionalDataSource
ohne Platzhalter verwendet werden b/77237534
Version 1.0.0-alpha7
21. März 2018
Die Funktion „Paging“ 1.0.0-alpha7
wird zusammen mit „Lebenszyklen“ 1.1.1
veröffentlicht. Da Paging alpha7 vom Umzug der oben genannten Function
-Klasse abhängt, müssen Sie Ihre lifecycle:runtime
-Abhängigkeit auf android.arch.lifecycle:runtime:1.1.1
aktualisieren.
Paging alpha7
soll die letzte Version sein, bevor Paging in die Betaphase übergeht.
API-Änderungen
DataSource.LoadParams
-Objekte haben jetzt einen öffentlichen Konstruktor undDataSource.LoadCallback
-Objekte sind jetzt abstrakt. So können Sie eineDataSource
einschließen oder eineDataSource
direkt mit einem Mock-Callback testen. b/72600421- Mapper für DataSource und DataSource.Factory
- Mit
map(Function<IN,OUT>)
können Sie von einemDataSource
geladene Ergebnisse transformieren, umbrechen oder verschönern. mapByPage(<List<IN>,List<OUT>>)
ermöglicht dies auch für die Batchverarbeitung. Wenn beispielsweise für Elemente, die aus SQL geladen werden, zusätzlich eine separate Datenbank abgefragt werden muss, kann dies als Batch erfolgen.
- Mit
PagedList#getDataSource()
wird als praktische Methode hinzugefügt b/72611341- Alle veralteten Klassen wurden aus der API entfernt, einschließlich der Überreste des
recyclerview.extensions
-Pakets und derLivePagedListProvider
. DataSource.Factory
wird von einer Schnittstelle in eine abstrakte Klasse geändert, um Kartenfunktionen zu ermöglichen.
Fehlerkorrekturen
- „Builders“ in „final“ geändert. b/70848565
- Die Implementierung von Room
DataSource
wurde jetzt so angepasst, dass auch Abfragen mit mehreren Tabellen verarbeitet werden können. Diese Korrektur ist in Room 1.1.0-beta1 enthalten (siehe oben). - Ein Fehler wurde behoben, bei dem
BoundaryCallback.onItemAtEndLoaded
nicht fürPositionalDataSource
aufgerufen wurde, wenn Platzhalter aktiviert sind und die Gesamtgröße ein genaues Vielfaches der Seitengröße ist.
Version 1.0.0-alpha5
22. Januar 2018
Fehlerkorrekturen
- Problem beim Laden von Seiten beheben, wenn Platzhalter deaktiviert sind b/70573345
- Zusätzliche Protokollierung zur Fehlerbehebung bei IllegalArgumentException b/70360195 (und spekulative Korrektur auf Raumseite)
- Korrekturen am Javadoc-Beispielcode für b/70411933 und b/71467637