Paging
In dieser Tabelle sind alle Artefakte in der Gruppe androidx.paging aufgeführt.
| Artefakt | Stabile Release | Releasekandidat | Beta-Release | Alpha-Release |
|---|---|---|---|---|
| paging-* | 3.5.3 | - | - | - |
| paging-compose | 3.5.3 | - | - | - |
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 Google-Repository bei Maven.
Fügen Sie die Abhängigkeiten für die benötigten Artefakte der Datei build.gradle für Ihre App oder Ihr Modul hinzu:
Groovy
dependencies { def paging_version = "3.5.3" 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.5.3" }
Kotlin
dependencies { val paging_version = "3.5.3" 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.5.3") }
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 den Button mit dem Stern.
Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.
Version 3.5
Version 3.5.3
12. Oktober 2026
androidx.paging:paging-*:3.5.3 ist veröffentlicht. Version 3.5.3 enthält diese Commits.
Diverse Fehlerkorrekturen
ItemSnapshotListFlowlöst nicht mehrIllegalArgumentExceptionaus, wenn einRemoteMediatordas Ende der Paginierung in einer der beiden Richtungen erreicht hat und ein Header oder Footer in ein Terminal-Trennzeichen umgewandelt wird. (I821c7, b/566336825)- Wenn die Anzahl der geladenen Seiten
PagingConfig.maxSizeüberschreitet, wird sie nicht auf unter zwei Seiten reduziert, damit der Darstellungsbereich richtig mit Daten gefüllt wird. (I037a0, b/565835910)
Externer Beitrag
Vielen Dank an Igor für die Einreichung der Fehlerkorrektur b/565835910
Version 3.5.2
7. Oktober 2026
androidx.paging:paging-*:3.5.2 ist veröffentlicht. Version 3.5.2 enthält diese Commits.
Diverse Fehlerkorrekturen
- Bei
Pager.append()-Aufrufen, die vor dem Abschluss der ersten Aktualisierung erfolgen, wird nicht mehr der FehlerNoSuchElementExceptionausgegeben. Der Aufruf zum Anhängen wird nicht ausgeführt. (Ide387, b/556780796)
Version 3.5.1
12. August 2026
androidx.paging:paging-*:3.5.1 ist veröffentlicht. Version 3.5.1 enthält diese Commits.
Diverse Fehlerkorrekturen
- Es wurde ein Fehler behoben, durch den
PagingSource.getRefreshKeyeinen falschenanchorPosition-Wert bereitgestellt hat, der zu groß war, wenn eine Seite mit Trennzeichen aktualisiert wurde, während in Platzhalter gescrollt wurde. (I475f0, b/516565503)
Version 3.5.0
6. Mai 2026
androidx.paging:paging-*:3.5.0 ist veröffentlicht. Version 3.5.0 enthält diese Commits.
Wichtige Änderungen seit Version 3.4.0:
Operator
Flow<PagingData>.asItemSnapshotListFlowhinzugefügt, umFlow<PagingData>inFlow<ItemSnapshotList>zu konvertieren. Das bedeutet, dass auf geladene Daten jetzt außerhalb der UI-Ebene zugegriffen werden kann. So können SieFlow<ItemSnapshotList>mit anderen Datenquellen kombinieren, ausgelagerte Daten lokal zwischenspeichern und ändern oder ausgelagerte Daten als Teil eines UI-Zustands verfügbar machen.Die Erweiterungsfunktionen
Pager.appendundPager.prependwurden hinzugefügt, um manuell weitere Daten zu laden, ohne scrollen zu müssen.Die Erweiterungsfunktionen
Pager.refreshundPaging.retrywurden hinzugefügt, um Ladefehler bei Verwendung derasItemSnapshotListFlowAPI zu beheben.
Version 3.5.0-rc01
22. April 2026
androidx.paging:paging-*:3.5.0-rc01 ist veröffentlicht. Version 3.5.0-rc01 enthält diese Commits.
Keine Änderungen
- Im Vergleich zu Version
3.5.0-beta01gibt es keine nennenswerten Änderungen.
Version 3.5.0-beta01
8. April 2026
androidx.paging:paging-*:3.5.0-beta01 ist veröffentlicht. Version 3.5.0-beta01 enthält diese Commits.
API-Änderungen
- Die
Flow<PagingData>.asStateAPI wurde inFlow<PagingData>.asItemSnapshotListFlowumbenannt. (I0dc11, b/496548025)
Version 3.5.0-alpha01
11. März 2026
androidx.paging:paging-*:3.5.0-alpha01 ist veröffentlicht. Version 3.5.0-alpha01 enthält diese Commits.
Neue Funktionen
Das
paging-common-Artefakt enthält jetzt den neuenasState-Flow-Operator fürFlow<PagingData>, um es in einFlow<ItemSnapshotList>zu konvertieren. Dadurch werden Funktionen wie die folgenden freigeschaltet:- „Flow of
ItemSnapshotList“ mit anderen Datenquellen kombinieren - Flow mit mehreren Erfassern ohne
cachedInteilen - Ausgelagerte Daten lokal im Cache speichern
- Ausgelagerte Daten im Arbeitsspeicher ändern
- Seitenweise Daten als Teil eines UI-Status verfügbar machen
// In your ViewModel val pager = Pager(pagingConfig, pagingSourceFactory) val pagerFlow = pager.flow.asState() // alterantively convert the flow to a SharedFlow val pagerFlow = pager.flow.asState().stateIn() // In presenter layer val snapshotFlow = viewModel.pagerFlow.collectAsStateWithLifecycle(initialList) val snapshot = itemsFlow.value LazyColumn { items(items = snapshot.items) { ... } }- „Flow of
Das
paging-common-Artefakt hat außerdem die APIsPager.appendundPager.prependhinzugefügt, um Ladevorgänge an beiden Enden der geladenen Elemente manuell auszulösen.- In Kombination mit
paging-runtimeoderpaging-composebietet dies eine Alternative zum Laden weiterer Daten, ohne scrollen zu müssen. - In Kombination mit der neuen
asStateAPI ist dies die einzige Möglichkeit, mehr Daten zu laden.
LazyColumn { item { /** * Load more items when users scroll near the top of loaded items. */ LaunchedEffect(viewModel) { viewModel.prepend() } } items(snapshot.items) { item -> Text("Item: $item") } item { /** * Load more items when users scroll near the bottom of loaded items. */ LaunchedEffect(viewModel) { viewModel.append() } } }- In Kombination mit
Pager.refreshundPager.retrywurden hinzugefügt, um Ladefehler bei Verwendung derasStateAPI zu beheben. In diesem Dokument finden Sie weitere Beispiele für die Verwendung der neuen APIs. (I1e1e9, If3c87, Idbd48, Id1e1d, I816fe)
Version 3.4
Version 3.4.2
11. März 2026
androidx.paging:paging-*:3.4.2 ist veröffentlicht. Version 3.4.2 enthält diese Commits.
Keine Änderungen
- In dieser Version gibt es keine API- oder Verhaltensänderungen gegenüber Version 3.4.1.
Version 3.4.1
11. Februar 2026
androidx.paging:paging-*:3.4.1 ist veröffentlicht. Version 3.4.1 enthält diese Commits.
Abhängigkeitsupdate
- Die Guava-Abhängigkeit von paging-guava wurde von Version 31.1 auf 32.0.1 aktualisiert.
Version 3.4.0
28. Januar 2026
androidx.paging:paging-*:3.4.0 ist veröffentlicht. Version 3.4.0 enthält diese Commits.
Wichtige Änderungen seit 3.3.0:
paging-common,paging-testingundpaging-composewurden weitere KMP-Ziele hinzugefügt. Insgesamt werden jetzt JVM(Android und Desktop), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) und Web (JavaScript, WasmJS) unterstützt.paging-common,paging-testingundpaging-composeunterstützenmacosX64,iosX64,watchosX64undtvosX64nicht mehr, da Jetbrains die macosX64-Ziele eingestellt hat.- Es wurde eine neue
PagingStateAPIclosestItemAroundPositionhinzugefügt, um das geladene Element abzurufen, das der Zielposition am nächsten ist und dem Eingabeprädikat entspricht. Damit können elementbasierte Aktualisierungsschlüssel generiert werden, wenn das ideale verankerbare Element in der Nähe, aber nicht an der genauen Zielposition ist.
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 entspricht 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.
Diverse Fehlerkorrekturen
- Race-Condition zwischen
RecyclerView- undRefresh-Ladevorgängen behoben, die zuIndexOutOfBoundsExceptioninRecyclerViewgeführt hat. Unterbrochene UI-Aktualisierungen aufgrund von kontinuierlichenRefresh-Ladevorgängen können dazu führen, dass der Paging-Status nicht mehr mitRecyclerViewsynchronisiert ist. Dies wird behoben, indem das Paging 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 können elementbasierte Aktualisierungsschlüssel generiert werden, wenn das ideale verankerbare Element in der Nähe, aber nicht genau an der Zielposition ist. (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
- In „paging-common“ wurde „Desktop“ als neues Kotlin Multiplatform-Ziel (KMP) 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)
- In „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 auf 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
- Mit
PagingData.fromkönnen jetztplaceholdersBeforeundplaceholdersAfterfestgelegt werden. Beim Scrollen durch diese Platzhalter werden keine Anzeigen 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
- Android-Unittests, die Paging 3.3 oder höher verwenden, lösen keine Fehler mehr von
PagingLoggeraus (Ia9400, b/331684448) - Fehler behoben, bei dem
RecyclerViewIndexOutOfBoundsExceptionauslöst, wenn der Nutzer beim Aktualisieren vonRecyclerViewscrollt (Id1f16, b/381024738) - Ein Fehler wurde behoben, durch den beim Aktualisieren während des Scrollens keine weiteren Seiten geladen 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.
Diverse Fehlerkorrekturen
- Signale zum Aktualisieren und Wiederholen, 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
- Es wurde ein Fehler behoben, bei dem
RecyclerViewbeim Scrollen durch den Nutzer während der Aktualisierung vonRecyclerViewden FehlerIndexOutOfBoundsExceptionauslöste. (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.
Diverse Fehlerkorrekturen
- Bei Android-Unittests, 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.
Diverse Fehlerkorrekturen
- Ein Problem wurde behoben, durch das 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 wurde behoben, der auftritt, wenn Elemente aus der zugrunde liegenden Datenquelle entfernt werden, während mit einem
PagingDataAdapteroderAsyncPagingDataDifferin einemRecyclerViewgescrollt wird. (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 aufPagingDataPresenterbasieren, anstatt interne Paging APIs oderAsyncPagingDataDiffervonpaging-runtimezu erfordern.- In
hasErrorundisIdlewurden die neuen HilfsmethodenLoadStatesundCombinedLoadStateshinzugefügt, um zu prüfen, obLoadStatesden Status „Error“ oder „NotLoading“ hat. Außerdem wurde eine neueawaitNotLoading()-Kotlin-Erweiterungsmethode fürFlow<CombinedLoadStates>hinzugefügt, die wartet, bis ein Ladevorgang entweder den StatusNotLoadingoder den Fehlerstatus erreicht hat. PagingData.empty()sendet jetzt standardmäßigNotLoading-Zustände, sofern keine benutzerdefiniertenLoadStatesan den Konstruktor übergeben werden. Das unterscheidet sich vom bisherigen Verhalten, bei demLoadStatesnicht gesendet wird, wenn es an einPagingDataAdaptergesendet wird, oder Ladestatus gesendet werden, wenn es alsLazyPagingItemserfasst wird. Wenn sie alsLazyPagingItemserfasst wird, wird jetzt auch sofort nach der ersten Erstellung eine leere Liste angezeigt.
Kompatibilität mit Kotlin Multiplatform
Paging bietet jetzt Artefakte, die mit Kotlin Multiplatform kompatibel sind. Das ist vor allem der Arbeit am multiplatform-paging-Projekt von CashApp zu verdanken.
paging-commonhat alle Paging 3-APIs zucommonverschoben und ist jetzt zusätzlich zu Android auch mit JVM und iOS kompatibel.paging-testinghat seinen Code nachcommonverschoben und ist jetzt neben Android auch mit JVM und iOS kompatibel.paging-composehat seinen Code nachcommonverschoben und liefert ein Android-Artefakt, das der Multiplattform-Unterstü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
- Paging verwendet jetzt die AndroidX-Annotation
@MainThreadfür gemeinsamen Code. (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.
Diverse Fehlerkorrekturen
- Kleinere Dokumentationsfehler im Zusammenhang mit der Kompatibilität mit Kotlin Multiplatform wurden 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-Presenter können jetzt aufPagingDataPresenterbasieren, anstatt interne Paging APIs oderAsyncPagingDataDiffervonpaging-runtimezu erfordern. (Id1f74, b/315214786)- Es wurden neue Hilfsmethoden
LoadStatesundCombinedLoadStateshinzugefügt, um zu prüfen, ob sichLoadStatesim Status „Error“ (Fehler) oderNotLoadingbefindet. Außerdem wurde eine neue API hinzugefügt, die auf einenLoadStateFlowwartet, bis ein Ladevorgang entweder den StatusNotLoadingoder den Fehlerstatus erreicht hat. (Id6c67)
Verhaltensänderung
PagingData.empty()sendet jetzt standardmäßigNotLoading-Zustände, sofern keine benutzerdefiniertenLoadStatesan den Konstruktor übergeben werden. Dies weicht vom bisherigen Verhalten ab, bei demLoadStatesnicht gesendet wird, wenn es an einPagingDataAdaptergesendet wird, oder bei dem Ladestatus gesendet werden, wenn es alsLazyPagingItemserfasst wird. 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 liefert jetzt Artefakte, die mit Kotlin Multiplatform kompatibel sind. Das ist vor allem der Upstream-Arbeit des multiplatform-paging-Projekts von CashApp zu verdanken. So können wir Abweichungen zwischen zwei Repositories vermeiden und sie kompatibel halten.
paging-commonhat alle Paging 3 APIs nachcommonverschoben und ist jetzt neben Android auch mit JVM und iOS kompatibel.paging-testinghat seinen Code nachcommonverschoben und ist jetzt neben Android auch mit JVM und iOS kompatibel.paging-composehat seinen Code nachcommonverschoben und liefert ein Android-Artefakt, das der Multiplattform-Unterstü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 Umstellung von Paging 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. 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). Dieser Workaround funktioniert nur für abschließbare Flows (z.B.flowOf(PagingData.from(...))). Verwenden Sie für nicht abschließbare Flows (z.B.MutableStateFlow) diePagingData.from-Überladung, dieLoadStatesbereitstellt. (I502c3) - Paging Compose verwendet jetzt intern
AndroidUiDispatcher.Main, damit neue Daten im selben Frame verfügbar sind, in dem das Laden abgeschlossen wird. (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 die 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 mit gefälschten Daten durch Erstellen eines
PagingData.from(fakeData)und Umschließen diesesPagingDatain einemMutableStateFlow(z.B.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Übergeben Sie diesen Ablauf als Empfänger fürcollectAsLazyPagingItems()an@Preview-Composables, 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 neueLazyPagingItems-Erweiterungsmethoden auf niedrigerer EbeneitemKeyunditemContentTypeerreicht. 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 mit gefälschten Daten durch Erstellen eines
- Neues
paging-testing-Artefakt mit APIs, die für Unittests der einzelnen Ebenen Ihrer App und ihrer Integration mit Paging in Isolation 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, um entweder einenFlow<List<Value>>oder einen statischenList<Value>in einenPagingSourceFactoryumzuwandeln, der in Tests an einen Pager übergeben werden kann asSnapshotKotlin-Erweiterung fürFlow<PagingData<Value>>, dieFlow<PagingData<Value>>in eine direkteList<Value>übersetzt. Mit demasSnapshot lambdakönnen Sie die Benutzeroberfläche Ihrer App über APIs wiescrollTooderappendScrollWhilenachahmen, um zu prüfen, ob der Snapshot der Daten an einem beliebigen Punkt in Ihren paginierten Daten korrekt ist.
- 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 das Paging mit Ansichten als auch für das Paging mit Compose. - 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 den Beitrag, Paging von Android-/JVM-Spezifika zu entfernen. (#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. Daher wurde die Version von
1.0.0-alpha20aktualisiert, um der Version aller anderen Paging-Artefakte zu entsprechen.
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) - Die neue API
paging-testingvonList<Value>.asPagingSourceFactory()wurde 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>in „paging-testing“ wurde zu TypPagingSourceFactory<Key, Value>migriert. (I4a950, b/280655188)
Geändertes Verhalten
- Der Haupt-Dispatcher ist nicht mehr erforderlich, um
asSnapshot-Paging-Tests auszuführen. Das Festlegen dieser Einstellung hat keine Auswirkungen mehr auf das Testverhalten. (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 ein leeres Lambda 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, damit das Springen unterstützt wird. (Ied354)
Externe Beiträge
- Vielen Dank an Veyndan für die Unterstützung bei der Umstellung von Paging auf Android-/JVM-Spezifikationen. (#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 Artefakt
paging-testingenthält jetzt die MethodeasPagingSourceFactory, mit der einpagingSourceFactoryaus einemFlow<List<Value>>erstellt werden kann, das einem Pager zur Verfügung gestellt wird. Jeder vom Flow ausgegebeneList<Value>>stellt eine Generierung von paginierten Daten dar. Dies erleichtert das Testen von Seitenwechseln, z. B. beiPagingData-Transformationen, indem eine Datenquelle für den Pager simuliert wird, aus der er Daten abrufen kann. (I6f230, b/235528239) Das Artefakt
paging-testingwurde um neue APIs erweitert, mit denen sich die in einemFlow<PagingData<T>>enthaltenen Daten überprüfen lassen. Damit kann beispielsweise die Ausgabe einesFlow<PagingData<T>>aus der ViewModel-Ebene bestätigt werden.Dies erfolgt über die Kotlin-Erweiterung
asSnapshotfürFlow<PagingData<Value>>, dieFlow<PagingData<Value>>in ein direktesList<Value>übersetzt. Mit dem Lambda-AusdruckasSnapshotkönnen Sie die Benutzeroberfläche Ihrer App über APIs wiescrollTooderappendScrollWhilewiederholbar und konsistent nachbilden, um zu prüfen, ob der Snapshot der Daten an einem beliebigen Punkt in Ihren paginierten 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 valuesasSnapshotist einesuspend-Methode, die innerhalb vonrunTestausgeführt werden soll. Weitere Informationen finden Sie unter Kotlin-Koroutinen unter Android testen. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)
API-Änderungen
- UI-Aufrufe von
getItemundpeekinAsyncPagingDataDifferundPagingDataAdaptersind jetzt korrekt als nur im Hauptthread aufrufbar gekennzeichnet. (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 Programmiersprache Java 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 Unittests der einzelnen Ebenen Ihrer App und ihrer Integration in Paging 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 eines PagingSource bietet. Diese APIs sind suspend-APIs und sollten innerhalb von runTest ausgeführt werden, wie im Leitfaden zum Testen von Kotlin-Koroutinen auf Android-Geräten beschrieben.
Ein Beispiel für die Verwendung dieser APIs finden Sie in den room-paging-Tests, die für die Verwendung von TestPager refaktoriert wurden.
API-Änderungen
- Ermöglicht die bequeme Iteration über
LoadResult.Page.databisLoadResult.Page.iterator(). Dadurch wird indirekt die Verwendung der Methodeflattender Kotlin-Standardbibliothek ermöglicht, wenn einList<LoadResult.Page>angegeben wird, z. B. mit dem AttributpagesvonPagingState, das an die MethodePagingSource.getRefreshKeyü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
- Paging stellt jetzt Logs über die Klassen
AsyncPagingDataDifferoderPagingDataAdapterbereit, um Debugging-Informationen ausPagingDataoffenzulegen. - Die Logs können mit dem
adb shell-Befehladb shell setprop log.tag.Paging [DEBUG|VERBOSE].aktiviert werden(b/235527159).
Diverse Fehlerkorrekturen
- Der Fehler, dass der
PagingDataDiffer-Konstruktor fehlt, wennpaging-common:3.2.0-alpha01mit der Laufzeitpaging-runtime:3.1.1oder älter verwendet wird, 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 Vortragenden 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)) und können bei Bedarf auch Remote-Zustände einbeziehen. WennLoadStatesnicht übergeben wird, wird der vorherigeCombinedLoadStatesauf der Seite des Presenters beibehalten, wenn er die statischePagingDataempfängt. (Ic3ce5, b/205344028)
Diverse 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.
Diverse Fehlerkorrekturen
- Zwischen Generationen wurden Zwischenereignisse vom Typ
LoadState.NotLoadingentfernt, die fälschlicherweise von.cachedIn()eingefügt wurden. Durch diese Änderung ist es viel einfacher, aufLoadState-Änderungen zu reagieren, da redundanteLoadState.NotLoading-Ereignisse entfernt werden, die zwischen fehlgeschlagenen Ladevorgängen, beim Aktualisieren oder während der Entwertung 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ür sowohlPagingSourceals auchRemoteMediatorLoadStatesaus Paging wartet jetzt auf gültige Werte vonPagingSourceundRemoteMediator, bevor sie nachgelagert ausgegeben werden. Neue Generationen vonPagingDatabeginnen jetzt immer korrekt mitLoadingfür den Aktualisierungsstatus, anstatt in einigen Fällen fälschlicherweise aufNotLoadingzurückgesetzt zu werden..loadStateFlowund.addLoadStateListenerin Vortragenden-APIs senden nicht mehr redundant eine anfänglicheCombinedLoadStates, bei der die Mediator-Status immer aufnullgesetzt sind.
- Die Stornierung früherer 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 werden alle ausstehenden oder zukünftigen Ladeanfragen an diesePagingSourceverworfen und ungültig gemacht. 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 Presenter-APIs
.onPagesPresentedund.addOnPagesUpdatedListenerwurden hinzugefügt. Sie werden synchron ausgelöst, wenn Seiten in der Benutzeroberfläche angezeigt 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 dieselbe ist, wird dieser Callback ausgelöst.
- Eine Seite wird 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 ist veröffentlicht. Version 3.1.0-rc01 enthält diese Commits.
Diverse Fehlerkorrekturen
- Es wurde eine Race-Bedingung und ein Speicherleck in .cachedIn() behoben, die auftraten, wenn mehrere Ladeereignisse von Paging nachgelagert gesendet wurden, während keine Beobachter vorhanden waren oder ein Beobachter zu neuen PagingData wechselte. (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 Zugriffe auf Elemente dazu führen konnten, dass sie für die Vorabrufdistanz nicht berücksichtigt wurden, was zu Verzögerungen beim Seitenaufbau führte. Das ist besonders problematisch, wenn viele Elemente gleichzeitig in einer Reihenfolge angeordnet werden, bei der das Laden entgegen der Scrollrichtung des Nutzers priorisiert wird. Diese Artikelzugriffe 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 RemoteMediatorREFRESHden Werttruehaben, aber nicht für PagingSource. 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. Wenn Sie entscheiden, ob die Paginierung beendet wird, sollten Sie dies immer in Bezug auf die Richtungen APPEND oder PREPEND tun. (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 der Status bereits „Loading“ 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.
Die Stornierung früherer Generationen erfolgt jetzt sofort bei Ungültigkeit/neuen Generationen. Es sollte nicht mehr erforderlich sein, .collectLatest für
Flow<PagingData>zu verwenden, obwohl dies weiterhin dringend empfohlen wird. (I0b2b5, b/177351336, b/195028524)Bei
.loadStateFlow- und.addLoadStateListener-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 ein neuer loadState-Listener oder ein neuer Collector für
.loadStateFlowregistriert wird, wird der aktuelle Wert nicht mehr sofort ausgegeben, wenn kein echterCombinedLoadStatesvonPagingDataempfangen wurde. Das kann passieren, wenn ein Collector oder Listener gestartet wird, bevor einPagingDatagesendet 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
Ein dritter LoadResult-Rückgabetyp „LoadResult.Invalid“ wird zu PagingSource hinzugefügt. Wenn „PagingSource.load“ den Wert „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 vorgesehen, 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 sie inkonsistente Ergebnisse zurückgeben, wenn ihre Implementierung von der Unveränderlichkeit des zugrunde liegenden Datasets abhängt, aus dem sie lädt (z.B. Datenbankimplementierungen im LIMIT OFFSET-Stil). In diesem Szenario wird empfohlen, 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 nutzt. 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, gestoppt und die PagingSource wird ungültig.
LoadResult ist eine versiegelte Klasse. Das bedeutet, dass es sich um eine quellinkompatible Änderung handelt, sodass Anwendungsfälle, die PagingSource.load-Ergebnisse direkt verwenden, LoadResult.Invalid zur Kompilierungszeit verarbeiten müssen. Kotlin-Nutzer, die „exhaustive-when“ verwenden, um den Rückgabetyp zu prüfen, müssen beispielsweise eine Prüfung auf den Typ „Invalid“ hinzufügen. (Id6bd3, b/191806126, b/192013267)
Diverse Fehlerkorrekturen
- Ungültigkeits-Callbacks, die über PagingSource.registerInvalidatedCallback oder DataSource.addInvalidatedCallback hinzugefügt wurden, 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 angegeben wurde, die bereits beim ersten Laden ungültig war. Außerdem werden ungültige Callbacks jetzt ordnungsgemäß entfernt, nachdem sie ausgelöst wurden, da sie garantiert höchstens einmal aufgerufen werden. (I27e69)
- Wenn Sie den Platzhalter-Anfangswert (InitialPagedList) aus einem neu instanziierten PagedList-Stream, z.B. LivePagedListBuilder oder RxPagedListBuilder, senden, 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 onPagesPresented-Listener- und FlowPresenter-APIs wurden hinzugefügt. Sie werden sofort ausgelöst, nachdem die angezeigten 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 jeder Aktualisierung sehr aufwendig sein kann.
Seitenaktualisierungen können in den folgenden Fällen erfolgen:
- Das erste Laden einer neuen Generation von PagingData ist abgeschlossen, unabhängig davon, ob die neue Generation Änderungen an den dargestellten Elementen enthält. Das heißt: Eine neue Generation, die den anfänglichen Ladevorgang ohne Aktualisierungen abschließt, weil die Liste genau gleich ist, löst diesen Callback trotzdem aus.
- 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).
Diverse Fehlerkorrekturen
- Beim Zugriff auf „PagedList.dataSource“ über den von „LivePagedList“ oder „RxPagedList“ erzeugten Anfangswert wird nicht mehr fälschlicherweise eine „IllegalStateException“ ausgelöst (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-rxjava2in Konflikt geraten (Ifa7f6).
Fehlerkorrekturen
- Es wurde ein Problem behoben, bei dem Paging manchmal No-Op-Differ-Ereignisse an RecyclerView gesendet hat, was dazu führen konnte, dass bestimmte Listener vorzeitig ausgelöst wurden. (Ic507f, b/182510751)
Externer Beitrag
- Dem rxjava3-Artefakt wurden verworfene PagedList-Kompatibilitäts-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 ein
PagingData.from(fakeData)und umschließen esPagingDatamit einemMutableStateFlow(z. B.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Wenn Sie diese Daten als Eingabe für Ihr@Previewverwenden, werden durch Aufrufe voncollectAsLazyPagingItems()Vorschau-fähigeLazyPagingItemsbereitgestellt. (I8a78d, b/194544557)
Diverse Fehlerkorrekturen
- Im Cache gespeicherte Daten aus
pager.flow.cachedIn, die inLazyPagingItemserfasst wurden, sind jetzt sofort nach der Statuswiederherstellung verfügbar, ohne dass eine asynchrone Erfassung erforderlich ist. Das bedeutet, dass die im Cache gespeicherten Daten sofort nach der ersten Erstellung nach der Wiederherstellung des Status für die Präsentation 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 für alle Lazy-Layouts
Bisher stellte Paging Compose benutzerdefinierte items- und itemsIndexed-Erweiterungen für LazyListScope bereit. 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 Behebung dieser Inflexibilität ist das Hauptziel 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 sollen Ihnen helfen, die Parameter key und contentType in den Standard-items-APIs zu implementieren, die bereits für LazyColumn und LazyVerticalGrid vorhanden sind, sowie in den entsprechenden APIs wie HorizontalPager. (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 werden die vorhandenen Erweiterungen für LazyListScope nicht mehr unterstützt. (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
- Paging Compose hat seine Abhängigkeit 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 einen benutzerdefinierten
CoroutineContextbeim Anrufen 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 bietet jetzt Logs über die Klasse
LazyPagingItems, um Debugging-Informationen aus PagingData verfügbar zu machen. - Die Logs können über den
adb shell-Befehladb shell setprop log.tag.Paging [DEBUG|VERBOSE]aktiviert werden. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
Fehlerkorrekturen
- Der Fehler „
PagingDataDiffer-Konstruktor fehlt“ bei 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
- Konstruktoren für
PagingDataAdapterundAsyncPagingDataDifferhinzugefügt, dieCoroutineContextanstelle vonCoroutineDispatcherakzeptieren. (Idc878)
Diverse Fehlerkorrekturen
LazyPagingItemslegt jetzt für die ersteloadStateeine Aktualisierung vonLoadState.Loadingfest. (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 die PropertyLazyPagingItems.itemSnapshotListersetzt (Ie2da8). - Das 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 von Paging mitLazyColumn/Rowverwendet werden, akzeptieren jetzt den Parameter „option key“, 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)wird nicht mehr unterstützt. 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.
Diverse Fehlerkorrekturen
- „itemCount“ und der Item-Getter 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, um die Integration mit Compose 1.0.0-beta01 zu ermöglichen.
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, um die Integration mit Compose alpha12 zu ermöglichen.
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
Aktualisiert, um von Compose 1.0.0-alpha11 abhängig zu sein.
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.
Abhängigkeit von Compose 1.0.0-alpha10 hinzugefügt.
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.
Diverse Fehlerkorrekturen
- Die Convenience-Eigenschaften
CombinedLoadStates.refresh,CombinedLoadStates.prependundCombinedLoadStates.appendwerden jetzt erst vonLoadingzuNotLoadinggeändert, 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, um Compose 1.0.0-alpha08 zu entsprechen.
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()wurden zuLazyPagingItems hinzugefügt, die dieselben Funktionen wieAsyncPagingDataDiffer/PagingDataAdapterbieten (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 Artefakt paging-compose ermöglicht die Integration der Paging-Bibliothek in 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 ist veröffentlicht. Version 3.0.1 enthält diese Commits.
Diverse Fehlerkorrekturen
- Der Zugriff auf
PagedList.dataSourceüber den vonLivePagedListoderRxPagedListerzeugten Anfangswert löst nicht mehr fälschlicherweise eine IllegalStateException aus (I96707).
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 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 erzielen:
- Erstklassige Unterstützung für Kotlin-Koroutinen und Flow
- Unterstützung bei der Kündigung
- Integrierte Signale für Ladestatus und Fehler
- Funktion „Wiederholen + aktualisieren“
- Alle drei DataSource-Unterklassen wurden in einer einheitlichen PagingSource-Klasse zusammengefasst
- Benutzerdefinierte Seitentransformationen, einschließlich einer integrierten Funktion zum Hinzufügen von Trennzeichen
- Kopf- und Fußzeilen für den Ladestatus
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 Paging manchmal No-Op-Differ-Ereignisse an RecyclerView gesendet hat, was dazu führen konnte, dass bestimmte Listener vorzeitig 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.
Diverse 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 jetzt die
@ExperimentalCoroutinesApi-Opt-In-Anforderung korrekt weiter. Bisher wurden sie in der@get-Methode markiert, 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-Aktualisierung aufgerufen wurde. - Es wurde ein Fehler behoben, bei dem leere Seiten, die von PagingSource zurückgegeben wurden, verhindern konnten, dass Paging erneut Daten abruft, um
prefetchDistancezu 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 ist veröffentlicht. Version 3.0.0-beta01 enthält diese Commits.
API-Änderungen
- Rx2- und Rx3-Wrapper stellen jetzt die experimentelle Annotation bereit, von der sie abhängen. Wenn Sie die Rx-Kompatibilitäts-Wrapper in paging-rxjava2 oder paging-rxjava3 verwenden, müssen Sie die Verwendungen jetzt mit
@OptIn(ExperimentalCoroutinesApi::class)annotieren (Ib1f9d).
Diverse Fehlerkorrekturen
- Es wurde ein Fehler behoben, bei dem
IndexOutOfBoundsException: Inconsistency detectedmanchmal ausgelöst wurde, wenn v2-DataSource-APIs über Kompatibilitätspfade verwendet wurden. - Der Aufruf von
isInvalidwährend der Initialisierung vonDataSourcebei Verwendung über Kompatibilitätspfade wird jetzt korrekt auf fetchDispatcher statt im Hauptthread 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 jetzt eine abstrakte Funktion ohne Standardimplementierung. Migrierende 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, der es Paging ermöglicht, weiterhin zentriert um den Darstellungsbereich überPagingState.anchorPositionzu laden, wenn möglich. (I4339a)InvalidatingPagingSourceFactoryist jetzt eine endgültige Klasse (Ia3b0a).- Konfiguration des Verhaltens des Terminaltrennzeichens (Kopf-/Fußzeile) mit einem zusätzlichen optionalen SeparatorType-Parameter zulassen. Folgende Optionen sind verfügbar:
FULLY_COMPLETE: Vorhandenes Verhalten; warten, bis sowohl PagingSource als auch RemoteMediator „endOfPaginationReached“ markieren, bevor Terminal-Trennzeichen hinzugefügt werden. Wenn RemoteMediator nicht verwendet wird, wird der 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 Remote-Quelle, z.B. dem 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 dann nicht scrollen, um die Trennzeichen des Terminals zu sehen. (Ibe993, b/174700218)
Diverse Fehlerkorrekturen
- Ein seltenes Speicherleck wurde behoben, das auftritt, wenn eine PagingSource ungültig wird, bevor PageFetcher überhaupt mit dem Laden 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)
- Java-Aufrufern erlauben, PagingData-Transformationsvorgänge asynchron zu verwenden, indem ein Executor in die Argumente des Transformationsoperators aufgenommen wird. Bei allen -Sync-Transformationsoperatoren wurde das Suffix -Sync entfernt. Kotlin-Koroutinen-Nutzer müssen die Mehrdeutigkeit auflösen, indem sie stattdessen die Erweiterungsfunktion aufrufen, die einen aussetzenden Block akzeptiert.
Alle PagingData-Transformationsoperatoren wurden in Erweiterungen unter der statischen PagingDataTransforms-Klasse 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)
Diverse Fehlerkorrekturen
- Es wurde ein Fehler 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 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 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öchten, wenn eine Entwertung 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-Annotation in die nicht experimentelle öffentliche API zu übertragen. (I9dc61, b/174531520)
- Die Convenience-Eigenschaften
CombinedLoadStates.refresh,CombinedLoadStates.prependundCombinedLoadStates.appendwerden jetzt erst vonLoadingzuNotLoadinggeändert, wenn sowohl der Mediator- als auch der QuellladezustandNotLoadingsind. So wird sichergestellt, dass das Remote-Update angewendet wurde. (I65619) „LoadParams.pageSize“ wurde entfernt (es war bereits als veraltet markiert). Es wird empfohlen,
LoadParams.loadSizein der PagingSource zu verwenden.LoadParams.loadSizeentspricht immerPagingConfig.pageSize, mit Ausnahme des Aufrufs für den ersten Ladevorgang, bei dem esPagingConfig.initialLoadSizeentspricht.Wenn Sie Ihre Paging2-Datenquelle ohne Pager oder PagedList testen, 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)
Diverse Fehlerkorrekturen
- Ein Absturz aufgrund von IllegalStateException bei Verwendung von Trennzeichen mit PagingConfig.maxSize wurde behoben. (I0ed33, b/174787528)
- Es wurde ein Fehler 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 APIs auf der Präsentatorseite wie .snapshot() und .peek() bei ListUpdateCallback-Aktualisierungen die vorherige (veraltete) Liste zurückgegeben haben.
- Ein Fehler wurde behoben, bei dem mit dem Operator „Separator“ keine Kopf- oder Fußzeilen hinzugefügt wurden, wenn er mit „RemoteMediator“ verwendet wurde.
- Es wurde ein Fehler behoben, bei dem LoadState-Updates auf NotLoading für RemoteMediator im Status Loading hängen blieben.
- Es wurde ein Fehler behoben, durch den die Paging2.0-Kompatibilitäts-API
.asPagingSourceFactory()dazu führen konnte, dass die zugrunde liegendeDataSourceauf dem falschen CoroutineDispatcher initialisiert wurde. Dadurch werden 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 eingestellten APIs
dataRefreshFlowunddataRefreshListenerwurden entfernt, da sie mit loadStateFlow- und Listener-Updates redundant sind. Für die Migration ist das Äquivalent zu „loadStateFlow“:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
Diverse 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 angezeigt wird, weil die erste Seite leer ist oder stark gefiltert wurde, wird das Paging nicht mehr daran gehindert,
PREPEND- oderAPPEND-Ladevorgänge zu starten. (I3e702, b/168169730) - Ein Problem wurde behoben, bei dem
getRefreshKeybei nachfolgenden Generationen von PagingSource nicht aufgerufen wird, wenn schnell ungültig gemacht wird. (I45460, b/170027530)
Externer Beitrag
- Eine neue abstrakte Klasse InvalidatingPagingSourceFactory wurde mit einer
.invalidate()-API hinzugefügt, die die Entwertung 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 Remote-
LoadStatehängen bleibt, wenn die Entwertung undPagingSource.load(LoadParams.Refresh(...))abgeschlossen sind, bevorRemoteMediator.load()zurückgegeben wird. b/173717820
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 mit einer replaceWith-Klausel einstellen. (I6e2dd)
Diverse Fehlerkorrekturen
- Fehler behoben, bei dem
IllegalArgumentExceptionausgelöst wurde, wenn Trennzeichen mit RemoteMediator verwendet wurden und eine Invalidierung 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 wurde ein Fehler behoben, bei dem die Kotlin-Variante von „invalidate“-Callbacks nach der Transformation durch.mapoder.mapByPagenicht aufgerufen wurde. (I1f244, b/165313046)
Diverse Fehlerkorrekturen
- Die Interaktion von Paging mit ViewPager wurde erheblich verbessert. Insbesondere wird durch Paging ein
RemoteMediator#load-Aufruf nicht mehr aufgrund einer Seitenungültigkeit abgebrochen. Außerdem wird keine Anfrage zum Anhängen/Voranstellen von Daten mehr gesendet, wenn REFRESH erforderlich ist, bis die REFRESH-Anfrage erfolgreich abgeschlossen wurde. (I6390b, b/162252536) - Die API-Lint-Prüfung für „MissingGetterMatchingBuilder“ ist für androidx aktiviert (I4bbea, b/138602561).
- Ein Fehler wurde behoben, bei dem
.withLoadState*-ConcatAdapter-Hilfsprogramme aufgrund einer Benachrichtigung von RecyclerView aus dem Hintergrundthread abstürzten (I18bb5, b/170988309). - Ein Fehler wurde behoben, bei dem das Laden einer sehr kleinen, nicht leeren Seite manchmal verhinderte, dass Prefetch-Vorgänge richtig ausgelöst wurden.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
- Asynchrone PagingData-Operatoren, die auf Guava basieren, akzeptieren jetzt einen Executor als Parameter, um den Ausführungskontext zu steuern. (Id4372)
Diverse Fehlerkorrekturen
- Es wurde eine IndexOutOfBounds-Ausnahme behoben, die in RemoteMediator aufgrund einer Race-Bedingung ausgelöst wurde. (I00b7f, b/165821814)
- Eine Race-Bedingung bei der Konvertierung von DataSource in PagingSource wurde behoben, die dazu führen konnte, dass die resultierende PagingSource die Entwertungssignale von DataSource ignoriert.
- Es wurde ein Problem in der Logik zum Abrufen von Seiten behoben, das manchmal dazu führte, dass neue Generationen von PagingSource erst nach dem Aufruf von PagingDataAdapter.refresh() abgerufen 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 einer klareren Meldung, dass stabile IDs nicht unterstützt werden, wird jetzt immer ausgegeben, wennPagingDataAdapter.setHasStableIdsaufgerufen wird. (Ib3890, b/158801427)
Fehlerkorrekturen
- Mit „insertSeparators“ werden leere Seiten nicht mehr herausgefiltert. Der Abstand für das Vorabrufen wird vom Präsentator 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 korrekt vorab abgerufen, auch 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 für die Hilfe beim Bereinigen einiger Tests. (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 wurde zuAsyncPagingDataDifferundPagingDataAdapterhinzugefügt, um den Zugriff auf präsentierte Daten ohne das Laden von Triggerseiten 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 allgemeinen 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-Flow / -Listener-Callbacks und der itemCount-Eigenschaft sind sie jedoch überflüssig. (Ia19f3)
- RxJava3-Kompatibilitäts-Wrapper für
PagingSourceundRemoteMediatorhinzugefügt (I49ef3, b/161480176)
Fehlerkorrekturen
PositionalDataSourcewurde über dietoPagingSourceFactory-Hilfsfunktion inPagingSourcekonvertiert.PagingSource, das von Room generiert wurde, wird jetzt korrekt markiert, um das Springen zu unterstützen. (I3e84c, b/162161201)- Es wurde ein Fehler behoben, bei dem die Verwendung der synchronen Variante von „submitData“ manchmal zu einer Race-Bedingung führte, die eine
ClosedSendChannelExceptionverursachte (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 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 Original- und Kotlin-Varianten zu vermeiden. (If7b23, b/161150011)
- Redundante APIs, die für Kotlin-Nutzer gedacht sind, wurden mit @JvmSynthetic (I56ae5) gekennzeichnet.
- Überladungen für den Konstruktor von LoadResult.Page hinzugefügt, bei denen itemsBefore und itemsAfter standardmäßig auf COUNT_UNDEFINED gesetzt werden (I47849)
- Vorhandene PagingData-Operatoren akzeptieren jetzt Sperrmethoden. Außerdem wurden die neuen nicht sperrenden Operatoren mapSync, flatMapSync und filterSync für Java-Nutzer eingeführt. Die vorhandenen Transformationsmethoden wurden in Erweiterungsfunktionen verschoben, sodass Kotlin-Nutzer sie jetzt importieren müssen. (I34239, b/159983232)
Diverse Fehlerkorrekturen
- Bei Room- und PositionalDataSource-PagingSources wird jetzt ein führendes Trennzeichen als Teil 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).
- Fehler behoben, bei dem das Scrollen nach dem Zurückgeben eines Fehlers durch PagingSource manchmal verhindern konnte, dass PagingDataAdapter.retry() den Vorgang wiederholt. (I1084f, b/160194384)
- Behebt ein Problem, bei dem Elementzugriffe nach dem Löschen einer Seite möglicherweise keine Seiten laden, obwohl der Elementzugriff innerhalb von prefetchDistance lag (Ie95ae, b/160038730)
- Wenn „PagingConfig.maxSize“ festgelegt wird, werden Platzhalter nach einem Drop-Ereignis nicht 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 allgemeinen 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 Hilfsprogramme für den allgemeinen Elementzugriff wie
isEmpty()undfirstItemOrNull()hinzugefügt. (I3b5b6, b/158892717)
Diverse Fehlerkorrekturen
- Pager prüft jetzt in der Factory auf die Wiederverwendung von PagingSource, um eine versehentliche Wiederverwendung ungültiger PagingSources zu verhindern, die einen unklaren Fehler (I99809, b/158486430) verursacht haben.
- Fehler bei RemoteMediator REFRESH verhindern nicht mehr das Laden von PagingSource (I38b1b, b/158892717)
- Die nicht-suspendierende Version von
submitDataverursacht keinen Absturz mehr, wenn sie nach der suspendierenden Version vonsubmitDataaufgerufen wird und gleichzeitig mehrerePagingDataerfasst werden. (I26358, b/158048877) - Die Ausnahme „cannot collect twice from pager“ (kann nicht zweimal vom Pager erfassen), die nach einer Konfigurationsänderung auftreten konnte, wurde behoben (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-Bibliothek 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-Koroutinen und Flow.
- Unterstützung für asynchrones Laden mit Koroutinen-Suspend-Funktionen, RxJava Single- oder Guava ListenableFuture-Primitiven.
- Integrierte Ladezustands- und Fehlersignale für ein responsives UI-Design, einschließlich Funktionen zum Wiederholen und Aktualisieren.
- Verbesserungen an der Repository-Ebene
- Vereinfachte Benutzeroberfläche für Datenquellen
- Vereinfachte Paginierung für Netzwerk und Datenbank
- Unterstützung bei der Stornierung
- Verbesserungen an der Präsentationsebene
Bekannte Probleme
- Paging 3-JavaDocs sind noch nicht verfügbar. Verwenden Sie in der Zwischenzeit die oben verlinkten Leitfäden 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 2.1.0.
Diverse Fehlerkorrekturen
- Problem mit
IndexOutOfBoundsExceptionbehoben, das in seltenen Fällen beim Konvertieren einer Position während der Entwertung auftrat.
Release-Problem
Die Paging-Version
2.1.1wurde fälschlicherweise über einen falsch konfigurierten Branch veröffentlicht. Dadurch wurden teilweise implementierte APIs und Funktionen verfügbar gemacht, die für eine zukünftige Version geplant sind.Die Paging-Version
2.1.2enthält den Load-Centering-Fix, der ursprünglich in Version 2.1.1 veröffentlicht wurde. Dieses Mal wurde er jedoch korrekt auf der Version 2.1.0 zusammengeführt. 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.
Diverse 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
Paging 2.1.0 wurde ohne Änderungen gegenüber 2.1.0-rc01 veröffentlicht.
Version 2.1.0-rc01
6. Dezember 2018
Paging 2.1.0-rc01 wurde ohne Änderungen gegenüber 2.1.0-beta01 veröffentlicht.
Version 2.1.0-beta01
1. November 2018
Paging 2.1.0-beta01 wurde 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 geladenen Elemente im Arbeitsspeicher zu begrenzen.androidx.paging.Config()wurde als Kotlin-Alternative fürPagedList.Config.Builderhinzugefügt.androidx.paging.PagedList()wurde als Kotlin-Alternative fürPagedList.BuilderhinzugefügtDataSourceFactory.toLiveData()wurde als Kotlin-Alternative fürLivePagedListBuilderhinzugefügtDataSourceFactory.toObservable()undtoFlowable()wurden als Kotlin-Alternativen fürRxPagedListBuilderhinzugefügt.AsyncPagedListDiffer.addPagedListListener()wurde hinzugefügt, um zu überwachen, wann „PagedList“ ausgetauscht wird. b/111698609PagedListAdapter.onCurrentListChanged()-Variante hinzugefügt, die die alte und die neue Liste übergibt. Die vorherige Variante wurde verworfen.- 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. Dadurch können Sie einen PagedList-Austausch mit anderen UI-Updates synchronisieren. b/73781068 PagedList.getLoadedCount()hinzugefügt, um dich darüber zu informieren, wie viele Elemente sich im Speicher befinden. Der Rückgabewert ist immer gleich.size(), wenn Platzhalter deaktiviert sind.
Diverse Fehlerkorrekturen
- Race-Bedingung beim Diffing behoben, wenn Listen wiederverwendet werden b/111591017
PagedList.loadAround()gibt jetztIndexOutOfBoundsExceptionaus, wenn der Index ungültig ist. Zuvor konnte die App mit einer unklaren anderen Ausnahme abstürzen.- Es wurde ein Problem behoben, bei dem eine extrem kleine anfängliche Ladegröße zusammen 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
Paging 2.0.0 wurde mit einer einzelnen Fehlerkorrektur veröffentlicht.
Diverse Fehlerkorrekturen
- Ein Absturz, der bei sehr schnellem Scrollen mit
PositionalDataSourceund Platzhaltern auftreten konnte, wurde behoben b/114635383.
Version 2.0.0-beta01
2. Juli 2018
Fehlerkorrekturen
- In einigen Fällen, in denen Inhalte vorangestellt wurden, verschwanden diese (Platzhalter deaktiviert, PositionalDataSource) b/80149146
- (Bereits in
1.0.1veröffentlicht) Es wurden Abstürze behoben, bei denenPagedListAdapterundAsyncPagedListDifferkeine Bewegungsereignisse signalisiert haben. b/110711937
Abhängigkeiten vor AndroidX
Fügen Sie für die folgenden Pre-AndroidX-Versionen von Paging diese 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 Paginierung 1.0.1 wird mit einem einzelnen Fehlerkorrektur in runtime veröffentlicht. Wir empfehlen dringend, 1.0.1 zu verwenden, um die Stabilität zu gewährleisten. Paging RxJava2 1.0.1 wurde ebenfalls veröffentlicht und ist mit 1.0.0-rc1 identisch.
Fehlerkorrekturen
- Es wurden Abstürze behoben, bei denen
PagedListAdapterundAsyncPagedListDifferkeine Bewegungsereignisse signalisieren konnten. 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 Releasekandidaten.
Version 1.0.0
Version 1.0.0-rc1
19. April 2018 Releasekandidat für Paging
Es sind keine weiteren bekannten Probleme oder neuen Funktionen für den Paging-Release 1.0.0 geplant. Bitte aktualisieren Sie Ihre Projekte, um 1.0.0-rc1 zu verwenden, und helfen Sie uns, es zu testen, damit wir eine solide 1.0.0-Version bereitstellen können.
In diesem Release gibt es keine Änderungen. Es ist mit 1.0.0-beta1 identisch.
Version 1.0.0-beta1
5. April 2018
Die Paging-Funktion wird kurzzeitig in der Betaphase sein, 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, wobei Schedulers anstelle von Executors verwendet werden:
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 die erstePagedList-Last auf dem angegebenen Executor aus, anstatt auf dem Threadpool für die E/A-Architekturkomponenten.Das Verhalten beim Ungültigmachen in internen
DataSource-Wrappern wurde korrigiert (wird zur Implementierung vonDataSource.mapsowie zum Laden vonPositionalDataSourcemit deaktivierten Platzhaltern verwendet) 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 Abhängigkeit lifecycle:runtime auf android.arch.lifecycle:runtime:1.1.1 aktualisieren.
Paging alpha7 ist die letzte Version vor der Beta-Phase.
API-Änderungen
DataSource.LoadParams-Objekte haben jetzt einen öffentlichen Konstruktor undDataSource.LoadCallback-Objekte sind jetzt abstrakt. Dadurch kann einDataSource-Objekt umschlossen oder einDataSource-Objekt direkt mit einem simulierten 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()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.Factorywird von einer Schnittstelle in eine abstrakte Klasse geändert, um Kartenfunktionen zu ermöglichen.
Fehlerkorrekturen
- Builder wurden in „final“ geändert. b/70848565
- Die Implementierung von Room
DataSourcewurde korrigiert, um Abfragen über mehrere Tabellen zu verarbeiten. Diese Korrektur ist in Room 1.1.0-beta1 enthalten (siehe oben). - Ein Fehler wurde behoben, bei dem
BoundaryCallback.onItemAtEndLoadednicht fürPositionalDataSourceaufgerufen wurde, wenn Platzhalter aktiviert waren und die Gesamtgröße ein genaues Vielfaches der Seitengröße war.
Version 1.0.0-alpha5
22. Januar 2018
Fehlerkorrekturen
- Fehler beim Seitenaufbau behoben, wenn Platzhalter deaktiviert sind b/70573345
- Zusätzliches Logging zur Fehlerbehebung des IllegalArgumentException-Fehlers b/70360195 (und spekulative Korrektur auf Room-Seite)
- Korrekturen am Javadoc-Beispielcode b/70411933, b/71467637