Seitenumbruch
In dieser Tabelle sind alle Artefakte in der Gruppe androidx.paging
aufgeführt.
Artefakt | Stabile Version | Releasekandidat | Beta-Ausgabe | Alpharelease |
---|---|---|---|---|
Paging* | 3.2.1 | - | 3.3.0-beta01 | - |
Paging-Compose | 3.2.1 | - | 3.3.0-beta01 | - |
Abhängigkeiten deklarieren
Zum Hinzufügen einer Abhängigkeit von Paging müssen Sie Ihrem Projekt das Maven-Repository von Google hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.
Fügen Sie der Datei build.gradle
für Ihre Anwendung oder Ihr Modul die Abhängigkeiten für die benötigten Artefakte hinzu:
Groovig
dependencies { def paging_version = "3.2.1" implementation "androidx.paging:paging-runtime:$paging_version" // alternatively - without Android dependencies for tests testImplementation "androidx.paging:paging-common:$paging_version" // optional - RxJava2 support implementation "androidx.paging:paging-rxjava2:$paging_version" // optional - RxJava3 support implementation "androidx.paging:paging-rxjava3:$paging_version" // optional - Guava ListenableFuture support implementation "androidx.paging:paging-guava:$paging_version" // optional - Jetpack Compose integration implementation "androidx.paging:paging-compose:3.3.0-beta01" }
Kotlin
dependencies { val paging_version = "3.2.1" implementation("androidx.paging:paging-runtime:$paging_version") // alternatively - without Android dependencies for tests testImplementation("androidx.paging:paging-common:$paging_version") // optional - RxJava2 support implementation("androidx.paging:paging-rxjava2:$paging_version") // optional - RxJava3 support implementation("androidx.paging:paging-rxjava3:$paging_version") // optional - Guava ListenableFuture support implementation("androidx.paging:paging-guava:$paging_version") // optional - Jetpack Compose integration implementation("androidx.paging:paging-compose:3.3.0-beta01") }
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
Dein Feedback hilft uns, Jetpack zu verbessern. Lassen Sie uns wissen, wenn Sie neue Probleme entdecken oder Ideen zur Verbesserung dieser Bibliothek haben. Sehen Sie sich die vorhandenen Probleme in dieser Bibliothek an, bevor Sie eine neue erstellen. Durch Klicken auf die Stern-Schaltfläche können Sie zu einem vorhandenen Problem abstimmen.
Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.
Version 3.3
Version 3.3.0-beta01
3. April 2024
androidx.paging:paging-*:3.3.0-beta01
wurde ohne wichtige Änderungen veröffentlicht. Version 3.3.0-beta01 enthält diese Commits.
Version 3.3.0-alpha05
20. März 2024
androidx.paging:paging-*:3.3.0-alpha05
wird freigegeben. Version 3.3.0-alpha05 enthält diese Commits.
API-Änderungen
- Beim Paging wird jetzt die
@MainThread
-Annotation von AndroidX für allgemeinen Code verwendet. (I78f0d, b/327682438)
Version 3.3.0-alpha04
6. März 2024
androidx.paging:paging-*:3.3.0-alpha04
wird freigegeben. Version 3.3.0-alpha04 enthält diese Commits.
Fehlerkorrekturen
- Kleinere Dokumentationsfehler im Zusammenhang mit der Kotlin-Kompatibilität mit mehreren Plattformen wurden behoben. (aosp/2950785)
Version 3.3.0-alpha03
7. Februar 2024
androidx.paging:paging-*:3.3.0-alpha03
wird freigegeben. Version 3.3.0-alpha03 enthält diese Commits.
Neue Funktionen
PagingDataPresenter
ist jetzt ein öffentlicher Kurs. Plattformübergreifende Präsentierende können jetzt aufPagingDataPresenter
aufbauen, anstatt interne Paging APIs oder dieAsyncPagingDataDiffer
vonpaging-runtime
zu benötigen. (Id1f74, b/315214786)- Neue Hilfsmethoden
LoadStates
undCombinedLoadStates
hinzugefügt, um zu prüfen, ob sichLoadStates
im Status „Fehler“ oder „NotLoading
“ befindet. Außerdem wurde eine neue API hinzugefügt, die auf einemLoadStateFlow
wartet, bis sich eine Last im StatusNotLoading
oder Fehler befindet. (Id6c67)
Verhaltensänderung
PagingData.empty()
sendet jetzt standardmäßigNotLoading
-Zustände, sofern keine benutzerdefiniertenLoadStates
an seinen Konstruktor übergeben werden. Dies weicht von dem bestehenden Verhalten ab, bei demLoadStates
nicht ausgelöst wird, wenn es anPagingDataAdapter
gesendet wird, oder Ladestatus ausgelöst werden, wenn es alsLazyPagingItems
erfasst wird. Wenn es alsLazyPagingItems
erfasst wird, wird jetzt auch direkt nach der ersten Zusammensetzung eine leere Liste angezeigt. (I4d11d, b/301833847)
Version 3.3.0-alpha02
20. September 2023
androidx.paging:paging-*:3.3.0-alpha02
wird freigegeben. Version 3.3.0-alpha02 enthält diese Commits.
Kotlin-Kompatibilität mit mehreren Plattformen
Paging liefert jetzt Artefakte, die mit Kotlin Multiplatform kompatibel sind, was zu einem großen Teil der vorgelagerten Arbeit aus dem Multiplatform-Paging-Projekt von CashApp zu verdanken ist. Auf diese Weise können wir Divergenz zwischen zwei Repositories vermeiden und für Kompatibilität sorgen.
paging-common
hat alle Paging 3 APIs zucommon
verschoben und ist jetzt neben Android auch mit JVM und iOS kompatibel.paging-testing
hat seinen Code incommon
verschoben und ist jetzt neben Android auch mit JVM und iOS kompatibel.paging-compose
hat seinen Code nachcommon
verschoben und versendet ein Android-Artefakt, das der plattformübergreifenden Unterstützung vonandroidx.compose
entspricht.paging-runtime
,paging-guava
,paging-rxjava2
undpaging-rxjava3
sind weiterhin nur für Android verfügbar.
API-Änderungen
- Die öffentliche Logger-Schnittstelle, die nur für den internen Gebrauch vorgesehen war, wurde eingestellt (I16e95, b/288623117).
Externer Beitrag
- Vielen Dank an veyndan von Cash App für die Unterstützung beim Verschieben von Paging auf die Kotlin-Multiplattform (#560, #561, #562, #573, #576, #578, #578, #578, #578, #578.
Version 3.3.0-alpha01
20. September 2023
- Dies ist die erste plattformübergreifende Version der androidx.paging-Bibliotheken. Diese Version hat nur die Artefakte
*-jvm
und*-android
. Verwenden Sie für Varianten von macOS, iOS und Linux3.3.0-alpha02
.
Version 3.2
Version 3.2.1
6. September 2023
androidx.paging:paging-*:3.2.1
wird freigegeben. Version 3.2.1 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem die
asSnapshot()
API des Paging Testing-Artefakts beim Übergeben eines mitPagingData.from(List)
erstellten Ablaufs aufhängte, daasSnapshot()
(im Gegensatz zurPagingData.from(List, LoadStates)
-Überlastung) keine Informationen zum Abschluss des Ladevorgangs hatte. Diese Problemumgehung funktioniert nur für vervollständigbare Abläufe (z.B.flowOf(PagingData.from(...))
). Für nicht vervollständigende Abläufe (z.B.MutableStateFlow
verwendet diePagingData.from
-Überlastung, dieLoadStates
bereitstellt. (I502c3) - Für die Funktion „Auslagerung“ wird jetzt intern
AndroidUiDispatcher.Main
verwendet, um sicherzustellen, dass neue Daten im selben Frame verfügbar sind, in dem der Ladevorgang abgeschlossen ist. (Ia55af)
Version 3.2.0
26. Juli 2023
androidx.paging:paging-*:3.2.0
wird freigegeben. Version 3.2.0 enthält diese Commits.
Wichtige Änderungen seit Version 3.1.0
- Paging Compose erreichte API-Stabilität und wurde mit dem Rest von Paging wieder zusammengeführt. Die Version entspricht jetzt allen anderen Paging-Elementen. Zu den Änderungen seit Version 3.1.0 gehören:
- Unterstützung für die Vorschau einer Liste gefälschter Daten durch Erstellen eines
PagingData.from(fakeData)
und Verpacken diesesPagingData
in eineMutableStateFlow
(z.B.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Übergeben Sie diesen Ablauf an@Preview
zusammensetzbare Daten als Empfänger fürcollectAsLazyPagingItems()
, um eine Vorschau anzuzeigen. - Unterstützung für alle Lazy-Layouts wie
LazyVerticalGrid
undHorizontalPager
sowie für benutzerdefinierte Lazy-Komponenten aus Wear- und TV-Bibliotheken. Dies wurde durch die neuenLazyPagingItems
-ErweiterungsmethodenitemKey
unditemContentType
auf niedrigerer Ebene erreicht, mit denen du die Parameterkey
undcontentType
in dieitems
-Standard-APIs, die bereits fürLazyColumn
,LazyVerticalGrid
sowie ihre Entsprechungen in APIs wieHorizontalPager
, implementieren können. items(lazyPagingItems)
unditemsIndexed(lazyPagingItems)
, die nurLazyListScope
unterstützen, wurden eingestellt.
- Unterstützung für die Vorschau einer Liste gefälschter Daten durch Erstellen eines
- Neues
paging-testing
-Artefakt, das APIs zum Testen der einzelnen Schichten Ihrer App und deren isolierte Integration mit Paging bereitstellt. Sie enthält beispielsweiseTestPager
-Klasse, mit der Sie das Verhalten Ihrer eigenen benutzerdefiniertenPagingSource
-Implementierung unabhängig vom Pager und der echten Benutzeroberfläche validieren können.asPagingSourceFactory
APIs zum Transformieren einesFlow<List<Value>>
oder eines statischenList<Value>
in einePagingSourceFactory
, die in Tests an einen Pager übergeben werden kannasSnapshot
-Kotlin-Erweiterung fürFlow<PagingData<Value>>
, dieFlow<PagingData<Value>>
in eine direkteList<Value>
umwandelt. Mit demasSnapshot lambda
können Sie die Benutzeroberfläche Ihrer App über APIs wiescrollTo
oderappendScrollWhile
nachahmen, um jederzeit prüfen zu können, ob der Snapshot der Daten in den Seitendaten korrekt ist.
- Es wurden Standardprotokolle hinzugefügt, um Informationen zur Fehlerbehebung für das Paging auf zwei Ebenen bereitzustellen:
VERBOSE
undDEBUG
. Die Logs können über den 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 der Funktion "Compose". - Es wurden Konstruktoren für
PagingDataAdapter
undAsyncPagingDataDiffer
hinzugefügt, dieCoroutineContext
anstelle vonCoroutineDispatcher
akzeptieren. - Es wurde eine neue
PagingSourceFactory
-funktionale Schnittstelle hinzugefügt, die eine explizitere API-Oberfläche als die vorherigen Lambdas () ->PagingSource
bietet. Diese Factory kann zum Instanziieren eines Pager verwendet werden.
Version 3.2.0-rc01
21. Juni 2023
androidx.paging:paging-*:3.2.0-rc01
wird freigegeben. Version 3.2.0-rc01 enthält diese Commits.
Externer Beitrag
- Vielen Dank, Veyndan, für deinen Beitrag zur Umstellung von Paging von den Besonderheiten von Android/JVM. (#553, #554, #555 und #559)
Version 3.2.0-beta01
7. Juni 2023
androidx.paging:paging-*:3.2.0-beta01
wird freigegeben. Version 3.2.0-beta01 enthält diese Commits.
Paging und Schreiben
- Die Funktion zum Erstellen von Seiten hat offiziell die API-Stabilität erreicht. Daher wurde die Version von
1.0.0-alpha20
aktualisiert, sodass sie jetzt mit der Version aller anderen Paging-Artefakte übereinstimmt.
API-Änderungen
- Die veralteten APIs
items(LazyPagingItems)
unditemsIndexed(LazyPagingItems)
wurden aus der Funktion „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
wird freigegeben. Version 3.2.0-alpha06 enthält diese Commits.
Neue Funktionen
- Es wurde eine neue
PagingSourceFactory
-Funktionsschnittstelle hinzugefügt, die eine explizitere API-Oberfläche als die vorhandenen() -> PagingSource
-Lambdas bietet. Diese Factory kann zum Instanziieren einesPager
verwendet werden. (I33165, b/280655188) - Neue
paging-testing
API vonList<Value>.asPagingSourceFactory()
wurde hinzugefügt, um einPagingSourceFactory
abzurufen, das nur aus einer unveränderlichen Liste von Daten geladen wird. Die vorhandene Erweiterung unterFlow<List<Value>>
sollte weiterhin zum Testen mit statischen Daten mehrerer Generationen verwendet werden. (Id34d1, b/280655188)
API-Änderungen
- Alle öffentlichen APIs in Pagingtests sind jetzt mit
@VisibleForTesting
annotiert, um sicherzustellen, dass diese APIs nur in Tests verwendet werden. I7db6e. - Für die
asSnapshot
API muss keinCoroutineScope
mehr übergeben werden. Jetzt wird standardmäßig der Kontext verwendet, der vom übergeordneten Bereich übernommen wurde. (Id0a78, b/282240990) TestPager
-Konstruktorparameter neu angeordnet, sodass sie intuitiv der Reihenfolge der echtenPager
-Konstruktorparameter entsprechen (I6185a)- Die Verwendung des Lambda-Typs
() -> PagingSource<Key, Value>
zum TypPagingSourceFactory<Key, Value>
wurde für Paging-Tests migriert. (I4a950, b/280655188)
Änderungen des Verhaltens
- Der Haupt-Dispatcher ist zum Ausführen von
asSnapshot
-Auslagerungstests nicht mehr erforderlich. Wenn Sie ihn festlegen, werden keine Änderungen am Testverhalten mehr vorgenommen. (Ie56ea)
Version 3.2.0-alpha05
3. Mai 2023
androidx.paging:paging-*:3.2.0-alpha05
wird freigegeben. Version 3.2.0-alpha05 enthält diese Commits.
API-Änderungen
- Die Paging Testing API von
asSnapshot
ist jetzt standardmäßig für ihrenloadOperations
-Parameter eine leere Lambda-Funktion eingestellt. Dadurch kannasSnapshot
aufgerufen werden, ohne dass Ladevorgänge übergeben werden müssen, um die Daten aus dem anfänglichen Aktualisierungsladevorgang abzurufen. (Ied354, b/277233770)
Verbesserungen der Dokumentation
- Die Dokumentation zu
asPagingSourceFactory()
wurde aktualisiert, um klarzustellen, dass es sich um eine Erweiterungsmethode für eineFlow
handelt, die eine wiederverwendbare Factory zum Generieren vonPagingSource
-Instanzen zurückgibt. (I5ff4f, I705b5) - Die Dokumentation zum Konstruktor
LoadResult.Page
wurde aktualisiert, um zu verdeutlichen, dassitemsBefore
unditemsAfter
überschrieben werden müssen, um das Springen zu unterstützen. (Ied354)
Externe Unterstützung
- Vielen Dank, Veyndan, für deinen Beitrag zur Umstellung von Paging von den Besonderheiten von Android/JVM. (#525, #523, #520, #519, #507, #506, #505, #499, #497, #49})
Version 3.2.0-alpha04
8. Februar 2023
androidx.paging:paging-*:3.2.0-alpha04
wird freigegeben. Version 3.2.0-alpha04 enthält diese Commits.
Paging-Tests
- Das Artefakt
paging-testing
enthält jetzt eineasPagingSourceFactory
-Methode zum Erstellen einerpagingSourceFactory
aus einerFlow<List<Value>>
, die an einen Pager übergeben werden soll. JedeList<Value>>
, die vom Ablauf ausgegeben wird, stellt eine Generierung von seitenbasierten Daten dar. Dies erleichtert Paging-Tests beispielsweise fürPagingData
-Transformationen, indem eine Datenquelle simuliert wird, aus der der Pager Daten erfassen soll. (I6f230, b/235528239) Das Artefakt
paging-testing
wurde mit neuen APIs erweitert, die geeignet sind, um die Richtigkeit der inFlow<PagingData<T>>
enthaltenen Daten zu prüfen. Dies kann beispielsweise verwendet werden, um die Ausgabe einesFlow<PagingData<T>>
aus Ihrer ViewModel-Ebene zu bestätigen.Dazu wird die Kotlin-Erweiterung
asSnapshot
fürFlow<PagingData<Value>>
verwendet, die denFlow<PagingData<Value>>
in eine direkteList<Value>
umwandelt. Mit der Lambda-FunktionasSnapshot
können Sie die Benutzeroberfläche Ihrer App über APIs wiescrollTo
oderappendScrollWhile
auf wiederholbare und konsistente Weise nachahmen, sodass Sie jederzeit prüfen können, ob der Snapshot der Daten in Ihrem Datensatz korrekt ist.// Create your ViewModel instance val viewModel = … // Get the Flow of PagingData from the ViewModel val data< Flow<PagingData<String>> = viewModel.data val snapshot: List<String> = data.asSnapshot { // Each operation inside the lambda waits for the data to settle before continuing scrollTo(index = 50) // While you can’t view the items within the asSnapshot call, // you can continuously scroll in a direction while some condition is true // i.e., in this case until you hit a placeholder item appendScrollWhile { item: String -> item != “Header 1” } } // With the asSnapshot complete, you can now verify that the snapshot // has the expected values
asSnapshot
ist einesuspend
-Methode, die innerhalb vonrunTest
ausgeführt werden soll. Weitere Informationen finden Sie unter Kotlin-Koroutinen unter Android testen. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9Ib29b9, Ic18b9/Ic15b9, Ic15b9, Ic15b9, Ic177123)
API-Änderungen
- UI-Aufrufe von
getItem
undpeek
inAsyncPagingDataDiffer
undPagingDataAdapter
sind jetzt korrekt als nur aufrufbar im Main-Thread gekennzeichnet. (I699b6) - Platzhalter aus allgemeinen Typen, die von
TestPager
verwendet werden, wurden entfernt. Dadurch wurde es einfacher, die Ergebnisse dieser Methoden in Code zu verarbeiten, der in der Programmiersprache Java geschrieben wurde. (I56c42)
Version 3.2.0-alpha03
24. Oktober 2022
androidx.paging:paging-*:3.2.0-alpha03
wird freigegeben. Version 3.2.0-alpha03 enthält diese Commits.
Paging-Tests
Dieser Release enthält ein neues Artefakt: paging-testing
. Dieses Artefakt stellt APIs zum Testen der einzelnen Schichten Ihrer App und deren Integration in die Paginierung isoliert bereit.
Der erste Release enthält beispielsweise eine TestPager
-Klasse, mit der Sie das Verhalten Ihrer eigenen benutzerdefinierten PagingSource
-Implementierung unabhängig von der Pager
und der echten Benutzeroberfläche validieren können, die Sie normalerweise zur Simulation der End-to-End-Paging-Integration benötigen würden.
TestPager
sollte als Fake betrachtet werden – ein Test-Double, das die tatsächliche Implementierung von Pager
spiegelt und gleichzeitig eine vereinfachte API-Oberfläche zum Testen einer PagingSource
bietet. Diese APIs sind suspend
-APIs und sollten innerhalb von runTest
ausgeführt werden, wie im Leitfaden zum Testen von Kotlin-Koroutinen unter Android beschrieben.
Ein Beispiel für die verwendeten APIs finden Sie in den room-paging
-Tests, die für die Verwendung von TestPager
refaktoriert wurden.
API-Änderungen
- Ermöglicht eine bequeme Iteration über
LoadResult.Page.data
bisLoadResult.Page.iterator()
. Dadurch kann indirekt dieflatten
-Methode der Kotlin-Standardbibliothek genutzt werden, wenn einList<LoadResult.Page>
wie z. B. mit dempages
-Attribut vonPagingState
angegeben wird, das an diePagingSource.getRefreshKey
-Methode übergeben wird. (Ie0718)
Version 3.2.0-alpha02
10. August 2022
androidx.paging:paging-*:3.2.0-alpha02
wird freigegeben. Version 3.2.0-alpha02 enthält diese Commits.
Neue Funktionen
- Beim Paging werden jetzt Logs über die Klassen
AsyncPagingDataDiffer
oderPagingDataAdapter
bereitgestellt, um mitPagingData
erfasste Informationen zur Fehlerbehebung verfügbar zu machen. - Die Logs können über den
adb shell
-Befehladb shell setprop log.tag.Paging [DEBUG|VERBOSE].
(b/235527159) aktiviert werden.
Fehlerkorrekturen
- Der fehlende
PagingDataDiffer
-Konstruktorfehler bei Verwendung vonpaging-common:3.2.0-alpha01
mit Laufzeit-paging-runtime:3.1.1
oder älter wurde behoben.(b/235256201)
Version 3.2.0-alpha01
1. Juni 2022
androidx.paging:paging-*:3.2.0-alpha01
wird freigegeben. Version 3.2.0-alpha01 enthält diese Commits.
API-Änderungen
- Es wurden Konstruktoren für
PagingDataAdapter
undAsyncPagingDataDiffer
hinzugefügt, dieCoroutineContext
anstelle vonCoroutineDispatcher
akzeptieren. (Idc878) - Standardmäßig wirken sich
PagingData.from()
undPagingData.empty()
nicht mehr aufCombinedLoadStates
für den Vortragenden aus. Eine neue Überlastung, die die Übergabe vonsourceLoadStates
undremoteLoadStates
an diese Konstruktoren ermöglicht, wurde hinzugefügt, um das bestehende Verhalten bei der Einstellung vonLoadStates
als vollständiges Terminal (d.h.NotLoading(endOfPaginationReached = false)
) mit der Option, bei Bedarf auch Remote-Status einzuschließen. WennLoadStates
nicht übergeben werden, wird die vorherigeCombinedLoadStates
auf der Präsentationsseite beibehalten, wenn sie die statischePagingData
empfängt. (Ic3ce5, b/205344028)
Fehlerkorrekturen
- Das Ergebnis von
PagingSource.getRefreshKey()
hat jetzt die richtige Priorität gegenüberinitialKey
, wenn es null zurückgeben würde, aber eininitialKey
ungleich null festgelegt wurde. (Ic9542, b/230391606)
Externer Beitrag
- :compose:ui:ui-test api (updateApi) aufgrund der Migration von test-coroutines-lib aktualisiert (I3366d)
Version 3.1
Version 3.1.1
9. März 2022
androidx.paging:paging-*:3.1.1
wird freigegeben. Version 3.1.1 enthält diese Commits.
Fehlerkorrekturen
LoadState.NotLoading
-Zwischenereignisse zwischen Generationen entfernt, die von.cachedIn()
falsch eingefügt wurden. Mit dieser Änderung ist es viel einfacher, aufLoadState
-Änderungen zu reagieren, da redundanteLoadState.NotLoading
-Ereignisse entfernt werden, die zwischen dem Wiederholen fehlgeschlagener Ladevorgängen, beim Aktualisieren oder während der Entwertung aufgetreten sind.
Version 3.1.0
17. November 2021
androidx.paging:paging-*:3.1.0
wird freigegeben. Version 3.1.0 enthält diese Commits.
Wichtige Änderungen seit Version 3.0.0
Flow<PagingData>.observable
undFlow<PagingData>.flowable
APIs sind nicht mehr experimentell- Verhaltensänderungen bei
LoadState
:endOfPaginationReached
ist jetzt fürLoadType.REFRESH
sowohl fürPagingSource
als auch fürRemoteMediator
immerfalse
LoadStates
aus dem Paging wartet nun auf gültige Werte vonPagingSource
undRemoteMediator
, bevor es nachgelagert wird. NeuePagingData
-Generationen beginnen jetzt immer korrekt mitLoading
für den Aktualisierungsstatus, anstatt in einigen Fällen fälschlicherweise aufNotLoading
zurückgesetzt zu werden..loadStateFlow
und.addLoadStateListener
in den Presenter-APIs senden nicht mehr redundant eine anfänglicheCombinedLoadStates
, die immer die Vermittlerstatus aufnull
gesetzt hat
- Frühere Generationen werden jetzt fokussiert bei der Entwertung / neuen Generationen gelöscht. Es sollte nicht mehr erforderlich sein, um
.collectLatest
inFlow<PagingData>
zu verwenden, wird aber weiterhin empfohlen. PagingSource.LoadResult.Invalid
wurde als neuer Rückgabetyp ausPagingSource.load
hinzugefügt. Dadurch werden alle ausstehenden oder zukünftigen Ladeanfragen an diesesPagingSource
-Objekt verworfen und ungültig. Dieser Rückgabetyp dient der Verarbeitung potenziell ungültiger oder veralteter Daten, die von der Datenbank oder dem Netzwerk zurückgegeben werden können.- Präsentations-APIs
.onPagesPresented
und.addOnPagesUpdatedListener
wurden hinzugefügt, die synchron ausgelöst werden, wenn Seiten in der Benutzeroberfläche angezeigt werden. Seitenaktualisierungen können in folgenden Fällen erfolgen:- Das anfängliche Laden einer neuen Generation von PagingData ist abgeschlossen, unabhängig davon, ob die neue Generation Änderungen an den bereitgestellten Elementen enthält. Eine neue Generation, die den ersten Ladevorgang ohne Aktualisierungen abschließt, weil die Liste genau gleich ist, löst diesen Callback aus.
- 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
wird freigegeben. Version 3.1.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Es wurde eine Race-Bedingung und ein Speicherleck in .cachedIn() behoben, bei dem mehrere Ladeereignisse von nachgelagerten Paging-Vorgängen gesendet wurden, während keine Beobachter vorhanden waren, oder wenn ein Beobachter zu neuen PagingData wechselte. (Ib682e)
Version 3.1.0-beta01
13. Oktober 2021
androidx.paging:paging-*:3.1.0-beta01
wird freigegeben. Version 3.1.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Viele schnelle Elementzugriffe haben dazu geführt, dass sie bei der Berücksichtigung in „prefetchDistance“ nicht berücksichtigt wurden, was dazu führte, dass der Seitenaufbau verzögert wurde. Dieses Problem wurde behoben. Dies ist insbesondere dann ein Problem, wenn viele Elemente gleichzeitig in einer Reihenfolge angeordnet sind, die das Laden in Bezug auf die Scrollrichtung des Nutzers priorisiert. Diese Elementzugriffe werden jetzt gepuffert und synchron priorisiert, um zu verhindern, dass sie gelöscht werden. (aosp/1833273)
Version 3.1.0-alpha04
29. September 2021
androidx.paging:paging-*:3.1.0-alpha04
wird freigegeben. Version 3.1.0-alpha04 enthält diese Commits.
API-Änderungen
- Die APIs
Flow<PagingData>.observable
undFlow<PagingData>.flowable
befinden sich nicht mehr in der Testphase. (Ie0bdd)
Fehlerkorrekturen
- Bei LoadStates ist
endOfPaginationReached
fürLoadType.REFRESH
jetzt immerfalse
. Bisher war es für endOfPaginationReached möglich, für RemoteMediatorREFRESH
alstrue
zu verwenden, nicht aber für PagingSource. Dieses Verhalten ist jetzt konsolidiert, sodass immerfalse
zurückgegeben wird, da es niemals sinnvoll ist, REFRESH als Terminal zu verwenden. 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 Richtung APPEND oder PREPEND tun. (I047b6) LoadStates aus Paging warten jetzt auf gültige Werte von PagingSource und RemoteMediator, bevor sie zwischen den Generierungen nachgelagert werden. Dadurch wird verhindert, dass neue PagingData-Generationen in Kombinierter Ladezustand "NotLoading" senden, wenn die Funktion bereits geladen wurde. Neue Generationen von PagingData beginnen jetzt immer korrekt mit "Laden für den Aktualisierungsstatus", anstatt in einigen Fällen fälschlicherweise auf NotLoading zurückgesetzt zu werden.
Die Löschung vorheriger Generationen erfolgt nun bewusst bei Entwertung/neuen Generationen. Es sollte nicht mehr erforderlich sein, .collectlatest für
Flow<PagingData>
zu verwenden, wird aber weiterhin dringend empfohlen (I0b2b5, b/177351336, b/195028524)..loadStateFlow
und.addLoadStateListener
in Presenter-APIs senden nicht mehr redundant eine anfänglicheCombinedLoadStates
, die immer die Mediator-Status aufnull
und die Quellstatus aufNotLoading(endOfPaginationReached = false)
gesetzt hat. Das bedeutet Folgendes:- Die Mediator-Status werden bei Verwendung von RemoteMediator immer ausgefüllt.
- Wenn Sie einen neuen LoadState-Listener oder einen neuen Collector unter
.loadStateFlow
registrieren, wird der aktuelle Wert nicht mehr sofort ausgegeben, wenn kein echterCombinedLoadStates
vonPagingData
empfangen wurde. Dies kann passieren, wenn ein Collector oder Listener gestartet wird, bevorPagingData
gesendet wurde. (I1a748)
Version 3.1.0-alpha03
21. Juli 2021
androidx.paging:paging-*:3.1.0-alpha03
wird freigegeben. Version 3.1.0-alpha03 enthält diese Commits.
API-Änderungen
Der dritte LoadResult-Rückgabetyp LoadResult.Ungültig wird PagingSource hinzugefügt. Wenn eine PagingSource.load "LoadResult.Ungültig" zurückgibt, werden die geladenen Daten beim Paging verworfen und die PagingSource ungültig. Dieser Rückgabetyp dient der Verarbeitung potenziell ungültiger oder veralteter Daten, die von der Datenbank oder dem Netzwerk zurückgegeben werden können.
Wenn beispielsweise in die zugrunde liegende Datenbank geschrieben wird, die PagingSource jedoch keine zeitliche Entwertung vornimmt, können inkonsistente Ergebnisse zurückgegeben werden, falls ihre Implementierung von der Unveränderlichkeit des zugrunde liegenden Datasets abhängt, aus dem sie geladen wird (z.B. LIMIT OFFSET-Stil-Datenbankimplementierungen). In diesem Szenario empfiehlt es sich, nach dem Laden auf Entwertung zu prüfen und LoadResult.Ungültige zurückzugeben. Dadurch werden alle ausstehenden oder zukünftigen Ladeanfragen an diese PagingSource verworfen und entwertet.
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, wodurch weitere Versuche, Daten in diese PagedList zu laden, gestoppt werden und die Entwertung der PagingSource ausgelöst wird.
LoadResult ist eine versiegelte Klasse. Das bedeutet, dass es sich um eine quellinkompatible Änderung handelt, sodass Anwendungsfälle, bei denen „PagingSource.load“-Ergebnisse direkt verwendet werden, „LoadResult.Ungültig“ zur Kompilierungszeit verarbeiten müssen. Beispielsweise müssen Kotlin-Nutzer, die den Rückgabetyp vollständig prüfen, eine Prüfung auf „Ungültiger Typ“ hinzufügen. (Id6bd3, b/191806126, b/192013267)
Fehlerkorrekturen
- Rückrufe zur Entwertung, die über PagingSource.register InvalidatedCallback oder DataSource.add InvalidatedCallback hinzugefügt wurden, werden jetzt automatisch ausgelöst, wenn sie in einer bereits ungültigen PagingSource / DataSource registriert wurden. Dadurch wird eine Race-Bedingung behoben, bei der beim Paging Entwertungssignale gelöscht wurden und beim Bereitstellen einer Quelle, die beim ersten Laden bereits ungültig war, hängen bleibt. Außerdem werden entwertete Callbacks nach dem Auslösen jetzt korrekt entfernt, da sie garantiert höchstens einmal aufgerufen werden. (I27e69)
- Wenn Sie den Anfangswert des Platzhalters (InitialPagedList) aus einem neu instanziierten PagedList-Stream einreichen, z.B. Mit LivePagedListBuilder oder RxPagedListBuilder werden zuvor geladene Daten nicht mehr gelöscht.
Version 3.1.0-alpha02
1. Juli 2021
androidx.paging:paging-*:3.1.0-alpha02
wird freigegeben. Version 3.1.0-alpha02 enthält diese Commits.
Neue Funktionen
Die Listener- und Flow Presenter-APIs onPagesPresented werden ausgelöst, sobald die präsentierten Seiten in der Benutzeroberfläche aktualisiert wurden.
Da diese Aktualisierungen mit der UI synchron sind, können Sie Adaptermethoden wie „.Snapshot“ oder „.getItemCount“ aufrufen, um den Status nach der Aktualisierung zu überprüfen. Beachten Sie, dass „.snapshot()“ weiterhin explizit aufgerufen werden muss, da dies bei jeder Aktualisierung teuer sein kann.
Seitenaktualisierungen können in folgenden Fällen erfolgen:
- Das anfängliche Laden einer neuen Generation von PagingData ist abgeschlossen, unabhängig davon, ob die neue Generation Änderungen an den präsentierten Elementen enthält. Eine neue Generation, die den anfänglichen Ladevorgang ohne Aktualisierungen abschließt, weil die Liste genau gleich ist, löst diesen Callback aus.
- Eine Seite wird eingefügt, auch wenn die eingefügte Seite keine neuen Elemente enthält.
- Eine Seite wurde entfernt, auch wenn sie leer war (I272c9, b/189999634).
Fehlerkorrekturen
- Wenn Sie über den von LivePagedList oder RxPagedList generierten Anfangswert auf PagedList.dataSource zugreifen, wird nicht mehr fälschlicherweise eine IllegalStateException (I96707) ausgelöst.
Version 3.1.0-alpha01
2. Juni 2021
androidx.paging:paging-*:3.1.0-alpha01
wird freigegeben. Version 3.1.0-alpha01 enthält diese Commits.
API-Änderungen
- Von
paging-rxjava3
bereitgestellte Klassen sind jetzt unter dem Paketandroidx.paging.rxjava3
verfügbar, sodass sie nicht mitpaging-rxjava2
(Ifa7f6) in Konflikt stehen
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem das Paging manchmal unterschiedliche No-Op-Ereignisse an RecyclerView sendete, was dazu führen konnte, dass bestimmte Listener vorzeitig ausgelöst wurden. (Ic507f, b/182510751)
Externer Beitrag
- Dem rxjava3-Artefakt (Id1ce2, b/182497591) wurden verworfene PagedList-Compat APIs hinzugefügt.
Paging Compose Version 1.0.0
Version 1.0.0-alpha20
24. Mai 2023
androidx.paging:paging-compose:1.0.0-alpha20
wird freigegeben. Version 1.0.0-alpha20 enthält diese Commits.
Neue Funktionen
- Mit der Funktion für die Seitenerstellung können Sie jetzt eine Vorschau einer Liste gefälschter Daten anzeigen lassen. Dazu erstellen Sie ein
PagingData.from(fakeData)
und setzen diesesPagingData
in eineMutableStateFlow
ein (z. B.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Wenn Sie diese Daten als Eingabe in Ihre@Preview
verwenden, erhalten Sie durch Aufrufe voncollectAsLazyPagingItems()
eine Vorschau vonLazyPagingItems
. (I8a78d, b/194544557)
Fehlerkorrekturen
- Im Cache gespeicherte Daten von
pager.flow.cachedIn
, die inLazyPagingItems
erfasst wurden, stehen jetzt nach der Statuswiederherstellung sofort zur Verfügung, ohne dass eine asynchrone Erfassung erforderlich ist. Das bedeutet, dass die im Cache gespeicherten Daten sofort nach der Wiederherstellung des Status angezeigt werden können. (I97a60, b/177245496)
Version 1.0.0-alpha19
3. Mai 2023
androidx.paging:paging-compose:1.0.0-alpha19
wird freigegeben. Version 1.0.0-alpha19 enthält diese Commits.
Unterstützung aller Lazy Layouts
Bisher wurden beim Erstellen von Seiten für LazyListScope
benutzerdefinierte items
- und itemsIndexed
-Erweiterungen bereitgestellt. Das bedeutete, dass du diese Funktion nicht mit anderen Lazy-Layouts wie LazyVerticalGrid
, HorizontalPager
oder anderen benutzerdefinierten Lazy-Komponenten aus den Wear- und TV-Bibliotheken verwenden konnte. Die Behebung dieser Inflexibilität ist das wichtigste Update für diese Version.
Um mehr Lazy Layouts zu unterstützen, mussten wir APIs auf einer anderen Ebene entwickeln. Statt für jedes Lazy Layout eine benutzerdefinierte items
API bereitzustellen, bietet die Funktion „Seite verfassen“ jetzt etwas niedrigere Ebene für Erweiterungsmethoden auf LazyPagingItems
in itemKey
und itemContentType
. Diese APIs helfen Ihnen bei der Implementierung der key
- und contentType
-Parameter in den standardmäßigen items
-APIs, die bereits für LazyColumn
und 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 zur Verwendung der neuen APIs finden Sie in unseren Beispielen.
Durch diese Änderungen werden die LazyColumn
- und LazyRow
-Beispiele zwar um einige Zeilen länger, aber wir waren der Meinung, dass die Einheitlichkeit in allen faulen Layouts ein wichtiger Faktor für diejenigen ist, die die Funktion zum Erstellen von Seiten in Zukunft verwenden. Aus diesem Grund wurden die vorhandenen Erweiterungen von LazyListScope
eingestellt. (I0c459, I92c8f, b/276989796)
API-Änderungen
- Um die Migration zu den neuen APIs zu erleichtern, unterstützen die Erweiterungsfunktionen
items
unditemsIndexed
inLazyListScope
jetzt einencontentType
-Parameter, was die Unterstützung der neuen APIs widerspiegelt. (Ib1918, b/255283378)
Aktualisierungen von Abhängigkeiten
- Die Abhängigkeit von Compose 1.0.5 zu Compose 1.2.1 wurde aktualisiert. (Ib1918, b/255283378)
Version 1.0.0-alpha18
8. Februar 2023
androidx.paging:paging-compose:1.0.0-alpha18
wird ohne Änderungen veröffentlicht. Version 1.0.0-alpha18 enthält diese Commits.
Version 1.0.0-alpha17
24. Oktober 2022
androidx.paging:paging-compose:1.0.0-alpha17
wird freigegeben. Version 1.0.0-alpha17 enthält diese Commits.
Neue Funktionen
- Unterstützung für einen benutzerdefinierten
CoroutineContext
beim Aufrufen voncollectLazyPagingItems
hinzufügen. (I7a574, b/243182795, b/233783862)
Version 1.0.0-alpha16
10. August 2022
androidx.paging:paging-compose:1.0.0-alpha16
wird freigegeben. Version 1.0.0-alpha16 enthält diese Commits.
Neue Funktionen
- Beim Paging werden jetzt Logs über die
LazyPagingItems
-Klasse bereitgestellt, um mit PagingData erfasste Debugging-Informationen bereitzustellen. - 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 fehlende
PagingDataDiffer
-Konstruktorfehler bei Verwendung vonpaging-compose:1.0.0-alpha15
mitpaging-common:3.1.1
oder älter wurde behoben.(b/235256201,b/239868768)
Version 1.0.0-alpha15
1. Juni 2022
androidx.paging:paging-compose:1.0.0-alpha15
wird freigegeben. Version 1.0.0-alpha15 enthält diese Commits.
API-Änderungen
- Es wurden Konstruktoren für
PagingDataAdapter
undAsyncPagingDataDiffer
hinzugefügt, dieCoroutineContext
anstelle vonCoroutineDispatcher
akzeptieren. (Idc878)
Fehlerkorrekturen
- Bei
LazyPagingItems
wird die anfänglicheloadState
jetzt aufLoadState.Loading
aktualisiert. (I55043, b/224855902)
Version 1.0.0-alpha14
13. Oktober 2021
androidx.paging:paging-compose:1.0.0-alpha14
wird freigegeben. Version 1.0.0-alpha14 enthält diese Commits.
Version 1.0.0-alpha13
29. September 2021
androidx.paging:paging-compose:1.0.0-alpha13
wird freigegeben. Version 1.0.0-alpha13 enthält diese Commits.
API-Änderungen
- Die Funktion
LazyPagingItems.snapshot()
wurde durch das AttributLazyPagingItems.itemSnapshotList
(Ie2da8) ersetzt - Eingestelltes
LazyPagingItems.getAsState()
wurde entfernt (Ie65e4)
Version 1.0.0-alpha12
21. Juli 2021
androidx.paging:paging-compose:1.0.0-alpha12
wird freigegeben. Version 1.0.0-alpha12 enthält diese Commits.
API-Änderungen
items(lazyPagingItems)
unditemsIndexed(lazyPagingItems)
, die zum Verbinden von Paging mitLazyColumn/Row
verwendet 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 verworfen. Verwende stattdessenlazyPagingItems[index]
. (I086cb, b/187339372)
Version 1.0.0-alpha11
30. Juni 2021
androidx.paging:paging-compose:1.0.0-alpha11
wird freigegeben. Version 1.0.0-alpha11 enthält diese Commits.
Version 1.0.0-alpha10
2. Juni 2021
androidx.paging:paging-compose:1.0.0-alpha10
wird freigegeben. Version 1.0.0-alpha10 enthält diese Commits.
Version 1.0.0-alpha09
18. Mai 2021
androidx.paging:paging-compose:1.0.0-alpha09
wird freigegeben. Version 1.0.0-alpha09 enthält diese Commits.
Fehlerkorrekturen
- „itemCount“ und „item getter“ von LazyPagingItems sind jetzt beobachtbar, was die Verwendung mit LazyVerticalGrid ermöglicht (Ie2446, b/171872064, b/168285687).
Kompatibilität der Funktion „Compose“
androidx.paging:paging-compose:1.0.0-alpha09
ist nur mit dem Tool „Compose“ ab Version1.0.0-beta07
kompatibel.
Version 1.0.0-alpha08
24. Februar 2021
androidx.paging:paging-compose:1.0.0-alpha08
wird freigegeben. Version 1.0.0-alpha08 enthält diese Commits.
Aktualisiert für die Integration in Compose 1.0.0-beta01.
Version 1.0.0-alpha07
10. Februar 2021
androidx.paging:paging-compose:1.0.0-alpha07
wird freigegeben. Version 1.0.0-alpha07 enthält diese Commits.
Für die Einbindung in Compose alpha12 aktualisiert.
Version 1.0.0-alpha06
28. Januar 2021
androidx.paging:paging-compose:1.0.0-alpha06
wird freigegeben. 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
wird freigegeben. Version 1.0.0-alpha05 enthält diese Commits.
Aktualisiert, um von Compose 1.0.0-alpha10 abhängig zu sein.
Version 1.0.0-alpha04
16. Dezember 2020
androidx.paging:paging-compose:1.0.0-alpha04
wird freigegeben. Version 1.0.0-alpha04 enthält diese Commits.
Fehlerkorrekturen
- Die Convenience-Attribute
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
undCombinedLoadStates.append
wurden aktualisiert, sodass sie nur vonLoading
aufNotLoading
übergehen, nachdem sowohl der Vermittler- als auch der QuellladestatusNotLoading
lautet, damit das Remote-Update angewendet wurde. (I65619)
Version 1.0.0-alpha03
2. Dezember 2020
androidx.paging:paging-compose:1.0.0-alpha03
wird freigegeben. 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
wird freigegeben. Version 1.0.0-alpha02 enthält diese Commits.
API-Änderungen
.peek()
-,.snapshot()
-,.retry()
- und.refresh()
-Methoden zuLazyPagingItem
-Objekten hinzugefügt, die die gleichen Funktionen bieten wie inAsyncPagingDataDiffer
/PagingDataAdapter
(Iddfe8, b/172041660)
Version 1.0.0-alpha01
28. Oktober 2020
androidx.paging:paging-compose:1.0.0-alpha01
wird freigegeben. Version 1.0.0-alpha01 enthält diese Commits.
Neue Funktionen
Das Artefakt paging-compose
ermöglicht die Integration zwischen The Paging Library und Jetpack Compose. Ein einfaches Anwendungsbeispiel:
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
Version 3.0.1
Version 3.0.1
21. Juli 2021
androidx.paging:paging-*:3.0.1
wird freigegeben. Version 3.0.1 enthält diese Commits.
Fehlerkorrekturen
- Wenn Sie über den von
LivePagedList
oderRxPagedList
generierten Anfangswert aufPagedList.dataSource
zugreifen, 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
wird freigegeben. Version 3.0.0 enthält diese Commits.
Hauptfunktionen von Version 3.0.0
Der Großteil der vorhandenen API aus Paging 2.x.x wurde eingestellt und durch die neuen Paging 3 APIs ersetzt, sodass die folgenden Verbesserungen berücksichtigt werden:
- Erstklassiger Support für Kotlin-Koroutinen und -Ablauf
- Unterstützung bei Kündigung
- Integrierter Ladestatus und Fehlersignale
- Funktion zum Wiederholen und Aktualisieren
- Alle drei DataSource-Unterklassen wurden zu einer einheitlichen PagingSource-Klasse zusammengefasst.
- Benutzerdefinierte Seitentransformationen, einschließlich einer integrierten zum Hinzufügen von Trennzeichen
- Kopf- und Fußzeilen für Status werden geladen
Version 3.0.0-rc01
21. April 2021
androidx.paging:paging-*:3.0.0-rc01
wird freigegeben. Version 3.0.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem das Paging manchmal unterschiedliche No-Op-Ereignisse an RecyclerView sendete, 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
wird freigegeben. 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 vermeiden. Weitere Informationen finden Sie unter NullPaddingDiffing.md. (If1490, b/170027529, b/177338149)
- Die verschiedenen PagedList-Builder (alter Kompatibilitätspfad) rufen
DataSource.Factory.create()
im Hauptthread nicht mehr fälschlicherweise synchron auf, wenn.build()
aufgerufen wird. (b/182798948)
Version 3.0.0-beta02
10. März 2021
androidx.paging:paging-*:3.0.0-beta02
wird freigegeben. Version 3.0.0-beta02 enthält diese Commits.
API-Änderungen
- Rx3-Erweiterungen werden jetzt korrekt weitergegeben.
@ExperimentalCoroutinesApi
Aktivierungsanforderung. Zuvor wurden sie mit der Methode@get
gekennzeichnet, die vom Kotlin-Compiler ignoriert wird. Gründe dafür: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)
Fehlerkorrekturen
- Einschränkungen für die öffentliche Nutzung experimenteller APIs erzwingen (I6aa29, b/174531520)
- Es wurde ein Fehler behoben, der dazu führte, dass
PagingState
immernull
war, wenn Remote-Aktualisierung aufgerufen wurde. - Ein Fehler wurde behoben, bei dem leere Seiten, die von PagingSource zurückgegeben wurden, verhindern konnten, dass Paging erneut abgerufen wurde, um
prefetchDistance
zu erfüllen, wodurch das Paging hängen geblieben ist.
Version 3.0.0-beta01
10. Februar 2021
androidx.paging:paging-*:3.0.0-beta01
wird freigegeben. Version 3.0.0-beta01 enthält diese Commits.
API-Änderungen
- Die Rx2- und Rx3-Wrapper stellen jetzt die experimentelle Annotation bereit, von der sie abhängt. Wenn Sie die Rx-Compat-Wrapper in paging-rxjava2 oder Paging-rxjava3 verwenden, müssen Sie die Verwendungen jetzt mit
@OptIn(ExperimentalCoroutinesApi::class)
(Ib1f9d) annotieren.
Fehlerkorrekturen
- Es wurde behoben, dass
IndexOutOfBoundsException: Inconsistency detected
manchmal ausgegeben wurde, wennDataSource
-APIs der Version 2 über Kompatibilitätspfade verwendet wurden. - Der
isInvalid
-Aufruf während der Initialisierung vonDataSource
wird bei Verwendung über Kompatibilitätspfade jetzt korrekt bei "fetchDispatcher" und nicht im Hauptthread gestartet. Dadurch wird einIllegalStateException
aufgrund des Datenbankzugriffs auf den Hauptthread behoben, wenn diePagingSource
-Implementierung von Room verwendet wird.
Version 3.0.0-alpha13
27. Januar 2021
androidx.paging:paging-*:3.0.0-alpha13
wird freigegeben. Version 3.0.0-alpha13 enthält diese Commits.
API-Änderungen
- Die Implementierung von
PagingSource.getRefreshKey
ist nicht mehr optional. Es handelt sich jetzt um eine abstrakte Funktion ohne Standardimplementierung. Migrierende Nutzer können entweder weiterhin die Standardimplementierung zurückgeben, die einfachnull
zurückgibt.getRefreshKey()
sollte jedoch eine echte Implementierung haben, die einen Schlüssel basierend auf der aktuellen Scrollposition des Nutzers zurückgibt. So kann das Paging nach Möglichkeit weiter in der Mitte des Darstellungsbereichs überPagingState.anchorPosition
geladen werden. (I4339a) InvalidatingPagingSourceFactory
ist jetzt ein Abschlusskurs (Ia3b0a)- Konfiguration des Terminaltrennzeichens (Kopf-/Fußzeile) mit einem zusätzlichen optionalen Parameter „SeparatorType“ zulassen. Dafür gibt es zwei Optionen:
FULLY_COMPLETE
– Vorhandenes Verhalten. Warten Sie, bis sowohl PagingSource als auch RemoteMediator endOfPaginationReached markiert hat, bevor Sie Terminaltrennzeichen hinzufügen. Wenn RemoteMediator nicht verwendet wird, wird RemoteloadState ignoriert. Dies ist vor allem nützlich, wenn Sie Trennzeichen für Abschnitte nur dann anzeigen möchten, wenn der Abschnitt vollständig geladen ist, einschließlich des Abrufs aus einer Remote-Quelle, z.B. dem Netzwerk.SOURCE_COMPLETE
: Es wird nur gewartet, bis PagingSource endOfPaginationReached markiert, auch wenn RemoteMediator verwendet wird. Dadurch können Kopf- und Fußzeilen synchron mit dem anfänglichen Ladevorgang angezeigt werden, sodass Nutzer nicht scrollen müssen, um Terminaltrennzeichen zu sehen. (Ibe993, b/174700218)
Fehlerkorrekturen
- Ein seltenes Speicherleck wurde behoben, das auftrat, wenn eine PagingSource entwertet wurde, bevor PageFetcher überhaupt mit dem Laden beginnen konnte. (I9606b, b/174625633)
Version 3.0.0-alpha12
13. Januar 2021
androidx.paging:paging-*:3.0.0-alpha12
wird freigegeben. Version 3.0.0-alpha12 enthält diese Commits.
API-Änderungen
- InvalidatingPagingSourceFactory ist keine abstrakte Klasse mehr, da sie nie abstrakte Methoden hatte. (I4a8c4)
- Eine Überlastung von „.cachedIn()“ wurde hinzugefügt, die ViewModel anstelle von Lifecycle oder CoroutineScope für Java-Nutzer akzeptiert. (I97d81, b/175332619)
- Erlauben Sie Java-Aufrufern, PagingData-Transformationsvorgänge auf asynchrone Weise zu verwenden, indem sie einen Executor in Transformationsoperatorargumente akzeptieren. Bei allen „-Sync“-Transformationsoperatoren wurde das „-Sync“-Suffix entfernt. Nutzer von Kotlin-Coroutinen müssen die Erweiterung durch Aufrufen der Erweiterungsfunktion eindeutig machen, die stattdessen einen Sperren-Block akzeptiert.
Alle PagingData-Transformationsoperatoren wurden in Erweiterungen unter der statischen PagingDataTransforms-Klasse verschoben. Java-Nutzer müssen sie
über statische Hilfsprogramme aufrufen,
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 worden war.
Version 3.0.0-alpha11
16. Dezember 2020
androidx.paging:paging-*:3.0.0-alpha11
wird freigegeben. Version 3.0.0-alpha11 enthält diese Commits.
Neue Funktionen
- Die Unterstützung für den gespeicherten Status wurde für die folgenden grundlegenden Anwendungsfälle hinzugefügt (die vollständige Unterstützung, insbesondere beim mehrschichtigen Quellfall ist noch in Arbeit):
- 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 während des Vorgangs neu erstellt)
- wird gezählt, Platzhalter sind aktiviert und das Layout ist nicht versetzt.
API-Änderungen
PagingSource.getRefreshKey()
ist jetzt die stabile API (I22f6f, b/173530980)PagingSource.invalidate
ist keine offene Funktion mehr. Wenn Sie benachrichtigt werden müssen, wenn die Entwertung erfolgt, sollten Sie die Methode „register InvalidatedCallback“ aufrufen, anstatt „Entwertung“ 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 an eine nicht experimentelle öffentliche API weiterzugeben. (I9dc61, b/174531520)
- Die Convenience-Attribute
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
undCombinedLoadStates.append
wurden aktualisiert, sodass sie nur vonLoading
aufNotLoading
übergehen, nachdem sowohl der Vermittler- als auch der QuellladestatusNotLoading
lautet, damit das Remote-Update angewendet wurde. (I65619) LoadParams.pageSize wurde entfernt (bereits eingestellt). Es wird empfohlen,
LoadParams.loadSize
in Ihrer PagingSource zu verwenden.LoadParams.loadSize
ist immer gleichPagingConfig.pageSize
, mit Ausnahme des anfänglichen Ladeaufrufs, bei dem er demPagingConfig.initialLoadSize
entspricht.Wenn Sie die Datenquelle Paging2 ohne Pager oder PagedList testen, stimmt
pageSize
möglicherweise nicht mitPagingConfig.pageSize
überein, wenn Sie auchinitialLoadSize
festlegen. Wenn es für Ihre Tests wichtig ist, verwenden Sie stattdessen einen Pager/PagedList, der intern die richtige PageSize für Ihre DataSource-Lademethoden festlegt. (I98ac7, b/149157296)
Fehlerkorrekturen
- Ein Absturz aufgrund von IllegalStateException bei der Verwendung von Trennzeichen mit Einstellung von PagingConfig.maxSize wurde behoben. (I0ed33, b/174787528)
- Es wurde ein Fehler behoben, bei dem der Ladestatus für PREPEND / APPEND nicht sofort nach dem anfänglichen Laden auf
NotLoading(endOfPaginationReached = true)
aktualisiert wurde, wenn RemoteMediator festgelegt war (I8cf5a). - Es wurde ein Fehler behoben, bei dem APIs auf Vortragsseite, wie z. B. .snapshot(), .peek() usw., die vorherige (veraltete) Liste in ListUpdateCallback-Updates zurückgeben.
- Es wurde ein Fehler behoben, bei dem Trennzeichenoperatoren keine Kopf- oder Fußzeilen hinzufügten, wenn sie mit RemoteMediator verwendet wurden
- Es wurde ein Fehler behoben, bei dem LoadState-Updates zu NotLoading für RemoteMediator im Ladestatus hängen geblieben sind.
- Es wurde ein Fehler behoben, bei dem die Paging2.0-Kompatibilitäts-API,
.asPagingSourceFactory()
, dazu führen konnte, dass die unterstützendeDataSource
mit dem falschen CoroutineDispatcher initialisiert wurde. Dadurch werden ein Absturz und mögliche ANR-Fälle behoben, insbesondere wenn die aktuelle Room-Implementierung von PagingSource diesen Kompatibilitätspfad verwendet.
Version 3.0.0-alpha10
2. Dezember 2020
androidx.paging:paging-*:3.0.0-alpha10
wird freigegeben. Version 3.0.0-alpha10 enthält diese Commits.
API-Änderungen
Die verworfenen APIs
dataRefreshFlow
unddataRefreshListener
wurden entfernt, da sie durch LoadStateFlow-/Listener-Updates redundant sind. Für Migrationen lautet die Entsprechung „loadStateFlow“:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
Fehlerkorrekturen
- endOfPaginationReached für RemoteMediator
REFRESH
wird jetzt korrekt an LoadState-Updates weitergegeben und verhindert, dass Remote-APPEND
undPREPEND
ausgelöst werden. (I94a3f, b/155290248) - Wenn eine leere Liste angezeigt wird, entweder aufgrund einer leeren ersten Seite oder wegen intensiver Filterung, verhindert das nicht mehr, dass das Paging
PREPEND
- oderAPPEND
-Ladevorgänge startet. (I3e702, b/168169730) - Ein Problem wurde behoben, bei dem
getRefreshKey
nicht für nachfolgende Generationen von PagingSource aufgerufen wurde, wenn Entwertungen schnell auftreten. (I45460, b/170027530)
Externer Beitrag
- Die 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 der .insertSeparators()-Transformation werden möglicherweise nicht sofort angezeigt, wenn RemoteMediator b/172254056 verwendet wird.
- Die Verwendung von RemoteMediator kann dazu führen, dass Remote-
LoadState
hängen bleibt, wenn die Entwertung abgeschlossen wird undPagingSource.load(LoadParams.Refresh(...))
abgeschlossen ist, bevorRemoteMediator.load()
b/173717820 zurückgibt.
Version 3.0.0-alpha09
11. November 2020
androidx.paging:paging-*:3.0.0-alpha09
wird freigegeben. Version 3.0.0-alpha09 enthält diese Commits.
API-Änderungen
- Die Methoden "dataRefreshFlow" und "Listener" werden mit einer "replaceWith"-Klausel vollständig verworfen. (I6e2dd)
Fehlerkorrekturen
- Ein Fehler wurde behoben, bei dem
IllegalArgumentException
ausgegeben wurde, wenn Trennzeichen mit RemoteMediator verwendet wurden und eine Entwertung ausgelöst wurde, während ein Remote-Ladevorgang ausgelöst wurde, der „endOfPagination“ zurückgeben würde (I3a260).
Version 3.0.0-alpha08
28. Oktober 2020
androidx.paging:paging-*:3.0.0-alpha08
wird freigegeben. Version 3.0.0-alpha08 enthält diese Commits.
API-Änderungen
- Die Kotlin-/Java-Varianten von
DataSource.InvalidatedCallback
wurden kombiniert, indem SAM-Conversions in Kotlin über eine funktionale Oberfläche aktiviert wurden (verfügbar in Kotlin 1.4). Dadurch wird auch ein Fehler behoben, bei dem die Kotlin-Variante von entwertenden Callbacks nach der Transformation durch.map
oder.mapByPage
nicht aufgerufen wurde. (I1f244, b/165313046)
Fehlerkorrekturen
- Die Interaktion von Paging mit ViewPager wurde erheblich verbessert. Insbesondere wird durch das Paging ein
RemoteMediator#load
-Aufruf nicht mehr aufgrund einer Seitenentwertung abgebrochen. Außerdem wird keine Anfrage zum Anfügen/Voranstellen des Ladevorgangs mehr gestellt, 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).
- Es wurde ein Fehler behoben, bei dem
.withLoadState*
ConcatAdapter
-Hilfsprogramme aufgrund einer Benachrichtigung von RecyclerView über den Hintergrundthread abgestürzt sind (I18bb5, b/170988309). - Es wurde ein Fehler behoben, bei dem das Laden einer sehr kleinen, nicht leeren Seite manchmal verhinderte, dass der Prefetch-Ladevorgang korrekt ausgelöst wurde.Iffda3 b/169259468
Version 3.0.0-alpha07
1. Oktober 2020
androidx.paging:paging-*:3.0.0-alpha07
wird freigegeben. Version 3.0.0-alpha07 enthält diese Commits.
API-Änderungen
- Async PagingData Guava-basierte Operatoren akzeptieren jetzt einen Executor als Parameter zur Steuerung des Ausführungskontexts. (Id4372)
Fehlerkorrekturen
- Die IndexOutOfBounds-Ausnahme wurde behoben, die aufgrund einer Race-Bedingung in RemoteMediator ausgelöst wurde. (I00b7f, b/165821814)
- Es wurde eine Race-Bedingung bei der Konvertierung von DataSource -> PagingSource behoben, die dazu führen konnte, dass die resultierende PagingSource Ungültigkeitssignale aus DataSource ignorierte.
- Es wurde ein Problem in der Seitenabruflogik behoben, bei dem neue PagingSource-Generationen erst dann erfasst wurden, wenn PagingDataAdapter.refresh() aufgerufen wurde.
- Ein Problem wurde behoben, durch das die Scrollposition manchmal verloren ging, wenn eine Datenquelle in Verbindung mit RemoteMediator in eine PagingSource (z. B. die von Room erzeugte Datenquelle) konvertiert wurde.
Externer Beitrag
- Vielen Dank an @simonschiller für das Hinzufügen von RxJava2-, RxJava3- und Guava-basierten asynchronen Transformationsoperatoren für PagingData!
Version 3.0.0-alpha06
2. September 2020
androidx.paging:paging-*:3.0.0-alpha06
wird freigegeben. Version 3.0.0-alpha06 enthält diese Commits.
API-Änderungen
UnsupportedOperationException
mit klarerer Benachrichtigung über fehlende Unterstützung stabiler IDs wird jetzt bei jedemPagingDataAdapter.setHasStableIds
-Aufruf ausgegeben. (Ib3890, b/158801427)
Fehlerkorrekturen
- insertSeparators filtert leere Seiten nicht mehr heraus, sodass der Prefetch-Abstand vom Vortragenden auch dann berücksichtigt werden kann, wenn viele leere Seiten eingefügt werden. (I9cff6, b/162538908)
Version 3.0.0-alpha05
19. August 2020
androidx.paging:paging-*:3.0.0-alpha05
wird freigegeben. Version 3.0.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Beim Paging werden Seiten jetzt korrekt vorab abgerufen, selbst wenn die dargestellten Daten stark gefiltert sind.
- Die Rückgabe von
LoadResult.Error
bei einem wiederholten Ladevorgang führt nicht mehr dazu, dass der Elementzugriff fälschlicherweise einen erneuten Versuch ausgelöst hat
Externer Beitrag
- Danke an Clara F. für die Bereinigung einiger Tests! (549612)
Version 3.0.0-alpha04
5. August 2020
androidx.paging:paging-*:3.0.0-alpha04
wird freigegeben. Version 3.0.0-alpha04 enthält diese Commits.
API-Änderungen
AsyncPagingDataDiffer
undPagingDataAdapter
wurde diepeek()
API hinzugefügt, um den Zugriff auf präsentierte Daten ohne Triggerseitenaufbau zu ermöglichen. (I38898, b/159104197)PagingDataAdapter
undAsyncPagingDataDiffer
wurde einesnapshot()
API hinzugefügt, mit der die präsentierten Elemente abgerufen werden können, ohne dass ein Seitenabruf ausgelöst wird. (I566b6, b/159104197)- Ein
PagingData.from(List<T>)
-Konstruktor wurde hinzugefügt, um die Darstellung statischer Listen zu ermöglichen. Diese können mit dem gesamten PagingData-Ablauf kombiniert werden, um statische Listen in bestimmten Status anzuzeigen, z. B. vor Abschluss des ersten REFRESH-Vorgangs oder einfach zum Testen von Transformationen. (Id134d) - „dataRefresh Flow“-/Listener-APIs werden eingestellt, da sie den Status der präsentierten Elemente bei REFRESH darstellen sollen. Dank der Verbesserungen bei „loadState Flow“-/„Listener-Callback-Zeit“ und der „itemCount“-Eigenschaft ist sie jedoch redundant (Ia19f3).
- RxJava3-Kompatibilitäts-Wrapper für
PagingSource
undRemoteMediator
hinzugefügt (I49ef3, b/161480176)
Fehlerkorrekturen
PositionalDataSource
, die über dentoPagingSourceFactory
-Hilfsprogramm inPagingSource
konvertiert wurden, einschließlichPagingSource
, die von Room generiert wurden, markiert sich jetzt korrekt, um das Springen zu unterstützen. (I3e84c, b/162161201)- Es wurde ein Fehler behoben, bei dem die synchrone Variante von „submitData“ manchmal zu einem Rennen führte, das einen
ClosedSendChannelException
verursachte (I4d702, b/160192222).
Externer Beitrag
- Vielen Dank an Zac Sweers, dass Sie im Namen von Slack RxJava3-Kompatibilitäts-Wrapper hinzugefügt haben. (I49ef3, b/161480176)
Version 3.0.0-alpha03
22. Juli 2020
androidx.paging:paging-*:3.0.0-alpha03
wird freigegeben. 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() vereinfachen sollte (I8bf15).
- kotlin-Kartenfunktionsvarianten von DataSource aus Java wurden ausgeblendet, um Ambiguität zwischen Original- und Kotlin-Varianten zu beseitigen. (If7b23, b/161150011)
- Redundante APIs, die für Kotlin-Nutzer gedacht sind, wurden mit @JvmSynthetic (I56ae5) gekennzeichnet.
- Überlastungen für den Konstruktor „LoadResult.Page“, der für „itemsBefore“ und „itemAfter“ den Wert COUNT_UNDEFINED (I47849) festlegt, wurden hinzugefügt.
- Mit den bestehenden PagingData-Operatoren können Sperrmethoden jetzt akzeptiert werden. Außerdem wurden für Java-Nutzer neue nicht aufhängende Operatoren vom Typ „mapSync“, „FlatMapSync“ und „filterSync“ eingeführt. Die vorhandenen Transformationsmethoden wurden in Erweiterungsfunktionen verschoben, sodass Kotlin-Nutzer sie jetzt importieren müssen. (I34239, b/159983232)
Fehlerkorrekturen
- In den PagingSources „Room“ und „PositionalDataSource“ wird jetzt auf der ersten Seite ein vorangestelltes Trennzeichen angezeigt, sodass der Nutzer nicht scrollen muss, um es einzublenden. (I6f747, b/160257628)
- Elementzugriffe auf Platzhalter lösen jetzt das Laden von PagingSource korrekt aus, bis eine Seite zurückgegeben wird, die den angeforderten Index erfüllt, nachdem sie durch PagingData.filter() transformiert wurde (I95625, b/158763195).
- Es wurde ein Fehler behoben, bei dem beim Scrollen nach „PagingSource“ ein Fehler zurückgegeben wurde, wodurch die Wiederholung von PagingDataAdapter.retry() verhindert wurde. (I1084f, b/160194384)
- Es wurde ein Problem behoben, bei dem beim Zugriff auf Elemente nach dem Löschen einer Seite Seiten möglicherweise nicht geladen werden, obwohl der Elementzugriff innerhalb von „prefetchDistance“ erfolgte (Ie95ae, b/160038730)
- Durch das Festlegen von PagingConfig.maxSize 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
wird freigegeben. Version 3.0.0-alpha02 enthält diese Commits.
API-Änderungen
- Für den Konstruktor von
PagingConfig
wurden Überlastungen mit allgemeinen Standardwerten hinzugefügt (I39c50, b/158576040). - Zusätzliche Überlastungen für Konstruktoren von
PagingDataAdapter
undAsyncPagingDataDiffer
mit allgemeinen Standardwerten (Ie91f5) - Die Adapter-APIs
dataRefreshFlow
unddataRefreshListener
übergeben jetzt einen booleschen Wert, um zu signalisieren, ob einPagingData
leer ist (I6e37e, b/159054196). - RxJava und Guava APIs für RemoteMediator wurden hinzugefügt – RxRemoteMediator und ListenableFutureRemoteMediator
- PagingState wurden Hilfsprogramme für den allgemeinen Zugriff auf Elemente wie
isEmpty()
undfirstItemOrNull()
hinzugefügt (I3b5b6, b/158892717).
Fehlerkorrekturen
- Pager prüft jetzt auf die Wiederverwendung von PagingSource in der Fabrik, um eine versehentliche Wiederverwendung von ungültigen PagingSources zu verhindern, die zu einem unklaren Fehler geführt hat (I99809, b/158486430).
- Fehler von RemoteMediator REFRESH verhindern nicht mehr das Laden von PagingSource (I38b1b, b/158892717).
- Die nicht gesperrte Version von
submitData
verursacht keinen Absturz mehr aufgrund der gleichzeitigen Erfassung auf mehrerenPagingData
, wenn sie nach der anhaltenden Version vonsubmitData
aufgerufen wird. (I26358, b/158048877) - Behebung der Ausnahme „Nicht zweimal vom Pager nicht möglich“, 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
wird freigegeben. Version 3.0.0-alpha01 enthält diese Commits.
Die Paging Library wurde auf Version 3.0 aktualisiert, um verschiedene wichtige neue Funktionen zu ermöglichen.
Neue Funktionen in Version 3.0
- Erstklassige Unterstützung für Kotlin-Koroutinen und -Ablauf
- Unterstützung für asynchrones Laden mit Aussperrfunktionen für Coroutinen, RxJava Single- oder Guava ListenableFuture-Primitive.
- Integrierte Ladestatus- und Fehlersignale für responsives UI-Design, einschließlich Wiederholungs- und Aktualisierungsfunktion.
- Verbesserungen auf der Repository-Ebene
- Vereinfachte Schnittstelle für Datenquellen
- Vereinfachter Seitenumbruch für Netzwerk und Datenbank
- Support bei Kündigung
- Verbesserungen an der Darstellungsebene
Bekannte Probleme
- Paging 3 Javadocs ist 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
wird freigegeben. Version 2.1.2 enthält diese Commits gegenüber Version 2.1.0.
Fehlerkorrekturen
- In seltenen Fällen beim Konvertieren einer Position während der Entwertung wurde ein Fehler für
IndexOutOfBoundsException
behoben.
Release-Problem
Die Auslagerungsversion
2.1.1
wurde in einem falsch konfigurierten Zweig fälschlicherweise freigegeben, wodurch teilweise implementierte APIs und Funktionen verfügbar gemacht werden, die in einem zukünftigen Release geplant sind.Die Paginierung
2.1.2
enthält die fokussierte Korrektur, die ursprünglich in 2.1.1 veröffentlicht wurde, aber dieses Mal korrekt über dem Release 2.1.0 ausgewählt wurde. Es wird dringend empfohlen, ein Upgrade auf diese Version durchzuführen, wenn Sie derzeit Version 2.1.1 verwenden.
Version 2.1.1
Version 2.1.1
18. Dezember 2019
androidx.paging:paging-*:2.1.1
wird freigegeben. Version 2.1.1 enthält diese Commits.
Fehlerkorrekturen
- Zusammenhängende anfängliche Ladevorgänge aus PositionalDataSources sind jetzt auf den letzten Zugriff ausgerichtet, wenn Platzhalter deaktiviert sind
Version 2.1.0
Version 2.1.0
25. Januar 2019
Die Paginierung 2.1.0
wird ohne Änderungen gegenüber 2.1.0-rc01
freigegeben.
Version 2.1.0-rc01
6. Dezember 2018
Die Paginierung 2.1.0-rc01
wird ohne Änderungen gegenüber 2.1.0-beta01
freigegeben.
Version 2.1.0-beta01
1. November 2018
Die Paginierung 2.1.0-beta01
wird ohne Änderungen gegenüber 2.1.0-alpha01
freigegeben.
Version 2.1.0-alpha01
12. Oktober 2018
Die Paginierung „2.1.0-alpha01
“ wurde im Wesentlichen in zweierlei Hinsicht ergänzt – das Entfernen von Seiten und KTX-Erweiterungsbibliotheken für jedes Artefakt – sowie mehrere weitere API-Änderungen und Fehlerkorrekturen.
API-Änderungen
PagedList.Config.Builder.setMaxSize()
zur Begrenzung der Anzahl der im Speicher geladenen Elemente wurde hinzugefügt.androidx.paging.Config()
wurde als Kotlin-Alternative fürPagedList.Config.Builder
hinzugefügt.androidx.paging.PagedList()
wurde als Kotlin-Alternative fürPagedList.Builder
hinzugefügt.DataSourceFactory.toLiveData()
wurde als Kotlin-Alternative fürLivePagedListBuilder
hinzugefügt.DataSourceFactory.toObservable()
undtoFlowable()
wurden als Kotlin-Alternativen fürRxPagedListBuilder
hinzugefügt.AsyncPagedListDiffer.addPagedListListener()
zum Anhören hinzugefügt, wenn PagedList ausgetauscht wird. b/111698609PagedListAdapter.onCurrentListChanged()
Variante wurde hinzugefügt, die die alte und neue Liste übergibt. 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 Auslagerungsliste nach dem Unterschied angezeigt wird. So können Sie einen PagedList-Austausch mit anderen UI-Updates synchronisieren. b/73781068 PagedList.getLoadedCount()
wurde hinzugefügt, um Sie darüber zu informieren, wie viele Elemente sich im Arbeitsspeicher befinden. Beachten Sie, dass der Rückgabewert immer.size()
ist, wenn Platzhalter deaktiviert sind.
Fehlerkorrekturen
- Eine Race-Bedingung bei der Wiederverwendung von Listen wurde behoben b/111591017
PagedList.loadAround()
gibt jetztIndexOutOfBoundsException
aus, wenn der Index ungültig ist. Zuvor konnte es mit einer unklaren anderen Ausnahme abstürzen.- Ein Fall wurde behoben, bei dem eine extrem kleine anfängliche Ladegröße zusammen mit unveränderten Daten dazu führte, dass b/113122599 nicht mehr geladen wurde.
Version 2.0.0
Version 2.0.0
1. Oktober 2018
Die Paginierung 2.0.0
wurde mit einem einzelnen Fehler behoben.
Fehlerkorrekturen
- Ein Absturz wurde behoben, der bei sehr schnellem Scrollen mit
PositionalDataSource
und Platzhaltern b/114635383 auftreten konnte.
Version 2.0.0-beta01
2. Juli 2018
Fehlerkorrekturen
- Problem behoben, bei dem Inhalte in einigen vorangehenden Fällen nicht mehr angezeigt wurden (Platzhalter deaktiviert, PositionalDataSource) b/80149146
- (Bereits in
1.0.1
veröffentlicht) Behebung von Abstürzen, bei denenPagedListAdapter
undAsyncPagedListDiffer
Verschiebungsereignisse nicht signalisieren konnten. b/110711937
Abhängigkeiten vor AndroidX
Beziehen Sie für die folgenden Vorversionen von Paging die folgenden Abhängigkeiten ein:
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
wurde mit einer einzelnen Fehlerkorrektur in runtime
veröffentlicht. Aus Gründen der Stabilität empfehlen wir dringend, 1.0.1
zu verwenden. Das Paging in RxJava2 1.0.1
wurde ebenfalls veröffentlicht und ist mit 1.0.0-rc1
identisch.
Fehlerkorrekturen
- Es wurden Abstürze behoben, bei denen
PagedListAdapter
undAsyncPagedListDiffer
Verschiebungsereignisse nicht signalisieren konnten. b/110711937
RxJava2 Version 1.0.0
RxJava2 Version 1.0.0-rc1
16. Mai 2018
Das Paging in RxJava2 1.0.0-rc1
wird zum Releasekandidat ohne Änderungen im Vergleich zur ursprünglichen Alphaversion verschoben.
Version 1.0.0
Version 1.0.0-rc1
19. April 2018 Kandidaten für das Paging Release
Es gibt keine weiteren bekannten Probleme oder neuen Funktionen, die für den Paging-1.0.0
-Release geplant sind. Aktualisiere deine Projekte auf 1.0.0-rc1
und hilf uns dabei, Tests durchzuführen, damit wir eine solide 1.0.0
liefern können.
In diesem Release wurden keine Änderungen vorgenommen. Er entspricht der 1.0.0-beta1
.
Version 1.0.0-beta1
5. April 2018
Das Paging befindet sich für kurze Zeit in der Betaphase, bevor es zur Freigabe eines Kandidaten läuft.
Wir planen keine weiteren API-Änderungen für Paging 1.0
und die Anforderungen an API-Änderungen sind sehr hoch.
Die Alpha RxJava2-Unterstützung für Paging wird als separates optionales Modul (android.arch.paging:rxjava2:1.0.0-alpha1
) veröffentlicht und vorübergehend separat versioniert, bis sich stabilisiert hat.
Diese neue Bibliothek bietet eine RxJava2-Alternative zu LivePagedListBuilder
, mit der Observable
s und Flowable
s erstellt werden können. Dabei werden Scheduler
s anstelle von Executor
s 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
RxPagedListBuilder
wird über das neueandroid.arch.paging:rxjava2
-Artefakt hinzugefügt.
API-Änderungen
API-Änderungen, um die Rolle von Executors in Buildern zu verdeutlichen:
setBackgroundThreadExecutor()
wurde insetFetchExecutor()
umbenannt (inPagedList.Builder
undLivePagedListBuilder
)setMainThreadExecutor()
wurde inPagedList.Builder
insetNotifyExecutor()
umbenannt.
Der Status von
PagedList.mCallbacks
Mitglied wurde als privat gekennzeichnet.
Fehlerkorrekturen
LivePagedListBuilder
löst den erstenPagedList
-Ladevorgang im angegebenen Executor anstelle des E/A-Thread-Pools von Arch-Komponenten aus.Behebung des Verhaltens bei der Entwertung in internen
DataSource
-Wrappern (wird verwendet, umDataSource.map
sowie das Laden vonPositionalDataSource
ohne Platzhalter zu implementieren) b/77237534
Version 1.0.0-alpha7
21. März 2018
Die Paginierung 1.0.0-alpha7
wird zusammen mit den Lebenszyklen 1.1.1
freigegeben. Da das Auslagerungs-Alpha7 von der Verschiebung der oben erwähnten Function
-Klasse abhängt, müssen Sie die lifecycle:runtime
-Abhängigkeit auf android.arch.lifecycle:runtime:1.1.1
aktualisieren.
Die Paginierung alpha7
ist voraussichtlich die letzte Veröffentlichung vor der Betaversion der Paginierung.
API-Änderungen
DataSource.LoadParams
-Objekte haben jetzt einen öffentlichen Konstruktor undDataSource.LoadCallback
-Objekte sind jetzt abstrakt. So können Sie einenDataSource
umschließen oder einDataSource
direkt mit einem simulierten Callback testen. b/72600421- Mapper für DataSource und DataSource.Factory
- Mit
map(Function<IN,OUT>)
können Sie Ergebnisse, die von einemDataSource
geladen wurden, transformieren, zusammenfassen oder gestalten. mapByPage(<List<IN>,List<OUT>>)
ermöglicht dasselbe für die Batchverarbeitung (z.B. wenn aus SQL geladene Elemente zusätzlich eine separate Datenbank abfragen müssen, was als Batch ausgeführt werden kann).
- Mit
PagedList#getDataSource()
wird als praktische Methode hinzugefügt: b/72611341- Alle verworfenen Klassen wurden aus der API entfernt, einschließlich der Reste des
recyclerview.extensions
-Pakets und derLivePagedListProvider
. DataSource.Factory
wird von einer Schnittstelle in eine abstrakte Klasse geändert, um Kartenfunktionen zu aktivieren.
Fehlerkorrekturen
- Die Builder wurden in endgültig geändert. b/70848565
- Die Implementierung von Room
DataSource
wurde korrigiert, sodass Abfragen mit mehreren Tabellen verarbeitet werden können. Diese Fehlerkorrektur ist in Room 1.1.0-beta1 enthalten (siehe oben). - Es wurde ein Fehler behoben, bei dem
BoundaryCallback.onItemAtEndLoaded
fürPositionalDataSource
nicht aufgerufen wurde, wenn Platzhalter aktiviert sind und die Gesamtgröße ein exaktes Vielfaches der Seitengröße ist.
Version 1.0.0-alpha5
22. Januar 2018
Fehlerkorrekturen
- Probleme mit dem Laden von Seiten bei deaktivierten Platzhaltern beheben b/70573345
- Zusätzliches Logging zum Aufspüren des Fehlers vom Typ „geschuldet“ b/70360195 (und spekulative raumseitige Korrektur)
- Fehlerbehebungen für Javadoc-Beispielcode b/70411933, b/71467637