Paging
In dieser Tabelle sind alle Artefakte in der Gruppe androidx.paging aufgeführt.
| Artefakt | Stabile Release | Releasekandidat | Beta-Release | Alpha-Release |
|---|---|---|---|---|
| paging-* | 3.3.6 | 3.4.0-rc01 | - | - |
| paging-compose | 3.3.6 | 3.4.0-rc01 | - | - |
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 benötigten Artefakte hinzu:
Groovy
dependencies { def paging_version = "3.3.6" 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.4.0-rc01" }
Kotlin
dependencies { val paging_version = "3.3.6" 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.4.0-rc01") }
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. Wenn Sie neue Probleme entdecken oder Ideen zur Verbesserung dieser Bibliothek haben, lassen Sie es uns wissen. Bevor Sie ein neues Problem erstellen, sollten Sie sich jedoch die bereits gemeldeten Probleme in dieser Bibliothek ansehen. Wenn Sie sich einer Problemmeldung anschließen möchten, klicken Sie auf die Schaltfläche mit dem Stern.
Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.
Version 3.4
Version 3.4.0-rc01
14. Januar 2026
androidx.paging:paging-*:3.4.0-rc01 ist veröffentlicht. Version 3.4.0-rc01 enthält diese Commits.
Neue Funktionen
- Die Unterstützung für die folgenden KMP-Plattformen wurde entfernt:
macosX64,iosX64,watchosX64undtvosX64. Dies erfolgt in Übereinstimmung mit der Einstellung der macosX64-Ziele durch Jetbrains. (7cb9a4)
Version 3.4.0-beta01
17. Dezember 2025
androidx.paging:paging-*:3.4.0-beta01 ist veröffentlicht. Version 3.4.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Beheben Sie den Race-Zustand zwischen
RecyclerView- undRefresh-Ladevorgängen, der zuIndexOutOfBoundsExceptioninRecyclerViewführt. Unterbrochene UI-Updates aufgrund von kontinuierlichenRefresh-Ladevorgängen können dazu führen, dass der Paging-Status nicht mehr mitRecyclerViewsynchronisiert ist. Dieses Problem wird behoben, indem die Paginierung auf den Zustand vor der Aktualisierung zurückgesetzt wird, wenn eine Aktualisierung unterbrochen wird (z.B. durch einen nachfolgendenRefresh-Ladevorgang). (I771b0, b/409809768)
Version 3.4.0-alpha04
10. September 2025
androidx.paging:paging-*:3.4.0-alpha04 ist veröffentlicht. Version 3.4.0-alpha04 enthält diese Commits.
API-Änderungen
- Es wurde eine neue
PagingStateAPIclosestItemAroundPositionhinzugefügt, um das geladene Element abzurufen, das der Zielposition am nächsten ist und dem Eingabeprädikat entspricht. Damit lassen sich aktualisierte Schlüssel für Elemente generieren, bei denen sich das ideale verankerbare Element in der Nähe, aber nicht genau an der Zielposition befindet. (I96e5c, b/440187139)
Version 3.4.0-alpha03
27. August 2025
androidx.paging:paging-*:3.4.0-alpha03 ist veröffentlicht. Version 3.4.0-alpha03 enthält diese Commits.
Neue Funktionen
- „Paging-common“ wurde als neues Kotlin Multiplatform-Ziel (KMP) für Desktop-Anwendungen hinzugefügt. Insgesamt werden jetzt JVM(Android und Desktop), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) und Web (JavaScript, WasmJS) unterstützt. (Id2483, b/436884811)
- Für das Paging-Testing wurden neue Kotlin Multiplatform-Ziele (KMP) hinzugefügt. Insgesamt werden jetzt JVM(Android und Desktop), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) und Web (JavaScript, WasmJS) unterstützt. (I0c543, b/435014650)
- Paging-compose wurden neue Kotlin Multiplatform-Ziele (KMP) hinzugefügt. Insgesamt werden jetzt JVM(Android und Desktop), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) und Web (JavaScript, WasmJS) unterstützt. (I70d44, b/436884801)
API-Änderungen
- Verschieben des Standard-minSdk von API 21 zu API 23 (Ibdfca, b/380448311, b/435705964, b/435705223)
Version 3.4.0-alpha02
30. Juli 2025
androidx.paging:paging-*:3.4.0-alpha02 ist veröffentlicht. Version 3.4.0-alpha02 enthält diese Commits.
API-Änderungen
PagingData.fromermöglicht jetzt das Festlegen vonplaceholdersBeforeundplaceholdersAfter. Wenn Sie durch diese Platzhalter scrollen, werden keine Inhalte geladen. (I06983)
Version 3.4.0-alpha01
2. Juli 2025
androidx.paging:paging-*:3.4.0-alpha01 ist veröffentlicht. Version 3.4.0-alpha01 enthält diese Commits.
Neue Funktionen
- Paging hat die folgenden KMP-Ziele hinzugefügt: watchos, tvos, mingwX64, watchosDeviceArm64 und linuxArm64. (I237dd, Ia62b3, b/368046982, Icf15d, b/364652024, I139d3, b/338268719)
Fehlerkorrekturen
- Bei Android-Unit-Tests, in denen Paging 3.3 oder höher verwendet wird, wird nicht mehr die Ausnahme
PagingLoggerausgelöst (Ia9400, b/331684448). - Fehler behoben, bei dem
RecyclerViewbeim Scrollen während der Aktualisierung vonRecyclerViewIndexOutOfBoundsExceptionauslöst (Id1f16, b/381024738) - Ein Fehler wurde behoben, durch den beim Aktualisieren während des Scrollens durch die Paginierung keine weiteren Ladevorgänge ausgelöst werden konnten. (I60ca5, b/352586078)
- Ein Absturz beim Scrollen während der Aktualisierung von Paging-Elementen wurde behoben. (I8c65a, b/347649763)
Version 3.3
Version 3.3.6
12. Februar 2025
androidx.paging:paging-*:3.3.6 ist veröffentlicht. Version 3.3.6 enthält diese Commits.
Fehlerkorrekturen
- Aktualisierungs- und Wiederholungssignale, die während einer ersten Aktualisierung gesendet werden, werden jetzt gespeichert und automatisch noch einmal gesendet, sobald der Paging-Presenter bereit ist.
Externer Beitrag
Version 3.3.5
11. Dezember 2024
androidx.paging:paging-*:3.3.5 ist veröffentlicht. Version 3.3.5 enthält diese Commits.
Fehlerkorrekturen
- Fehler behoben, bei dem
RecyclerViewden FehlerIndexOutOfBoundsExceptionausgibt, wenn der Nutzer scrollt, währendRecyclerViewaktualisiert wird. (Id1f16, b/381024738)
Version 3.3.4
13. November 2024
androidx.paging:paging-*:3.3.4 ist veröffentlicht. Version 3.3.4 enthält diese Commits.
Fehlerkorrekturen
- Bei Android-Unit-Tests, in denen Paging 3.3 oder höher verwendet wird, wird kein Fehler wie
Method isLoggable in android.util.Log not mockedmehr ausgegeben. (Ia9400, b/331684448)
Version 3.3.2
7. August 2024
androidx.paging:paging-*:3.3.2 ist veröffentlicht. Version 3.3.2 enthält diese Commits.
Neue Funktionen
paging-commonundpaging-testinghaben neue Kotlin-Multiplatform-Ziele hinzugefügt:watchos,tvosundlinuxArm64(90c9768), (53e0eca)
Version 3.3.1
24. Juli 2024
androidx.paging:paging-*:3.3.1 ist veröffentlicht. Version 3.3.1 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem mit
AsyncPagingDataDifferoder darauf basierenden APIs wiePagingDataAdapter, die mitRecyclerViewverwendet werden, keine weiteren Ladevorgänge ausgelöst werden konnten, wenn die zugrunde liegende Datenquelle beim Scrollen aktualisiert wurde. (I60ca5, b/352586078) - Ein Absturz, der auftritt, wenn Elemente aus der zugrunde liegenden Datenquelle entfernt werden, während in einer
RecyclerViewmit einemPagingDataAdapteroderAsyncPagingDataDiffergescrollt wird, wurde behoben. (I8c65a, b/347649763)
Version 3.3.0
14. Mai 2024
androidx.paging:paging-*:3.3.0 ist veröffentlicht. Version 3.3.0 enthält diese Commits.
Wichtige Änderungen seit Version 3.2.0
PagingDataPresenterist jetzt eine öffentliche Klasse. Multiplattform-Präsentatoren können jetzt aufPagingDataPresenteraufgebaut werden, ohne dass interne Paging-APIs oderAsyncPagingDataDiffervonpaging-runtimeerforderlich sind.- In
hasErrorundisIdlewurden die neuen HilfsmethodenLoadStatesundCombinedLoadStateshinzugefügt, um zu prüfen, ob sichLoadStatesim Status „Error“ bzw.NotLoadingbefindet. Außerdem wurde eine neueawaitNotLoading()-Kotlin-Erweiterungsmethode fürFlow<CombinedLoadStates>hinzugefügt, die wartet, bis eine Last entweder den StatusNotLoadingoder „Fehler“ erreicht hat. PagingData.empty()löst jetzt standardmäßigNotLoading-Zustände aus, sofern keine benutzerdefiniertenLoadStatesan den Konstruktor übergeben werden. Das weicht vom bisherigen Verhalten ab, bei demLoadStatesnicht gesendet wird, wenn es an einPagingDataAdapterübermittelt wird, oder bei dem Ladestatus gesendet werden, wenn sie alsLazyPagingItemserfasst werden. Wenn sie alsLazyPagingItemserfasst werden, wird jetzt auch sofort nach der ersten Erstellung eine leere Liste angezeigt.
Kompatibilität mit Kotlin Multiplatform
Paging enthält jetzt Artefakte, die mit Kotlin Multiplatform kompatibel sind. Das ist vor allem auf die Upstream-Arbeit des multiplatform-paging-Projekts von CashApp zurückzuführen.
paging-commonhat alle Paging 3-APIs zucommonverschoben und ist jetzt zusätzlich zu Android auch mit JVM und iOS kompatibel.- Der Code von
paging-testingwurde zucommonverschoben und ist jetzt neben Android auch mit JVM und iOS kompatibel. paging-composehat seinen Code zucommonverschoben und liefert ein Android-Artefakt, das der Multiplattformunterstützung vonandroidx.composeentspricht.paging-runtime,paging-guava,paging-rxjava2undpaging-rxjava3bleiben 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 ist veröffentlicht. Version 3.3.0-alpha05 enthält diese Commits.
API-Änderungen
- Für die Paginierung wird jetzt die AndroidX-Annotation
@MainThreadfür gemeinsamen Code verwendet. (I78f0d, b/327682438)
Version 3.3.0-alpha04
6. März 2024
androidx.paging:paging-*:3.3.0-alpha04 ist veröffentlicht. Version 3.3.0-alpha04 enthält diese Commits.
Fehlerkorrekturen
- Es wurden kleinere Dokumentationsfehler im Zusammenhang mit der Hinzufügung der Kotlin-Multiplattform-Kompatibilität behoben. (aosp/2950785)
Version 3.3.0-alpha03
7. Februar 2024
androidx.paging:paging-*:3.3.0-alpha03 ist veröffentlicht. Version 3.3.0-alpha03 enthält diese Commits.
Neue Funktionen
PagingDataPresenterist jetzt eine öffentliche Klasse. Multiplattform-Präsentatoren können jetzt aufPagingDataPresenteraufgebaut werden, ohne dass interne Paging-APIs oderAsyncPagingDataDiffervonpaging-runtimeerforderlich sind. (Id1f74, b/315214786)- Es wurden die neuen Hilfsmethoden
LoadStatesundCombinedLoadStateshinzugefügt, um zu prüfen, ob sichLoadStatesim Status „Error“ (Fehler) oder „NotLoading“ befindet. Außerdem wurde eine neue API hinzugefügt, die auf eineLoadStateFlowwartet, bis sich eine Last entweder im StatusNotLoadingoder im Fehlerstatus befindet. (Id6c67)
Verhaltensänderung
PagingData.empty()löst jetzt standardmäßigNotLoading-Zustände aus, sofern keine benutzerdefiniertenLoadStatesan den Konstruktor übergeben werden. Das weicht vom bisherigen Verhalten ab, bei demLoadStatesnicht gesendet wird, wenn es an einPagingDataAdapterübermittelt wird, oder bei dem Ladestatus gesendet werden, wenn sie alsLazyPagingItemserfasst werden. Wenn sie alsLazyPagingItemserfasst werden, wird jetzt auch sofort nach der ersten Erstellung eine leere Liste angezeigt. (I4d11d, b/301833847)
Version 3.3.0-alpha02
20. September 2023
androidx.paging:paging-*:3.3.0-alpha02 ist veröffentlicht. Version 3.3.0-alpha02 enthält diese Commits.
Kompatibilität mit Kotlin Multiplatform
Paging enthält jetzt Artefakte, die mit Kotlin Multiplatform kompatibel sind. Das ist vor allem auf die Upstream-Arbeit des multiplatform-paging-Projekts von CashApp zurückzuführen. So können wir Abweichungen zwischen zwei Repositories vermeiden und sie kompatibel halten.
paging-commonhat alle Paging 3-APIs zucommonverschoben und ist jetzt zusätzlich zu Android auch mit JVM und iOS kompatibel.- Der Code von
paging-testingwurde zucommonverschoben und ist jetzt neben Android auch mit JVM und iOS kompatibel. paging-composehat seinen Code zucommonverschoben und liefert ein Android-Artefakt, das der Multiplattformunterstützung vonandroidx.composeentspricht.paging-runtime,paging-guava,paging-rxjava2undpaging-rxjava3bleiben nur für Android verfügbar.
API-Änderungen
- Die öffentliche Logger-Schnittstelle, die nur für die interne Verwendung vorgesehen war, wurde eingestellt (I16e95, b/288623117).
Externer Beitrag
- Vielen Dank an veyndan von Cash App für die Unterstützung bei der Migration von Paging zu 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. Verwenden Sie für macOS-, iOS- und Linux-Varianten3.3.0-alpha02.
Version 3.2
Version 3.2.1
6. September 2023
androidx.paging:paging-*:3.2.1 ist veröffentlicht. Version 3.2.1 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem die
asSnapshot()API des Paging-Testartefakts hängen blieb, wenn ein mitPagingData.from(List)erstellter Flow übergeben wurde, daasSnapshot()keine Informationen darüber hatte, wann das Laden abgeschlossen war (im Gegensatz zurPagingData.from(List, LoadStates)-Überladung). Diese Problemumgehung funktioniert nur für abschließbare Flows (z.B.flowOf(PagingData.from(...))). Bei nicht abschließbaren Flows (z.B.MutableStateFlow, verwenden Sie diePagingData.from-Überladung, dieLoadStatesbereitstellt. (I502c3) - Paging Compose verwendet jetzt intern
AndroidUiDispatcher.Main, um dafür zu sorgen, dass neue Daten im selben Frame wie der Abschluss des Ladevorgangs verfügbar sind. (Ia55af)
Version 3.2.0
26. Juli 2023
androidx.paging:paging-*:3.2.0 ist veröffentlicht. Version 3.2.0 enthält diese Commits.
Wichtige Änderungen seit Version 3.1.0
- Paging Compose hat API-Stabilität erreicht und wurde wieder in den Rest von Paging zusammengeführt. Die Version entspricht jetzt allen anderen Paging-Artefakten. Änderungen seit Version 3.1.0:
- Unterstützung für die Vorschau einer Liste von Falschdaten durch Erstellen eines
PagingData.from(fakeData)und Umschließen diesesPagingDatain einemMutableStateFlow(z.B.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Übergeben Sie diesen Flow als Empfänger fürcollectAsLazyPagingItems()an@Preview-Composable-Funktionen, um eine Vorschau zu erstellen. - Unterstützung für alle Lazy-Layouts wie
LazyVerticalGridundHorizontalPagersowie benutzerdefinierte Lazy-Komponenten aus Wear- und TV-Bibliotheken. Dies wurde durch neue Erweiterungsmethoden auf niedrigerer EbeneLazyPagingItemsitemKeyunditemContentTypeerreicht. So können Sie die ParameterkeyundcontentTypein den Standard-items-APIs implementieren, die bereits fürLazyColumn,LazyVerticalGridsowie deren Entsprechungen in APIs wieHorizontalPagervorhanden sind. items(lazyPagingItems)unditemsIndexed(lazyPagingItems), die nurLazyListScopeunterstützen, wurden eingestellt.
- Unterstützung für die Vorschau einer Liste von Falschdaten durch Erstellen eines
- Neues
paging-testing-Artefakt mit APIs, die für Unit-Tests der einzelnen Ebenen Ihrer App und ihrer Integration mit Paging in Isolation entwickelt wurden. Dazu gehören beispielsweise- Die Klasse
TestPagerermöglicht es Ihnen, das Verhalten Ihrer eigenen benutzerdefiniertenPagingSource-Implementierung unabhängig vom Pager und der tatsächlichen Benutzeroberfläche zu validieren. -
asPagingSourceFactory-APIs zum Transformieren einesFlow<List<Value>>oder einer statischenList<Value>in einPagingSourceFactory, das in Tests an einen Pager übergeben werden kann asSnapshotKotlin-Erweiterung fürFlow<PagingData<Value>>, dieFlow<PagingData<Value>>in ein direktesList<Value>übersetzt. MitasSnapshot lambdakönnen Sie die Benutzeroberfläche Ihrer App über APIs wiescrollTooderappendScrollWhilesimulieren, um den Snapshot der Daten an einem beliebigen Punkt in Ihren paginierten Daten zu überprüfen.
- Die Klasse
- Es wurden Standardlogs hinzugefügt, um Paging-Debugging-Informationen auf zwei Ebenen verfügbar zu machen:
VERBOSEundDEBUG. Die Logs können mit dem Befehladb shell setprop log.tag.Paging [DEBUG|VERBOSE]aktiviert werden. Dies gilt sowohl für die Paginierung mit Ansichten als auch für die Paginierung mit Compose. - Es wurden Konstruktoren für
PagingDataAdapterundAsyncPagingDataDifferhinzugefügt, dieCoroutineContextanstelle vonCoroutineDispatcherakzeptieren. - Es wurde eine neue funktionale Schnittstelle
PagingSourceFactoryhinzugefügt, die eine explizitere API-Oberfläche als die vorherigen () ->PagingSource-Lambdas bietet. Mit dieser Factory kann ein Pager instanziiert werden.
Version 3.2.0-rc01
21. Juni 2023
androidx.paging:paging-*:3.2.0-rc01 ist veröffentlicht. Version 3.2.0-rc01 enthält diese Commits.
Externer Beitrag
- Vielen Dank an Veyndan für die Unterstützung bei der Umstellung von Paging auf Android-/JVM-Spezifika. (#553, #554, #555, #559)
Version 3.2.0-beta01
7. Juni 2023
androidx.paging:paging-*:3.2.0-beta01 ist veröffentlicht. Version 3.2.0-beta01 enthält diese Commits.
Paging Compose
- Paging Compose hat offiziell API-Stabilität erreicht. Die Version wurde daher von
1.0.0-alpha20aktualisiert, damit sie mit der Version aller anderen Paging-Artefakte übereinstimmt.
API-Änderungen
- Die verworfenen APIs
items(LazyPagingItems)unditemsIndexed(LazyPagingItems)wurden aus Paging Compose entfernt. Ein Beispiel für die 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 ist veröffentlicht. Version 3.2.0-alpha06 enthält diese Commits.
Neue Funktionen
- Es wurde eine neue funktionale Schnittstelle
PagingSourceFactoryhinzugefügt, die eine explizitere API-Oberfläche als die vorhandenen() -> PagingSource-Lambdas bietet. Mit dieser Factory kann einePagerinstanziiert werden. (I33165, b/280655188) - Wir haben die neue
paging-testingAPI vonList<Value>.asPagingSourceFactory()hinzugefügt, um einPagingSourceFactoryabzurufen, das nur aus einer unveränderlichen Liste von Daten geladen wird. Die vorhandene Erweiterung aufFlow<List<Value>>sollte weiterhin für Tests mit mehreren Generationen statischer Daten verwendet werden. (Id34d1, b/280655188)
API-Änderungen
- Alle öffentlichen APIs in „paging-testing“ sind jetzt mit
@VisibleForTestingannotiert, um sicherzustellen, dass diese APIs nur in Tests verwendet werden. (I7db6e) - Für die
asSnapshotAPI muss keinCoroutineScopemehr ü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, um intuitiv der Reihenfolge der echtenPager-Konstruktorparameter zu entsprechen (I6185a). - Die Verwendung des Lambda-Typs
() -> PagingSource<Key, Value>für das Paging-Testing wurde zu TypPagingSourceFactory<Key, Value>migriert. (I4a950, b/280655188)
Geändertes Verhalten
- Der Hauptdispatcher ist nicht mehr erforderlich, um
asSnapshot-Paging-Tests auszuführen. Wenn Sie diese Einstellung festlegen, ändert sich das Testverhalten nicht mehr. (Ie56ea)
Version 3.2.0-alpha05
3. Mai 2023
androidx.paging:paging-*:3.2.0-alpha05 ist veröffentlicht. Version 3.2.0-alpha05 enthält diese Commits.
API-Änderungen
- In der Paging Testing API von
asSnapshotwird der ParameterloadOperationsjetzt standardmäßig auf eine leere Lambda-Funktion gesetzt. So kannasSnapshotaufgerufen werden, ohne dass Ladevorgänge übergeben werden müssen, um die Daten aus dem ersten Aktualisierungsladevorgang abzurufen. (Ied354, b/277233770)
Verbesserungen der Dokumentation
- Die Dokumentation zu
asPagingSourceFactory()wurde aktualisiert, um klarzustellen, dass es sich um eine Erweiterungsmethode für einFlowhandelt, die eine wiederverwendbare Factory zum Generieren vonPagingSource-Instanzen zurückgibt. (I5ff4f, I705b5) - Die Dokumentation zum
LoadResult.Page-Konstruktor wurde aktualisiert, um klarzustellen, dassitemsBeforeunditemsAfterüberschrieben werden müssen, um Sprünge zu unterstützen. (Ied354)
Externe Beiträge
- Vielen Dank an Veyndan für die Unterstützung bei der Umstellung von Paging auf Android-/JVM-Spezifika. (#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 ist veröffentlicht. Version 3.2.0-alpha04 enthält diese Commits.
Paging-Tests
- Das
paging-testing-Artefakt enthält jetzt eineasPagingSourceFactory-Methode zum Erstellen einespagingSourceFactoryaus einemFlow<List<Value>>, das an einen Pager übergeben werden soll. JedesList<Value>>, das vom Flow ausgegeben wird, stellt eine Generierung von paginierten Daten dar. So können Sie beispielsweise Paging-Tests fürPagingData-Transformationen durchführen, indem Sie eine Datenquelle für den Pager simulieren, aus der Daten erfasst werden. (I6f230, b/235528239) Das
paging-testing-Artefakt wurde um neue APIs erweitert, mit denen sich die Richtigkeit der in einemFlow<PagingData<T>>enthaltenen Daten überprüfen lässt. Damit kann beispielsweise die Ausgabe einerFlow<PagingData<T>>aus der ViewModel-Ebene bestätigt werden.Dies erfolgt über die
asSnapshot-Kotlin-Erweiterung fürFlow<PagingData<Value>>, dieFlow<PagingData<Value>>in ein direktesList<Value>übersetzt. Mit derasSnapshot-Lambdafunktion können Sie die Benutzeroberfläche Ihrer App über APIs wiescrollTooderappendScrollWhileauf wiederholbare und konsistente Weise nachbilden, sodass Sie den Snapshot der Daten an jedem Punkt in Ihren paginierten Daten überprüfen können.// 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 valuesasSnapshotist einesuspend-Methode, die voraussichtlich innerhalb vonrunTestausgeführt wird. Weitere Informationen finden Sie unter Kotlin-Coroutinen in Android testen. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)
API-Änderungen
- UI-Aufrufe für
getItemundpeekinAsyncPagingDataDifferundPagingDataAdaptersind jetzt korrekt als nur im Hauptthread aufrufbar markiert. (I699b6) - Wildcards wurden aus generischen Typen entfernt, die von
TestPagerverwendet werden. Dadurch ist es einfacher, die Ergebnisse dieser Methoden in Code zu verwenden, der in der Java-Programmiersprache geschrieben wurde. (I56c42)
Version 3.2.0-alpha03
24. Oktober 2022
androidx.paging:paging-*:3.2.0-alpha03 ist veröffentlicht. Version 3.2.0-alpha03 enthält diese Commits.
Paging-Tests
Dieser Release enthält ein neues Artefakt: paging-testing. Dieses Artefakt bietet APIs, die für Unit-Tests jeder Ebene Ihrer App und ihrer Integration mit Paging in Isolation entwickelt wurden.
Diese erste Version enthält beispielsweise die Klasse TestPager, mit der Sie das Verhalten Ihrer eigenen benutzerdefinierten PagingSource-Implementierung unabhängig von Pager und der echten Benutzeroberfläche validieren können, die Sie normalerweise zum Simulieren der End-to-End-Paging-Integration benötigen.
TestPager sollte als Fake betrachtet werden – ein Test-Double, das die tatsächliche Implementierung von Pager widerspiegelt und gleichzeitig eine vereinfachte API-Oberfläche zum Testen von PagingSource bietet. Diese APIs sind suspend-APIs und sollten in runTest ausgeführt werden, wie im Leitfaden zum Testen von Kotlin-Coroutinen unter Android beschrieben.
Ein Beispiel für die Verwendung dieser APIs finden Sie in den room-paging-Tests, die für die Verwendung von TestPager umgestaltet wurden.
API-Änderungen
- Ermöglicht eine bequeme Iteration über
LoadResult.Page.datadurchLoadResult.Page.iterator(). Dadurch kann indirekt dieflatten-Methode der Kotlin-Standardbibliothek verwendet werden, wenn einList<LoadResult.Page>angegeben wird, z. B. mit derpages-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 ist veröffentlicht. Version 3.2.0-alpha02 enthält diese Commits.
Neue Funktionen
- Beim Paging werden jetzt Logs über die Klassen
AsyncPagingDataDifferoderPagingDataAdapterbereitgestellt, um Debugging-Informationen ausPagingDataverfügbar zu machen. - Die Logs können über den
adb shell-Befehladb shell setprop log.tag.Paging [DEBUG|VERBOSE].aktiviert werden(b/235527159).
Fehlerkorrekturen
- Der Fehler „
PagingDataDiffer-Konstruktor fehlt“ bei der Verwendung vonpaging-common:3.2.0-alpha01mit der Laufzeitpaging-runtime:3.1.1oder älter wurde behoben.(b/235256201)
Version 3.2.0-alpha01
1. Juni 2022
androidx.paging:paging-*:3.2.0-alpha01 ist veröffentlicht. Version 3.2.0-alpha01 enthält diese Commits.
API-Änderungen
- Es wurden Konstruktoren für
PagingDataAdapterundAsyncPagingDataDifferhinzugefügt, dieCoroutineContextanstelle vonCoroutineDispatcherakzeptieren. (Idc878) - Standardmäßig wirken sich
PagingData.from()undPagingData.empty()nicht mehr aufCombinedLoadStatesauf der Seite des Moderators aus. Es wurde eine neue Überladung hinzugefügt, mit dersourceLoadStatesundremoteLoadStatesan diese Konstruktoren übergeben werden können, um das vorhandene Verhalten beizubehalten, bei demLoadStatesals vollständig terminal festgelegt wird (d.h.NotLoading(endOfPaginationReached = false)) mit der Option, bei Bedarf auch Remote-Status einzubeziehen. WennLoadStatesnicht übergeben werden, wird die vorherigeCombinedLoadStatesauf der Seite des Moderators beibehalten, wenn er die statischePagingDataempfängt. (Ic3ce5, b/205344028)
Fehlerkorrekturen
- Das Ergebnis von
PagingSource.getRefreshKey()wird jetzt korrekt gegenüberinitialKeypriorisiert, wenn es „null“ zurückgeben würde, aber eininitialKeyungleich null festgelegt wurde. (Ic9542, b/230391606)
Externer Beitrag
- Die API :compose:ui:ui-test (updateApi) wurde aufgrund der Migration der Test-Coroutines-Bibliothek (I3366d) aktualisiert.
Version 3.1
Version 3.1.1
9. März 2022
androidx.paging:paging-*:3.1.1 ist veröffentlicht. Version 3.1.1 enthält diese Commits.
Fehlerkorrekturen
- Zwischengenerationen-Ereignisse vom Typ
LoadState.NotLoadingwurden entfernt, die fälschlicherweise von.cachedIn()eingefügt wurden. Diese Änderung erleichtert die Reaktion aufLoadState-Änderungen erheblich, da redundanteLoadState.NotLoading-Ereignisse entfernt werden, die zwischen dem Wiederholen fehlgeschlagener Ladevorgänge, beim Aktualisieren oder während der Ungültigmachung erzeugt wurden.
Version 3.1.0
17. November 2021
androidx.paging:paging-*:3.1.0 ist veröffentlicht. Version 3.1.0 enthält diese Commits.
Wichtige Änderungen seit Version 3.0.0
- Die APIs
Flow<PagingData>.observableundFlow<PagingData>.flowablesind nicht mehr experimentell. - Verhaltensänderungen bei
LoadState:endOfPaginationReachedist jetzt immerfalsefürLoadType.REFRESHfürPagingSourceundRemoteMediator.LoadStatesaus der Paginierung wartet jetzt auf gültige Werte vonPagingSourceundRemoteMediator, bevor es downstream ausgegeben wird. Neue Generationen vonPagingDatabeginnen jetzt immer korrekt mitLoadingfür den Aktualisierungsstatus, anstatt in einigen Fällen fälschlicherweise aufNotLoadingzurückgesetzt zu werden..loadStateFlowund.addLoadStateListenerfür Presenter-APIs senden nicht mehr redundant ein anfänglichesCombinedLoadStates, bei dem die Mediator-Status immer aufnullfestgelegt sind.
- Das Abbrechen von vergangenen Generationen erfolgt jetzt sofort bei Ungültigkeit / neuen Generationen. Die Verwendung von
.collectLatestaufFlow<PagingData>ist nicht mehr erforderlich, wird aber weiterhin empfohlen. PagingSource.LoadResult.Invalidwurde als neuer Rückgabetyp vonPagingSource.loadhinzugefügt. Dadurch verwirft Paging alle ausstehenden oder zukünftigen Ladeanfragen an diesenPagingSourceund macht ihn ungültig. Dieser Rückgabetyp ist für die Verarbeitung potenziell ungültiger oder veralteter Daten konzipiert, die von der Datenbank oder dem Netzwerk zurückgegeben werden können.- Die APIs
.onPagesPresentedund.addOnPagesUpdatedListenerfür Vortragende wurden hinzugefügt. Sie werden synchron ausgelöst, wenn Seiten in der Benutzeroberfläche präsentiert werden. Seitenaktualisierungen können in den folgenden Fällen erfolgen:- Der erste Ladevorgang einer neuen Generation von PagingData wird abgeschlossen, unabhängig davon, ob die neue Generation Änderungen an den präsentierten Elementen enthält. Beispiel: Auch wenn eine neue Generation den anfänglichen Ladevorgang ohne Aktualisierungen abschließt, weil die Liste genau gleich ist, wird dieser Callback ausgelöst.
- Eine Seite wird eingefügt, auch wenn sie keine neuen Elemente enthält.
- Eine Seite wird entfernt, auch wenn sie leer war.
Version 3.1.0-rc01
3. November 2021
androidx.paging:paging-*:3.1.0-rc01 ist veröffentlicht. Version 3.1.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Ein Race-Condition-Problem und ein Speicherleck in .cachedIn() wurden behoben. Das Problem trat auf, wenn mehrere Ladeereignisse von Paging downstream gesendet wurden, während keine Beobachter vorhanden waren oder zwischen dem Wechsel eines Beobachters zu neuen PagingData. (Ib682e)
Version 3.1.0-beta01
13. Oktober 2021
androidx.paging:paging-*:3.1.0-beta01 ist 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 für die Vorabrufdistanz nicht berücksichtigt wurden, was zu Verzögerungen beim Laden von Seiten führte. Das ist besonders dann ein Problem, wenn viele Elemente gleichzeitig in einer Reihenfolge angeordnet sind, bei der das Laden entgegen der Scrollrichtung des Nutzers priorisiert wird. Diese Elementzugriffe werden jetzt gepuffert und synchron priorisiert, damit sie nicht verloren gehen. (aosp/1833273)
Version 3.1.0-alpha04
29. September 2021
androidx.paging:paging-*:3.1.0-alpha04 ist veröffentlicht. Version 3.1.0-alpha04 enthält diese Commits.
API-Änderungen
- Die APIs
Flow<PagingData>.observableundFlow<PagingData>.flowablesind nicht mehr experimentell. (Ie0bdd)
Fehlerkorrekturen
- Für LoadStates ist
endOfPaginationReachedjetzt immerfalsefürLoadType.REFRESH. Bisher konnte „endOfPaginationReached“ für „RemoteMediator“REFRESH, aber nicht für „PagingSource“truesein. Dieses Verhalten wurde jetzt konsolidiert, sodass immerfalsezurückgegeben wird, da REFRESH nie endgültig sein kann. Es ist jetzt als Teil des API-Vertrags in LoadStates dokumentiert. Bei der Entscheidung, ob die Paginierung beendet wird, sollten Sie immer die APPEND- oder PREPEND-Richtung berücksichtigen. (I047b6) LoadStates aus Paging warten jetzt auf gültige Werte von PagingSource und RemoteMediator, bevor sie zwischen den Generationen downstream ausgegeben werden. Dadurch wird verhindert, dass neue Generationen von PagingData „NotLoading“ in „CombinedLoadStates.source.refresh“ senden, wenn „Loading“ bereits vorhanden war. Neue Generationen von PagingData beginnen jetzt immer korrekt mit „Loading“ für den Aktualisierungsstatus, anstatt in einigen Fällen fälschlicherweise zuerst auf „NotLoading“ zurückgesetzt zu werden.
Stornierungen bei früheren Generationen erfolgen jetzt sofort bei Ungültigkeit/neuen Generationen. Es ist nicht mehr erforderlich, .collectLatest für
Flow<PagingData>zu verwenden. Es wird jedoch weiterhin dringend empfohlen. (I0b2b5, b/177351336, b/195028524)Bei
.loadStateFlow- und.addLoadStateListener-Aufrufen in Presenter-APIs wird nicht mehr redundant ein anfänglichesCombinedLoadStatesgesendet, bei dem die Mediator-Status immer aufnullund die Quellstatus aufNotLoading(endOfPaginationReached = false)festgelegt sind. Das bedeutet Folgendes:- Mediator-Status werden immer ausgefüllt, wenn Sie RemoteMediator verwenden.
- Wenn Sie einen neuen loadState-Listener oder einen neuen Collector für
.loadStateFlowregistrieren, wird der aktuelle Wert nicht mehr sofort ausgegeben, wenn noch kein echtesCombinedLoadStatesvonPagingDataempfangen wurde. Das kann passieren, wenn ein Collector oder Listener gestartet wird, bevor einPagingDataeingereicht wurde. (I1a748)
Version 3.1.0-alpha03
21. Juli 2021
androidx.paging:paging-*:3.1.0-alpha03 ist veröffentlicht. Version 3.1.0-alpha03 enthält diese Commits.
API-Änderungen
Der Rückgabetyp „LoadResult.Invalid“ wird „PagingSource“ hinzugefügt. Wenn PagingSource.load LoadResult.Invalid zurückgibt, werden die geladenen Daten verworfen und die PagingSource wird ungültig. Dieser Rückgabetyp ist für die Verarbeitung potenziell ungültiger oder veralteter Daten konzipiert, die von 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, kann es zu inkonsistenten Ergebnissen kommen, wenn die Implementierung von der Unveränderlichkeit des zugrunde liegenden Datasets abhängt, aus dem sie geladen wird (z.B. LIMIT OFFSET-Datenbankimplementierungen). In diesem Fall empfiehlt es sich, nach dem Laden auf Ungültigkeit zu prüfen und LoadResult.Invalid zurückzugeben. Dadurch werden alle ausstehenden oder zukünftigen Ladeanfragen an diese PagingSource verworfen und die PagingSource wird ungültig.
Dieser Rückgabetyp wird auch von der Paging2 API unterstützt, die LivePagedList oder RxPagedList verwendet. Wenn Sie eine PagingSource mit den PagedList-APIs von Paging2 verwenden, wird die PagedList sofort getrennt. Dadurch werden weitere Versuche, Daten in diese PagedList zu laden, beendet und die PagingSource wird ungültig.
LoadResult ist eine versiegelte Klasse. Das bedeutet, dass es sich um eine quellinkompatible Änderung handelt. Anwendungsfälle, in denen PagingSource.load-Ergebnisse direkt verwendet werden, müssen LoadResult.Invalid zur Kompilierzeit verarbeiten. Kotlin-Nutzer, die „exhaustive-when“ verwenden, um den Rückgabetyp zu prüfen, müssen beispielsweise eine Prüfung für „Invalid type“ hinzufügen. (Id6bd3, b/191806126, b/192013267)
Fehlerkorrekturen
- Über PagingSource.registerInvalidatedCallback oder DataSource.addInvalidatedCallback hinzugefügte Invalidierungs-Callbacks werden jetzt automatisch ausgelöst, wenn sie für eine PagingSource / DataSource registriert wurden, die bereits ungültig war. Damit wird eine Race-Bedingung behoben, die dazu geführt hat, dass Paging-Invalidierungssignale verloren gegangen sind und die Funktion hängen geblieben ist, wenn eine Quelle bereitgestellt wurde, die beim ersten Laden bereits ungültig war. Außerdem werden Invalidate-Callbacks jetzt nach dem Auslösen ordnungsgemäß entfernt, da sie garantiert höchstens einmal aufgerufen werden. (I27e69)
- Sie übermitteln den Platzhalter-Anfangswert (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 ist veröffentlicht. Version 3.1.0-alpha02 enthält diese Commits.
Neue Funktionen
Die Listener- und Flow-Presenter-APIs „onPagesPresented“ wurden hinzugefügt. Sie werden sofort ausgelöst, nachdem die präsentierten Seiten in der Benutzeroberfläche aktualisiert wurden.
Da diese Aktualisierungen synchron mit der Benutzeroberfläche erfolgen, können Sie Adaptermethoden wie .snapshot oder .getItemCount aufrufen, um den Status nach der Aktualisierung zu prüfen. Beachten Sie, dass .snapshot() explizit aufgerufen werden muss, da dies bei jedem Update ressourcenintensiv sein kann.
Seitenaktualisierungen können in den folgenden Fällen erfolgen:
- Der erste Ladevorgang einer neuen Generation von PagingData ist abgeschlossen, unabhängig davon, ob die neue Generation Änderungen an den präsentierten Elementen enthält. Beispiel: Auch wenn eine neue Generation den anfänglichen Ladevorgang ohne Aktualisierungen abschließt, weil die Liste genau gleich ist, wird dieser Callback ausgelöst.
- Eine Seite wird eingefügt, auch wenn sie keine neuen Elemente enthält.
- Eine Seite wird entfernt, auch wenn sie leer war (I272c9, b/189999634).
Fehlerkorrekturen
- Der Zugriff auf PagedList.dataSource über den Anfangswert, der von LivePagedList oder RxPagedList erzeugt wird, löst nicht mehr fälschlicherweise eine IllegalStateException aus (I96707).
Version 3.1.0-alpha01
2. Juni 2021
androidx.paging:paging-*:3.1.0-alpha01 ist veröffentlicht. Version 3.1.0-alpha01 enthält diese Commits.
API-Änderungen
- Die von
paging-rxjava3bereitgestellten Klassen befinden sich jetzt im Paketandroidx.paging.rxjava3, damit sie nicht mitpaging-rxjava2(Ifa7f6) in Konflikt geraten.
Fehlerkorrekturen
- Es wurde ein Problem behoben, bei dem durch die Paginierung manchmal No-Op-Differenzereignisse an RecyclerView gesendet wurden, was dazu führen konnte, dass bestimmte Listener zu früh ausgelöst wurden. (Ic507f, b/182510751)
Externer Beitrag
- Dem rxjava3-Artefakt wurden eingestellte PagedList-kompatible APIs 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 ist veröffentlicht. Version 1.0.0-alpha20 enthält diese Commits.
Neue Funktionen
- Paging Compose unterstützt jetzt die Vorschau einer Liste mit gefälschten Daten. Dazu erstellen Sie eine
PagingData.from(fakeData)und umschließen diesePagingDatamit einemMutableStateFlow(z. B.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Wenn Sie diese Daten als Eingabe für Ihre@Previewverwenden, werden bei Aufrufen voncollectAsLazyPagingItems()LazyPagingItemsmit Vorschau bereitgestellt. (I8a78d, b/194544557)
Fehlerkorrekturen
- Zwischengespeicherte Daten aus
pager.flow.cachedIn, die inLazyPagingItemserhoben wurden, sind jetzt sofort nach der Wiederherstellung des Status verfügbar, ohne dass eine asynchrone Erhebung erforderlich ist. Das bedeutet, dass die Daten im Cache sofort nach der ersten Zusammensetzung nach dem Wiederherstellen des Status für die Darstellung bereit sind. (I97a60, b/177245496)
Version 1.0.0-alpha19
3. Mai 2023
androidx.paging:paging-compose:1.0.0-alpha19 ist 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 Sie Paging Compose nicht mit anderen Lazy-Layouts wie LazyVerticalGrid, HorizontalPager oder anderen benutzerdefinierten Lazy-Komponenten verwenden konnten, die von den Wear- und TV-Bibliotheken bereitgestellt werden. Die primäre Änderung in dieser Version ist die Behebung dieser Inflexibilität.
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 sollen Ihnen helfen, die Parameter key und contentType in den Standard-items-APIs zu implementieren, die bereits für LazyColumn, LazyVerticalGrid sowie deren Entsprechungen in APIs wie HorizontalPager vorhanden sind. (Ifa13b, Ib04f0, b/259385813)
Das bedeutet, dass die Unterstützung von 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
Durch diese Änderungen werden die Beispiele für LazyColumn und LazyRow zwar einige Zeilen länger, aber wir sind der Meinung, dass die Einheitlichkeit aller Lazy-Layouts ein wichtiger Faktor für Nutzer von Paging Compose ist. Aus diesem Grund wurden die vorhandenen Erweiterungen für LazyListScope eingestellt. (I0c459, I92c8f, b/276989796)
API-Änderungen
- Um die Migration zu den neuen APIs zu erleichtern, unterstützen die Erweiterungsfunktionen
itemsunditemsIndexedfürLazyListScopejetzt 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 ist veröffentlicht. Version 1.0.0-alpha17 enthält diese Commits.
Neue Funktionen
- Unterstützung für ein benutzerdefiniertes
CoroutineContextbeim Aufrufen voncollectLazyPagingItemshinzugefügt. (I7a574, b/243182795, b/233783862)
Version 1.0.0-alpha16
10. August 2022
androidx.paging:paging-compose:1.0.0-alpha16 ist veröffentlicht. Version 1.0.0-alpha16 enthält diese Commits.
Neue Funktionen
- Paging stellt jetzt Logs über die Klasse
LazyPagingItemsbereit, um Debugging-Informationen aus PagingData verfügbar zu machen. - Die Logs können über den Befehl
adb shelladb shell setprop log.tag.Paging [DEBUG|VERBOSE]aktiviert werden. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
Fehlerkorrekturen
- Der Fehler „
PagingDataDiffer-Konstruktor fehlt“ bei der Verwendung vonpaging-compose:1.0.0-alpha15mitpaging-common:3.1.1oder älter wurde behoben.(b/235256201,b/239868768)
Version 1.0.0-alpha15
1. Juni 2022
androidx.paging:paging-compose:1.0.0-alpha15 ist veröffentlicht. Version 1.0.0-alpha15 enthält diese Commits.
API-Änderungen
- Es wurden Konstruktoren für
PagingDataAdapterundAsyncPagingDataDifferhinzugefügt, dieCoroutineContextanstelle vonCoroutineDispatcherakzeptieren. (Idc878)
Fehlerkorrekturen
- Mit
LazyPagingItemswird jetzt festgelegt, dass die anfänglicheloadStateeineLoadState.Loading-Aktualisierung hat. (I55043, b/224855902)
Version 1.0.0-alpha14
13. Oktober 2021
androidx.paging:paging-compose:1.0.0-alpha14 ist 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 ist veröffentlicht. Version 1.0.0-alpha13 enthält diese Commits.
API-Änderungen
- Die Funktion
LazyPagingItems.snapshot()wurde durch das AttributLazyPagingItems.itemSnapshotListersetzt (Ie2da8). - Die verworfene
LazyPagingItems.getAsState()wurde entfernt (Ie65e4)
Version 1.0.0-alpha12
21. Juli 2021
androidx.paging:paging-compose:1.0.0-alpha12 ist veröffentlicht. Version 1.0.0-alpha12 enthält diese Commits.
API-Änderungen
items(lazyPagingItems)unditemsIndexed(lazyPagingItems), die zum Verbinden der Paginierung mitLazyColumn/Rowverwendet werden, akzeptieren jetzt den Optionsschlüsselparameter, mit dem Sie einen stabilen Schlüssel für das Element angeben können. Weitere Informationen zu Schlüsseln (I7986d)- Die Funktion
lazyPagingItems.getAsState(index)wurde eingestellt. Verwenden Sie stattdessenlazyPagingItems[index]. (I086cb, b/187339372)
Version 1.0.0-alpha11
30. Juni 2021
androidx.paging:paging-compose:1.0.0-alpha11 ist 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 ist 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 ist veröffentlicht. Version 1.0.0-alpha09 enthält diese Commits.
Fehlerkorrekturen
- Die itemCount- und Item-Getter-Funktionen von LazyPagingItems sind jetzt beobachtbar, sodass sie auch mit LazyVerticalGrid verwendet werden können (Ie2446, b/171872064, b/168285687).
Compose-Kompatibilität
androidx.paging:paging-compose:1.0.0-alpha09ist nur mit Compose-Version1.0.0-beta07und höher kompatibel.
Version 1.0.0-alpha08
24. Februar 2021
androidx.paging:paging-compose:1.0.0-alpha08 ist veröffentlicht. Version 1.0.0-alpha08 enthält diese Commits.
Aktualisiert für die Integration mit Compose 1.0.0-beta01.
Version 1.0.0-alpha07
10. Februar 2021
androidx.paging:paging-compose:1.0.0-alpha07 ist veröffentlicht. Version 1.0.0-alpha07 enthält diese Commits.
Aktualisiert für die Integration mit Compose Alpha 12.
Version 1.0.0-alpha06
28. Januar 2021
androidx.paging:paging-compose:1.0.0-alpha06 ist veröffentlicht. Version 1.0.0-alpha06 enthält diese Commits.
Fehlerkorrekturen
Die Abhängigkeit wurde auf Compose 1.0.0-alpha11 aktualisiert.
Version 1.0.0-alpha05
13. Januar 2021
androidx.paging:paging-compose:1.0.0-alpha05 ist veröffentlicht. Version 1.0.0-alpha05 enthält diese Commits.
Die Abhängigkeit wurde auf Compose 1.0.0-alpha10 aktualisiert.
Version 1.0.0-alpha04
16. Dezember 2020
androidx.paging:paging-compose:1.0.0-alpha04 ist veröffentlicht. Version 1.0.0-alpha04 enthält diese Commits.
Fehlerkorrekturen
- Die Convenience-Properties
CombinedLoadStates.refresh,CombinedLoadStates.prependundCombinedLoadStates.appendwurden so aktualisiert, dass der Übergang vonLoadingzuNotLoadingerst erfolgt, wenn sowohl der Mediator- als auch der QuellladezustandNotLoadingsind. 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 ist veröffentlicht. Version 1.0.0-alpha03 enthält diese Commits.
- Aktualisiert für Compose 1.0.0-alpha08.
Version 1.0.0-alpha02
11. November 2020
androidx.paging:paging-compose:1.0.0-alpha02 ist veröffentlicht. Version 1.0.0-alpha02 enthält diese Commits.
API-Änderungen
- Die Methoden
.peek(),.snapshot(),.retry()und.refresh()wurdenLazyPagingItems hinzugefügt, um dieselbe Funktionalität wie inAsyncPagingDataDiffer/PagingDataAdapterzu ermöglichen (Iddfe8, b/172041660).
Version 1.0.0-alpha01
28. Oktober 2020
androidx.paging:paging-compose:1.0.0-alpha01 ist veröffentlicht. Version 1.0.0-alpha01 enthält diese Commits.
Neue Funktionen
Das paging-compose-Artefakt bietet eine Integration zwischen der Paging Library und Jetpack Compose. 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 ist veröffentlicht. Version 3.0.1 enthält diese Commits.
Fehlerkorrekturen
- Beim Zugriff auf
PagedList.dataSourceüber den vonLivePagedListoderRxPagedListerstellten Anfangswert wird nicht mehr fälschlicherweise eine IllegalStateException (I96707) ausgelöst.
Version 3.0.0
Version 3.0.0
5. Mai 2021
androidx.paging:paging-*:3.0.0 ist veröffentlicht. Version 3.0.0 enthält diese Commits.
Wichtige Funktionen von Version 3.0.0
Die meisten vorhandenen APIs aus Paging 2.x.x wurden zugunsten der neuen Paging 3-APIs eingestellt, um die folgenden Verbesserungen zu ermöglichen:
- Erstklassige Unterstützung für Kotlin-Coroutinen und Flow
- Support bei Stornierungen
- Integrierte Signale für Ladestatus und Fehler
- Funktion zum Wiederholen und Aktualisieren
- Alle drei DataSource-Unterklassen wurden in einer einheitlichen PagingSource-Klasse zusammengefasst.
- Benutzerdefinierte Seitentransformationen, einschließlich einer integrierten Transformation zum Hinzufügen von Trennzeichen
- Kopf- und Fußzeilen für Bundesstaaten werden geladen
Version 3.0.0-rc01
21. April 2021
androidx.paging:paging-*:3.0.0-rc01 ist veröffentlicht. Version 3.0.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Es wurde ein Problem behoben, bei dem durch die Paginierung manchmal No-Op-Differenzereignisse an RecyclerView gesendet wurden, 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 ist veröffentlicht. Version 3.0.0-beta03 enthält diese Commits.
Fehlerkorrekturen
- Wir haben die Verarbeitung von Platzhaltern beim Neuladen von Listen überarbeitet, um unerwartete Sprünge in RecyclerView zu verhindern. 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 ist veröffentlicht. Version 3.0.0-beta02 enthält diese Commits.
API-Änderungen
- Rx3-Erweiterungen geben die
@ExperimentalCoroutinesApi-Opt-in-Anforderung jetzt korrekt weiter. Bisher wurden sie in der Methode@getmarkiert, die vom Kotlin-Compiler ignoriert wird, weil: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)
Fehlerkorrekturen
- Einschränkungen für die öffentliche Nutzung experimenteller APIs erzwingen (I6aa29, b/174531520)
- Ein Fehler wurde behoben, der dazu führte, dass
PagingStateimmernullwar, wenn ein Remote-Refresh aufgerufen wurde. - Es wurde ein Fehler behoben, bei dem leere Seiten, die von PagingSource zurückgegeben wurden, verhindern konnten, dass Paging noch einmal Daten abruft, um
prefetchDistancezu erfüllen. Dadurch konnte Paging „hängen bleiben“.
Version 3.0.0-beta01
10. Februar 2021
androidx.paging:paging-*:3.0.0-beta01 ist veröffentlicht. Version 3.0.0-beta01 enthält diese Commits.
API-Änderungen
- Rx2- und Rx3-Wrappern wird jetzt die experimentelle Annotation bereitgestellt, 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)annotieren (Ib1f9d).
Fehlerkorrekturen
- Der Fehler
IndexOutOfBoundsException: Inconsistency detected, der manchmal bei der Verwendung von v2-DataSource-APIs über Kompatibilitätspfade auftrat, wurde behoben. isInvalid-Aufrufe während der Initialisierung vonDataSourcewerden bei Verwendung über Kompatibilitätspfade jetzt korrekt auf fetchDispatcher anstelle des Hauptthreads gestartet. Dadurch wird einIllegalStateExceptionbehoben, der durch den Datenbankzugriff im Hauptthread bei Verwendung derPagingSource-Implementierung von Room verursacht wurde.
Version 3.0.0-alpha13
27. Januar 2021
androidx.paging:paging-*:3.0.0-alpha13 ist veröffentlicht. Version 3.0.0-alpha13 enthält diese Commits.
API-Änderungen
PagingSource.getRefreshKeyist nicht mehr optional, sondern eine abstrakte Funktion ohne Standardimplementierung. Migrierte Nutzer können entweder weiterhin die Standardimplementierung zurückgeben, die einfachnullzurückgibt, abergetRefreshKey()sollte eine echte Implementierung haben, die einen Schlüssel basierend auf der aktuellen Scrollposition des Nutzers zurückgibt, damit Paging weiterhin um den Viewport herum überPagingState.anchorPositiongeladen werden kann, sofern dies möglich ist. (I4339a)InvalidatingPagingSourceFactoryist jetzt eine endgültige Klasse (Ia3b0a).- Konfiguration des Verhaltens von Terminaltrennzeichen (Kopf- und Fußzeile) mit einem zusätzlichen optionalen SeparatorType-Parameter zulassen. Es gibt zwei Optionen:
FULLY_COMPLETE– vorhandenes Verhalten: Warten Sie, bis sowohl PagingSource als auch RemoteMediator endOfPaginationReached markieren, bevor Sie Trennzeichen hinzufügen. Wenn RemoteMediator nicht verwendet wird, wird remote loadState ignoriert. Das ist vor allem dann nützlich, wenn Sie Abschnittstrennzeichen nur anzeigen möchten, wenn der Abschnitt vollständig geladen ist, einschließlich des Abrufs von einer Remotequelle, z.B. einem Netzwerk.SOURCE_COMPLETE: Es wird nur darauf gewartet, dass PagingSource „endOfPaginationReached“ markiert, auch wenn RemoteMediator verwendet wird. So können Kopf- und Fußzeilen synchron mit dem ersten Laden präsentiert werden. Nutzer müssen also nicht scrollen, um die Trennzeichen zu sehen. (Ibe993, b/174700218)
Fehlerkorrekturen
- Ein seltener Speicherfehler wurde behoben, der auftritt, wenn eine PagingSource ungültig gemacht wird, bevor PageFetcher mit dem Laden von Daten beginnen kann. (I9606b, b/174625633)
Version 3.0.0-alpha12
13. Januar 2021
androidx.paging:paging-*:3.0.0-alpha12 ist 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)
- Für Java-Nutzer wurde eine Überladung von .cachedIn() hinzugefügt, die ViewModel anstelle von Lifecycle oder CoroutineScope akzeptiert. (I97d81, b/175332619)
- Ermöglicht Java-Aufrufern, PagingData-Transformationsvorgänge asynchron zu verwenden, indem ein Executor in den Argumenten des Transformationsoperators akzeptiert wird. Bei allen -Sync-Transformationsoperatoren wurde das Suffix „-Sync“ entfernt. Nutzer von Kotlin Coroutines müssen die Erweiterungsfunktion aufrufen, die einen suspendierenden Block akzeptiert, um die Mehrdeutigkeit aufzuheben.
Alle PagingData-Transformationsoperatoren 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 dieselbe, aber Sie müssen die Funktion importieren. (If6885, b/172895919)
Fehlerkorrekturen
- Ein Fehler wurde behoben, bei dem
RemoteMediator.load()währendadapter.refresh()nicht aufgerufen wurde, wenn das Ende der Paginierung bereits erreicht war.
Version 3.0.0-alpha11
16. Dezember 2020
androidx.paging:paging-*:3.0.0-alpha11 ist veröffentlicht. Version 3.0.0-alpha11 enthält diese Commits.
Neue Funktionen
- Unterstützung für gespeicherten Status für die folgenden grundlegenden Anwendungsfälle hinzugefügt (die vollständige Unterstützung, insbesondere im Fall mit mehreren Quellen, ist noch in Arbeit):
- Der Flow wird im Cache gespeichert und die Anwendung wird nicht beendet (z. B. wird der Flow in einem View-Modell im Cache gespeichert und die Aktivität wird im Prozess neu erstellt).
- Die Paging-Quelle 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.invalidateist keine offene Funktion mehr. Wenn Sie benachrichtigt werden müssen, wenn eine Invalidierung 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 einzigen experimentellen Konstruktor, anstatt experimentelle APIs über die Opt-in-Annotation in die nicht experimentelle öffentliche API zu übertragen. (I9dc61, b/174531520)
- Die Convenience-Properties
CombinedLoadStates.refresh,CombinedLoadStates.prependundCombinedLoadStates.appendwurden so aktualisiert, dass der Übergang vonLoadingzuNotLoadingerst erfolgt, wenn sowohl der Mediator- als auch der QuellladezustandNotLoadingsind. So wird sichergestellt, dass das Remote-Update angewendet wurde. (I65619) LoadParams.pageSize wurde entfernt (sie war bereits als „deprecated“ gekennzeichnet). Wir empfehlen,
LoadParams.loadSizein Ihrer PagingSource zu verwenden.LoadParams.loadSizeentspricht immerPagingConfig.pageSize, mit Ausnahme des Aufrufs für das anfängliche Laden, bei dem esPagingConfig.initialLoadSizeentspricht.Wenn Sie Ihre Paging2-Datenquelle testen, ohne einen Pager oder eine PagedList zu verwenden, stimmt
pageSizemöglicherweise nicht mitPagingConfig.pageSizeüberein, wenn Sie auchinitialLoadSizefestlegen. Wenn das für Ihre Tests wichtig ist, verwenden Sie stattdessen einen Pager/eine PagedList. Dadurch wird intern die richtige PageSize für die Lademethoden Ihrer DataSource festgelegt. (I98ac7, b/149157296)
Fehlerkorrekturen
- Ein Absturz aufgrund von IllegalStateException bei Verwendung von Trennzeichen mit festgelegtem 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). - Ein Fehler wurde behoben, bei dem presenter-seitige APIs wie .snapshot(), .peek() usw. bei ListUpdateCallback-Aktualisierungen die vorherige (veraltete) Liste zurückgegeben haben.
- Ein Fehler wurde behoben, durch den mit dem RemoteMediator keine Kopf- oder Fußzeilen hinzugefügt wurden, wenn der Separators-Operator verwendet wurde.
- Ein Fehler wurde behoben, bei dem LoadState-Aktualisierungen für RemoteMediator im Status „Wird geladen“ hängen blieben.
- Ein Fehler wurde behoben, bei dem die Paging 2.0-kompatible API
.asPagingSourceFactory()dazu führen konnte, dass die zugrunde liegendeDataSourceim falschen CoroutineDispatcher initialisiert wurde. Dadurch wird ein Absturz und mögliche ANR-Fälle behoben, insbesondere bei Verwendung der aktuellen Implementierung von PagingSource in Room, die diesen Kompatibilitätspfad verwendet.
Version 3.0.0-alpha10
2. Dezember 2020
androidx.paging:paging-*:3.0.0-alpha10 ist veröffentlicht. Version 3.0.0-alpha10 enthält diese Commits.
API-Änderungen
Die veralteten APIs
dataRefreshFlowunddataRefreshListenerwurden entfernt, da sie mit loadStateFlow- und Listener-Updates redundant sind. Für Nutzer, die migrieren, ist der loadStateFlow-Äquivalent:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
Fehlerkorrekturen
- „endOfPaginationReached“ für „RemoteMediator“
REFRESHwird jetzt korrekt an „LoadState“-Updates weitergegeben und verhindert, dass „remote“APPENDundPREPENDausgelöst werden. (I94a3f, b/155290248) - Wenn eine leere Liste aufgrund einer leeren Startseite oder starker Filterung angezeigt wird, wird das Paging nicht mehr verhindert, wenn
PREPEND- oderAPPEND-Ladevorgänge gestartet werden. (I3e702, b/168169730) - Ein Problem wurde behoben, bei dem
getRefreshKeybei nachfolgenden Generationen von PagingSource nicht aufgerufen wird, wenn Invalidierungen schnell erfolgen. (I45460, b/170027530)
Externer Beitrag
- Es wurde eine neue abstrakte Klasse „InvalidatingPagingSourceFactory“ mit einer
.invalidate()-API hinzugefügt, die „invalidate“ an alle von ihr ausgegebenen „PagingSources“ weiterleitet. Vielen Dank an @claraf3! (Ie71fc, b/160716447)
Bekannte Probleme
- Kopf- und Fußzeilen aus der .insertSeparators()-Transformation werden bei Verwendung von RemoteMediator möglicherweise nicht sofort angezeigt. b/172254056
- Die Verwendung von RemoteMediator kann dazu führen, dass der Remote-
LoadStatehängen bleibt, wenn die Ungültigmachung undPagingSource.load(LoadParams.Refresh(...))abgeschlossen sind, bevorRemoteMediator.load()b/173717820 zurückgibt.
Version 3.0.0-alpha09
11. November 2020
androidx.paging:paging-*:3.0.0-alpha09 ist veröffentlicht. Version 3.0.0-alpha09 enthält diese Commits.
API-Änderungen
- dataRefreshFlow-/Listener-Methoden vollständig einstellen und durch eine replaceWith-Klausel ersetzen. (I6e2dd)
Fehlerkorrekturen
- Fehler behoben, der dazu führte, dass
IllegalArgumentExceptionausgelöst wurde, wenn Trennzeichen mit RemoteMediator verwendet wurden und eine Ungültigmachung ausgelöst wurde, während ein Remote-Ladevorgang, der „endOfPagination“ zurückgeben würde, noch ausgeführt wurde (I3a260)
Version 3.0.0-alpha08
28. Oktober 2020
androidx.paging:paging-*:3.0.0-alpha08 ist veröffentlicht. Version 3.0.0-alpha08 enthält diese Commits.
API-Änderungen
- Die Kotlin-/Java-Varianten von
DataSource.InvalidatedCallbackwurden kombiniert, indem SAM-Konvertierungen in Kotlin über das funktionale Interface aktiviert wurden (verfügbar in Kotlin 1.4). Außerdem wird ein Fehler behoben, bei dem die Kotlin-Variante von „invalidate“-Callbacks nicht aufgerufen wurde, nachdem sie von.mapoder.mapByPagetransformiert wurde. (I1f244, b/165313046)
Fehlerkorrekturen
- Die Interaktion von Paging mit ViewPager wurde erheblich verbessert. Insbesondere wird durch das Paging kein
RemoteMediator#load-Aufruf mehr aufgrund einer Seitenungültigmachung abgebrochen. Außerdem wird keine Anfrage zum Anhängen/Voranstellen von Inhalten mehr gesendet, wenn eine REFRESH-Anfrage erforderlich ist, bis die REFRESH-Anfrage erfolgreich abgeschlossen wurde. (I6390b, b/162252536) - API-Lint-Prüfung für MissingGetterMatchingBuilder ist für androidx aktiviert (I4bbea, b/138602561)
- Es wurde ein Fehler behoben, bei dem
.withLoadState*-ConcatAdapter-Helfer aufgrund der Benachrichtigung von RecyclerView über einen Hintergrundthread abgestürzt sind (I18bb5, b/170988309). - Ein Fehler wurde behoben, bei dem das Laden einer sehr kleinen, nicht leeren Seite manchmal verhinderte, dass der Prefetch-Mechanismus richtig ausgelöst wurde.Iffda3 b/169259468
Version 3.0.0-alpha07
1. Oktober 2020
androidx.paging:paging-*:3.0.0-alpha07 ist veröffentlicht. Version 3.0.0-alpha07 enthält diese Commits.
API-Änderungen
- Guava-basierte Async PagingData-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 ausgelöst wurde, wurde behoben. (I00b7f, b/165821814)
- Es wurde ein Race Condition-Problem bei der Konvertierung von DataSource in PagingSource behoben, das dazu führen konnte, dass die resultierende PagingSource Invalidierungssignale von DataSource ignoriert hat.
- Ein Problem in der Logik zum Abrufen von Seiten wurde behoben, das manchmal dazu führte, dass neue Generationen von PagingSource erst nach dem Aufrufen von PagingDataAdapter.refresh() erkannt wurden.
- Ein Problem wurde behoben, durch das die Scrollposition manchmal verloren ging, wenn eine in eine PagingSource umgewandelte DataSource (z. B. die von Room erstellte) 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 ist veröffentlicht. Version 3.0.0-alpha06 enthält diese Commits.
API-Änderungen
UnsupportedOperationExceptionmit klareren Meldungen zum Fehlen der Unterstützung für stabile IDs wird jetzt immer dann ausgelöst, wennPagingDataAdapter.setHasStableIdsaufgerufen wird. (Ib3890, b/158801427)
Fehlerkorrekturen
- Mit „insertSeparators“ werden leere Seiten nicht mehr herausgefiltert. Der Abstand für das Vorabrufen wird vom Presenter auch dann berücksichtigt, 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 ist veröffentlicht. Version 3.0.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Beim Paging werden Seiten jetzt auch dann korrekt vorab abgerufen, wenn die präsentierten Daten stark gefiltert sind.
- Wenn
LoadResult.Erroran einen wiederholten Ladevorgang zurückgegeben wird, werden Elementzugriffe nicht mehr fälschlicherweise neu ausgelöst.
Externer Beitrag
- Vielen Dank an Clara F., die uns beim Aufräumen einiger Tests geholfen hat. (549612)
Version 3.0.0-alpha04
5. August 2020
androidx.paging:paging-*:3.0.0-alpha04 ist veröffentlicht. Version 3.0.0-alpha04 enthält diese Commits.
API-Änderungen
- Die
peek()API wurdeAsyncPagingDataDifferundPagingDataAdapterhinzugefügt, um den Zugriff auf präsentierte Daten ohne Triggerseitenaufrufe zu ermöglichen. (I38898, b/159104197) - Die
snapshot()API wurdePagingDataAdapterundAsyncPagingDataDifferhinzugefügt, damit die präsentierten Elemente abgerufen werden können, ohne dass ein Seitenabruf ausgelöst wird. (I566b6, b/159104197) - Es wurde ein
PagingData.from(List<T>)-Konstruktor hinzugefügt, mit dem statische Listen präsentiert werden können. Diese können mit dem gesamten PagingData-Ablauf kombiniert werden, um statische Listen in bestimmten Status anzuzeigen, z. B. bevor der erste REFRESH abgeschlossen ist oder einfach zum Testen von Transformationen. (Id134d) - Die APIs für den dataRefresh-Flow / -Listener werden eingestellt, da sie den Status der präsentierten Elemente bei REFRESH offenlegen sollten. Durch Verbesserungen beim Timing des loadState-Flows / -Listener-Callbacks und der itemCount-Eigenschaft sind sie jedoch überflüssig (Ia19f3).
- RxJava3-Kompatibilitäts-Wrapper für
PagingSourceundRemoteMediatorwurden hinzugefügt. (I49ef3, b/161480176)
Fehlerkorrekturen
PositionalDataSourcewurde über dentoPagingSourceFactory-Helfer inPagingSourcekonvertiert. Dazu gehört auch, dass von Room generiertePagingSourcejetzt korrekt markiert werden, 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-Bedingung führte, die einen
ClosedSendChannelExceptionverursachte (I4d702, b/160192222).
Externer Beitrag
- Vielen Dank an Zac Sweers, der im Namen von Slack Wrapper für die RxJava3-Kompatibilität hinzugefügt hat. (I49ef3, b/161480176)
Version 3.0.0-alpha03
22. Juli 2020
androidx.paging:paging-*:3.0.0-alpha03 ist veröffentlicht. Version 3.0.0-alpha03 enthält diese Commits.
API-Änderungen
- Der Konstruktor für PagingState ist jetzt öffentlich, was das Testen von Implementierungen von getRefreshKey() erleichtern sollte (I8bf15).
- Die Varianten der Kotlin-Map-Funktion für DataSource wurden in Java ausgeblendet, um Unklarheiten zwischen den ursprünglichen und den Kotlin-Varianten zu beseitigen. (If7b23, b/161150011)
- Redundante APIs, die als Komfortfunktionen für Kotlin-Nutzer gedacht sind, wurden mit @JvmSynthetic gekennzeichnet (I56ae5).
- Überladungen für den Konstruktor von LoadResult.Page hinzugefügt, bei denen für „itemsBefore“ und „itemsAfter“ standardmäßig COUNT_UNDEFINED festgelegt ist (I47849)
- Vorhandene PagingData-Operatoren akzeptieren jetzt suspendierende Methoden. Außerdem wurden für Java-Nutzer die neuen nicht suspendierenden Operatoren mapSync, flatMapSync und filterSync eingeführt. Die vorhandenen Transformationsmethoden wurden in Erweiterungsfunktionen verschoben. Kotlin-Nutzer müssen sie jetzt importieren. (I34239, b/159983232)
Fehlerkorrekturen
- Bei PagingSources für Räume (und PositionalDataSource) wird jetzt ein Trennzeichen am Anfang der ersten Seite angezeigt, sodass der Nutzer nicht scrollen muss, um es zu sehen. (I6f747, b/160257628)
- Der Zugriff auf Elemente in Platzhaltern löst jetzt PagingSource-Ladevorgänge aus, bis eine Seite zurückgegeben wird, die den angeforderten Index erfüllt, nachdem sie von PagingData.filter() transformiert wurde (I95625, b/158763195).
- Ein Fehler wurde behoben, durch den das Scrollen nach der Rückgabe eines Fehlers durch PagingSource manchmal verhindert hat, dass PagingDataAdapter.retry() es noch einmal versucht. (I1084f, b/160194384)
- Ein Problem wurde behoben, bei dem Seiten nach dem Ablegen einer Seite möglicherweise nicht geladen wurden, obwohl der Elementzugriff innerhalb von „prefetchDistance“ lag (Ie95ae, b/160038730).
- Wenn Sie PagingConfig.maxSize festlegen, 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 ist veröffentlicht. Version 3.0.0-alpha02 enthält diese Commits.
API-Änderungen
- Überladungen für den Konstruktor von
PagingConfigmit gängigen Standardwerten hinzugefügt (I39c50, b/158576040) - Überladungen für Konstruktoren von
PagingDataAdapterundAsyncPagingDataDiffermit gemeinsamen Standardwerten hinzugefügt (Ie91f5) - Die Adapter-APIs
dataRefreshFlowunddataRefreshListenerübergeben jetzt einen booleschen Wert, um anzugeben, ob einPagingDataleer ist (I6e37e, b/159054196). - RxJava- und Guava-APIs für RemoteMediator hinzugefügt: RxRemoteMediator und ListenableFutureRemoteMediator
- Der PagingState wurden Hilfsfunktionen für den allgemeinen Elementzugriff wie
isEmpty()undfirstItemOrNull()hinzugefügt. (I3b5b6, b/158892717)
Fehlerkorrekturen
- Pager prüft jetzt, ob PagingSource in der Factory wiederverwendet wird, um eine versehentliche Wiederverwendung ungültiger PagingSources zu verhindern, die einen unklaren Fehler (I99809, b/158486430) verursacht haben.
- Fehler bei REFRESH von RemoteMediator verhindern nicht mehr das Laden von PagingSource (I38b1b, b/158892717)
- Die nicht suspendierende Version von
submitDataführt nicht mehr zu einem Absturz aufgrund der gleichzeitigen Erfassung auf mehrerenPagingData, wenn sie nach der suspendierenden Version vonsubmitDataaufgerufen wird. (I26358, b/158048877) - Die Ausnahme „cannot collect twice from pager“ (kann nicht zweimal aus dem Pager erfasst werden) wurde behoben, die nach einer Konfigurationsänderung auftreten konnte (I58bcc, b/158784811).
Version 3.0.0-alpha01
10. Juni 2020
androidx.paging:paging-*:3.0.0-alpha01 ist 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 das asynchrone Laden mit coroutines suspend-Funktionen, RxJava Single- oder Guava ListenableFuture-Primitiven.
- Integrierte Signale für Ladestatus und Fehler für responsives UI-Design, einschließlich Funktionen für Wiederholungsversuche und Aktualisierung.
- Verbesserungen an der Repository-Ebene
- Vereinfachte Datenquellenschnittstelle
- Vereinfachte Netzwerk- und Datenbankpaginierung
- Unterstützung bei der Kündigung
- Verbesserungen an der Präsentationsebene
Bekannte Probleme
- Die Java-Dokumentation für Paging 3 ist noch nicht verfügbar. Verwenden Sie in der Zwischenzeit die oben verlinkten Anleitungen oder die Kotlin-Dokumentation. (b/158614050)
Version 2.1.2
Version 2.1.2
18. März 2020
androidx.paging:paging:2.1.2 ist veröffentlicht. Version 2.1.2 enthält diese Commits im Vergleich zu Version 2.1.0.
Fehlerkorrekturen
- Problem mit
IndexOutOfBoundsExceptionbehoben, das in seltenen Fällen bei der Konvertierung einer Position während der Ungültigmachung aufgetreten ist.
Problem mit der Veröffentlichung
Die Paging-Version
2.1.1wurde fälschlicherweise aus einem falsch konfigurierten Branch veröffentlicht. Dadurch wurden teilweise implementierte APIs und Funktionen, die in einer zukünftigen Version verfügbar sein werden, offengelegt.Die Paging-Version
2.1.2enthält den Fix für die Lastzentrierung, der ursprünglich in Version 2.1.1 veröffentlicht wurde. Dieses Mal wurde er jedoch korrekt auf Version 2.1.0 angewendet. Wenn Sie derzeit Version 2.1.1 verwenden, wird dringend empfohlen, ein Upgrade auf diese Version durchzuführen.
Version 2.1.1
Version 2.1.1
18. Dezember 2019
androidx.paging:paging-*:2.1.1 ist veröffentlicht. Version 2.1.1 enthält diese Commits.
Fehlerkorrekturen
- Zusammenhängende anfängliche Ladevorgänge von PositionalDataSources sind jetzt auf den letzten Zugriff zentriert, wenn Platzhalter deaktiviert sind
Version 2.1.0
Version 2.1.0
25. Januar 2019
Die Seite 2.1.0 wird ohne Änderungen gegenüber 2.1.0-rc01 veröffentlicht.
Version 2.1.0-rc01
6. Dezember 2018
Die Seite 2.1.0-rc01 wird ohne Änderungen gegenüber 2.1.0-beta01 veröffentlicht.
Version 2.1.0-beta01
1. November 2018
Die Seite 2.1.0-beta01 wird ohne Änderungen gegenüber 2.1.0-alpha01 veröffentlicht.
Version 2.1.0-alpha01
12. Oktober 2018
Die Paging-Bibliothek 2.1.0-alpha01 bietet zwei wichtige Neuerungen: das Löschen von Seiten und KTX-Erweiterungsbibliotheken für jedes Artefakt. Außerdem gibt es mehrere API-Änderungen und Fehlerkorrekturen.
API-Änderungen
PagedList.Config.Builder.setMaxSize()wurde hinzugefügt, um die Anzahl der im Arbeitsspeicher geladenen Elemente zu begrenzen.androidx.paging.Config()wurde als Kotlin-Alternative fürPagedList.Config.Builderhinzugefügt.androidx.paging.PagedList()wurde als Kotlin-Alternative fürPagedList.Builderhinzugefügt.DataSourceFactory.toLiveData()wurde als Kotlin-Alternative fürLivePagedListBuilderhinzugefügt.DataSourceFactory.toObservable()undtoFlowable()als Kotlin-Alternativen fürRxPagedListBuilderhinzugefügtAsyncPagedListDiffer.addPagedListListener()wurde hinzugefügt, um zu erfassen, wenn PagedList getauscht wird. b/111698609- Die Variante
PagedListAdapter.onCurrentListChanged()wurde hinzugefügt, die sowohl die alte als auch die neue Liste besteht. Die vorherige Variante wurde eingestellt. - Es wurden
PagedListAdapter/AsyncPagedListDiffer.submitList()-Varianten hinzugefügt, die einen zusätzlichen Callback verwenden, der ausgelöst wird, wenn die PagedList nach dem Abgleich angezeigt wird. So können Sie einen PagedList-Tausch mit anderen UI-Updates synchronisieren. b/73781068 PagedList.getLoadedCount()wurde hinzugefügt, um Ihnen mitzuteilen, wie viele Elemente sich im Arbeitsspeicher befinden. Der Rückgabewert ist immer gleich.size(), wenn Platzhalter deaktiviert sind.
Fehlerkorrekturen
- Es wurde ein Race Condition-Problem beim Vergleichen behoben, wenn Listen wiederverwendet werden. b/111591017
PagedList.loadAround()löst jetztIndexOutOfBoundsExceptionaus, wenn der Index ungültig ist. Zuvor konnte die App mit einer unklaren anderen Ausnahme abstürzen.- Es wurde ein Fall behoben, in 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
Die Paginierung 2.0.0 wird mit einem einzelnen Fehlerkorrektur-Release veröffentlicht.
Fehlerkorrekturen
- Ein Absturz wurde behoben, der bei sehr schnellem Scrollen mit
PositionalDataSourceund Platzhaltern auftreten konnte b/114635383.
Version 2.0.0-beta01
2. Juli 2018
Fehlerkorrekturen
- Das Problem, dass Inhalte in einigen Fällen mit Prepend-Anweisungen verschwanden (Platzhalter deaktiviert, PositionalDataSource), wurde behoben. b/80149146
- (Bereits in
1.0.1veröffentlicht) Abstürze wurden behoben, bei denenPagedListAdapterundAsyncPagedListDifferkeine Bewegungsereignisse signalisiert haben. b/110711937
Abhängigkeiten vor AndroidX
Für die Pre-AndroidX-Versionen von Paging, die folgen, müssen Sie diese Abhängigkeiten einfügen:
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 Paginierung 1.0.1 wird mit einem einzelnen Fehlerkorrektur in runtime veröffentlicht. Wir empfehlen dringend, 1.0.1 zu verwenden, da es stabiler ist. Paging RxJava2 1.0.1 wurde ebenfalls veröffentlicht und ist mit 1.0.0-rc1 identisch.
Fehlerkorrekturen
- Abstürze wurden behoben, bei denen
PagedListAdapterundAsyncPagedListDifferkeine Bewegungsereignisse signalisiert haben. b/110711937
RxJava2 Version 1.0.0
RxJava2 Version 1.0.0-rc1
16. Mai 2018
Paging RxJava2 1.0.0-rc1 wird zum Releasekandidaten und es gibt keine Änderungen gegenüber der ursprünglichen Alphaversion.
Version 1.0.0
Version 1.0.0-rc1
19. April 2018 Releasekandidat für Paging
Für die Veröffentlichung der Paginierung 1.0.0 sind keine weiteren bekannten Probleme oder neuen Funktionen geplant. Bitte aktualisieren Sie Ihre Projekte, damit sie 1.0.0-rc1 verwenden, und helfen Sie uns, die Bibliothek zu testen, damit wir eine solide 1.0.0 veröffentlichen können.
In diesem Release gibt es keine Änderungen. Es ist identisch mit 1.0.0-beta1.
Version 1.0.0-beta1
5. April 2018
Die Paging-Funktion befindet sich für kurze Zeit in der Betaphase, bevor sie zum Release-Kandidaten wird.
Wir planen keine weiteren API-Änderungen für Paging 1.0. Die Hürde für API-Änderungen ist sehr hoch.
Die Alpha-Unterstützung für RxJava2 für Paging wird als separates optionales Modul (android.arch.paging:rxjava2:1.0.0-alpha1) veröffentlicht und vorübergehend separat versioniert, bis sie stabil ist.
Diese neue Bibliothek bietet eine RxJava2-Alternative zu LivePagedListBuilder, mit der Observables und Flowables erstellt werden können. Dabei werden Schedulers anstelle von Executors verwendet:
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
RxPagedListBuilderwird über das neueandroid.arch.paging:rxjava2-Artefakt hinzugefügt.
API-Änderungen
API-Änderungen zur Verdeutlichung der Rolle von Executors in Buildern:
setBackgroundThreadExecutor()wurde insetFetchExecutor()umbenannt (inPagedList.BuilderundLivePagedListBuilder)setMainThreadExecutor()wurde insetNotifyExecutor()umbenannt (inPagedList.Builder).
Das
PagedList.mCallbacks-Mitglied wurde als privat festgelegt.
Fehlerkorrekturen
LivePagedListBuilderlöst das erste Laden vonPagedListim angegebenen Executor aus, anstatt im Arch Components IO-Threadpool.Das Verhalten von „invalidate“ in internen
DataSource-Wrappern wurde korrigiert (diese werden verwendet, umDataSource.mapsowie das Laden vonPositionalDataSourceohne Platzhalter zu implementieren). b/77237534
Version 1.0.0-alpha7
21. März 2018
Paging 1.0.0-alpha7 wird zusammen mit Lifecycles 1.1.1 veröffentlicht. Da Paging alpha7 von der oben erwähnten Verschiebung der Klasse Function abhängt, müssen Sie die lifecycle:runtime-Abhängigkeit auf android.arch.lifecycle:runtime:1.1.1 aktualisieren.
Die Version alpha7 ist die letzte Version, bevor die Paging-Funktion in die Betaphase geht.
API-Änderungen
DataSource.LoadParams-Objekte haben jetzt einen öffentlichen Konstruktor undDataSource.LoadCallback-Objekte sind jetzt abstrakt. So kann einDataSourceumschlossen oder einDataSourcedirekt mit einem Mock-Callback getestet werden. b/72600421- Mappers für DataSource und DataSource.Factory
- Mit
map(Function<IN,OUT>)können Sie Ergebnisse, die von einemDataSourcegeladen wurden, transformieren, umschließen oder dekorieren. mapByPage(<List<IN>,List<OUT>>)ermöglicht dasselbe für die Batchverarbeitung (z.B. wenn für Elemente, die aus SQL geladen werden, zusätzlich eine separate Datenbank abgefragt werden muss, kann dies als Batch erfolgen).
- Mit
PagedList#getDataSource()wurde als praktische Methode hinzugefügt. b/72611341- Alle eingestellten Klassen wurden aus der API entfernt, einschließlich der Überreste des Pakets
recyclerview.extensionsund derLivePagedListProvider. DataSource.Factorywurde von einer Schnittstelle in eine abstrakte Klasse geändert, um Kartenfunktionen zu ermöglichen.
Fehlerkorrekturen
- Die Builder-Klasse wurde als „final“ deklariert. b/70848565
- Die Implementierung von Room
DataSourcewurde korrigiert, um Anfragen mit mehreren Tabellen zu verarbeiten. Diese Korrektur ist in Room 1.1.0-beta1 enthalten (siehe oben). - Ein Fehler wurde behoben, bei dem
BoundaryCallback.onItemAtEndLoadedfürPositionalDataSourcenicht 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
- Probleme beim Laden von Seiten beheben, wenn Platzhalter deaktiviert sind b/70573345
- Zusätzliches Logging zur Behebung des IllegalArgumentException-Fehlers b/70360195 (und spekulative Korrektur auf Room-Seite)
- Korrekturen für Javadoc-Beispielcode b/70411933, b/71467637