Paging
In dieser Tabelle sind alle Artefakte in der Gruppe androidx.paging
aufgeführt.
Artefakt | Stabile Version | Releasekandidat | Beta-Ausgabe | Alpharelease |
---|---|---|---|---|
paging-* | 3.3.6 | - | - | 3.4.0-alpha01 |
paging-compose | 3.3.6 | - | - | 3.4.0-alpha01 |
Abhängigkeiten deklarieren
Wenn Sie eine Abhängigkeit von Paging hinzufügen möchten, müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.
Fügen Sie der Datei build.gradle
für Ihre App oder Ihr Modul die Abhängigkeiten für die benötigten Artefakte hinzu:
Groovy
dependencies { def paging_version = "3.3.6" implementation "androidx.paging:paging-runtime:$paging_version" // alternatively - without Android dependencies for tests testImplementation "androidx.paging:paging-common:$paging_version" // optional - RxJava2 support implementation "androidx.paging:paging-rxjava2:$paging_version" // optional - RxJava3 support implementation "androidx.paging:paging-rxjava3:$paging_version" // optional - Guava ListenableFuture support implementation "androidx.paging:paging-guava:$paging_version" // optional - Jetpack Compose integration implementation "androidx.paging:paging-compose:3.4.0-alpha01" }
Kotlin
dependencies { val paging_version = "3.3.6" implementation("androidx.paging:paging-runtime:$paging_version") // alternatively - without Android dependencies for tests testImplementation("androidx.paging:paging-common:$paging_version") // optional - RxJava2 support implementation("androidx.paging:paging-rxjava2:$paging_version") // optional - RxJava3 support implementation("androidx.paging:paging-rxjava3:$paging_version") // optional - Guava ListenableFuture support implementation("androidx.paging:paging-guava:$paging_version") // optional - Jetpack Compose integration implementation("androidx.paging:paging-compose:3.4.0-alpha01") }
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. Lassen Sie es 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 ein neues erstellen. Sie können für ein vorhandenes Problem abstimmen, indem Sie auf die Schaltfläche mit dem Stern klicken.
Weitere Informationen finden Sie in der Dokumentation zur Problemverfolgung.
Version 3.4
Version 3.4.0-alpha01
2. Juli 2025
androidx.paging:paging-*:3.4.0-alpha01
wird veröffentlicht. Version 3.4.0-alpha01 enthält diese Commits.
Neue Funktionen
- Paging hat die folgenden KMP-Ziele hinzugefügt: watchos, tvos, mingwX64, watchosDeviceArm64 und linuxArm64. (I237dd, Ia62b3, b/368046982, Icf15d, b/364652024, I139d3, b/338268719)
Fehlerkorrekturen
- Bei Android-Unittests, die Paging 3.3 oder höher verwenden, wird nicht mehr die Ausnahme
PagingLogger
ausgelöst (Ia9400, b/331684448). - Ein Fehler wurde behoben, bei dem
RecyclerView
den FehlerIndexOutOfBoundsException
ausgibt, wenn der Nutzer scrollt, währendRecyclerView
aktualisiert wird (Id1f16, b/381024738). - Ein Fehler wurde behoben, bei dem durch Paging keine weiteren Ladevorgänge ausgelöst werden konnten, wenn die Seite beim Scrollen aktualisiert wurde. (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
wird veröffentlicht. Version 3.3.6 enthält diese Commits.
Fehlerkorrekturen
- Aktualisierungs- und Wiederholungssignale, die während einer ersten Aktualisierung gesendet werden, werden jetzt gespeichert und automatisch noch einmal gesendet, sobald der Paging-Presenter bereit ist.
Externe Beiträge
Version 3.3.5
11. Dezember 2024
androidx.paging:paging-*:3.3.5
wird veröffentlicht. Version 3.3.5 enthält diese Commits.
Fehlerkorrekturen
- Fehler behoben, bei dem
RecyclerView
den FehlerIndexOutOfBoundsException
ausgibt, wenn der Nutzer scrollt, währendRecyclerView
aktualisiert wird. (Id1f16, b/381024738)
Version 3.3.4
13. November 2024
androidx.paging:paging-*:3.3.4
wird veröffentlicht. Version 3.3.4 enthält diese Commits.
Fehlerkorrekturen
- Bei Android-Einheitentests, in denen Paging 3.3 oder höher verwendet wird, wird kein Fehler wie
Method isLoggable in android.util.Log not mocked
mehr ausgegeben. (Ia9400, b/331684448)
Version 3.3.2
7. August 2024
androidx.paging:paging-*:3.3.2
wird veröffentlicht. Version 3.3.2 enthält diese Commits.
Neue Funktionen
paging-common
undpaging-testing
haben neue Kotlin Multiplatform-Ziele hinzugefügt:watchos
,tvos
undlinuxArm64
(90c9768), (53e0eca)
Version 3.3.1
24. Juli 2024
androidx.paging:paging-*:3.3.1
wird veröffentlicht. Version 3.3.1 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem mit
RecyclerView
verwendeteAsyncPagingDataDiffer
oder darauf basierende APIs wiePagingDataAdapter
beim Scrollen keine weiteren Ladevorgänge auslösen konnten, wenn die zugrunde liegende Datenquelle aktualisiert wurde. (I60ca5, b/352586078) - Ein Absturz, der auftritt, wenn Elemente aus der zugrunde liegenden Datenquelle entfernt werden, während ein
RecyclerView
mit einemPagingDataAdapter
oderAsyncPagingDataDiffer
gescrollt wird, wurde behoben. (I8c65a, b/347649763)
Version 3.3.0
14. Mai 2024
androidx.paging:paging-*:3.3.0
wird veröffentlicht. Version 3.3.0 enthält diese Commits.
Wichtige Änderungen seit Version 3.2.0
PagingDataPresenter
ist jetzt eine öffentliche Klasse. Multiplattform-Präsentatoren können jetzt aufPagingDataPresenter
aufgebaut werden, ohne dass interne Paging-APIs oderAsyncPagingDataDiffer
vonpaging-runtime
erforderlich sind.- In
hasError
undisIdle
wurden die neuen HilfsmethodenLoadStates
undCombinedLoadStates
hinzugefügt, um zu prüfen, ob sichLoadStates
im Status „Error“ (Fehler) oder „NotLoading
“ befindet. Außerdem wurde eine neueawaitNotLoading()
-Kotlin-Erweiterungsmethode fürFlow<CombinedLoadStates>
hinzugefügt, die wartet, bis ein Ladevorgang entweder den StatusNotLoading
oder „Fehler“ erreicht hat. PagingData.empty()
löst jetzt standardmäßigNotLoading
-Zustände aus, sofern keine benutzerdefiniertenLoadStates
an den Konstruktor übergeben werden. Das weicht vom bisherigen Verhalten ab, bei demLoadStates
nicht gesendet wird, wenn es anPagingDataAdapter
übermittelt wird, oder Ladestatus gesendet werden, wenn sie alsLazyPagingItems
erfasst werden. Wenn sie alsLazyPagingItems
erfasst werden, wird jetzt auch sofort nach der ersten Erstellung eine leere Liste angezeigt.
Kompatibilität mit Kotlin Multiplatform
Paging enthält jetzt Artefakte, die mit Kotlin Multiplatform kompatibel sind. Das ist vor allem auf die Upstream-Arbeit des multiplatform-paging-Projekts von CashApp zurückzuführen.
paging-common
hat alle Paging 3-APIs zucommon
verschoben und ist jetzt neben Android auch mit JVM und iOS kompatibel.- Der Code von
paging-testing
wurde zucommon
verschoben und ist jetzt neben Android auch mit JVM und iOS kompatibel. paging-compose
hat seinen Code zucommon
verschoben und liefert ein Android-Artefakt, das der Multiplattform-Unterstützung vonandroidx.compose
entspricht.paging-runtime
,paging-guava
,paging-rxjava2
undpaging-rxjava3
bleiben nur für Android verfügbar.
Version 3.3.0-rc01
1. Mai 2024
androidx.paging:paging-*:3.3.0-rc01
wird ohne Änderungen in Paging 3.3.0-beta01 veröffentlicht. Version 3.3.0-rc01 enthält diese Commits.
Version 3.3.0-beta01
3. April 2024
androidx.paging:paging-*:3.3.0-beta01
wird ohne nennenswerte Änderungen veröffentlicht. Version 3.3.0-beta01 enthält diese Commits.
Version 3.3.0-alpha05
20. März 2024
androidx.paging:paging-*:3.3.0-alpha05
wird veröffentlicht. Version 3.3.0-alpha05 enthält diese Commits.
API-Änderungen
- Für die Paginierung wird jetzt die AndroidX-Annotation
@MainThread
für gemeinsamen Code verwendet. (I78f0d, b/327682438)
Version 3.3.0-alpha04
6. März 2024
androidx.paging:paging-*:3.3.0-alpha04
wird veröffentlicht. Version 3.3.0-alpha04 enthält diese Commits.
Fehlerkorrekturen
- Es wurden kleinere Dokumentationsfehler im Zusammenhang mit der Hinzufügung der Kotlin-Multiplattform-Kompatibilität behoben. (aosp/2950785)
Version 3.3.0-alpha03
7. Februar 2024
androidx.paging:paging-*:3.3.0-alpha03
wird veröffentlicht. Version 3.3.0-alpha03 enthält diese Commits.
Neue Funktionen
PagingDataPresenter
ist jetzt eine öffentliche Klasse. Multiplattform-Präsentatoren können jetzt aufPagingDataPresenter
aufgebaut werden, ohne dass interne Paging-APIs oderAsyncPagingDataDiffer
vonpaging-runtime
erforderlich sind. (Id1f74, b/315214786)- Es wurden neue Hilfsmethoden
LoadStates
undCombinedLoadStates
hinzugefügt, um zu prüfen, ob sichLoadStates
im Status „Error“ (Fehler) oder „NotLoading
“ befindet. Außerdem wurde eine neue API hinzugefügt, die auf eineLoadStateFlow
wartet, bis sich eine Last entweder im StatusNotLoading
oder im Fehlerstatus befindet. (Id6c67)
Verhaltensänderung
PagingData.empty()
löst jetzt standardmäßigNotLoading
-Zustände aus, sofern keine benutzerdefiniertenLoadStates
an den Konstruktor übergeben werden. Das weicht vom bisherigen Verhalten ab, bei demLoadStates
nicht gesendet wird, wenn es anPagingDataAdapter
übermittelt wird, oder Ladestatus gesendet werden, wenn sie alsLazyPagingItems
erfasst werden. Wenn sie alsLazyPagingItems
erfasst 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
wird veröffentlicht. Version 3.3.0-alpha02 enthält diese Commits.
Kompatibilität mit Kotlin Multiplatform
Paging enthält jetzt Artefakte, die mit Kotlin Multiplatform kompatibel sind. Das ist vor allem auf die Upstream-Arbeit des multiplatform-paging-Projekts von CashApp zurückzuführen. So können wir verhindern, dass sich die beiden Repositories voneinander entfernen, und sie kompatibel halten.
paging-common
hat alle Paging 3-APIs zucommon
verschoben und ist jetzt neben Android auch mit JVM und iOS kompatibel.- Der Code von
paging-testing
wurde zucommon
verschoben und ist jetzt neben Android auch mit JVM und iOS kompatibel. paging-compose
hat seinen Code zucommon
verschoben und liefert ein Android-Artefakt, das der Multiplattform-Unterstützung vonandroidx.compose
entspricht.paging-runtime
,paging-guava
,paging-rxjava2
undpaging-rxjava3
bleiben 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).
Externe Beiträge
- 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
wird veröffentlicht. Version 3.2.1 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem die
asSnapshot()
API des Paging-Testartefakts hängen blieb, wenn ein mitPagingData.from(List)
erstellter Flow übergeben wurde, daasSnapshot()
keine Informationen darüber hatte, wann das Laden abgeschlossen war (im Gegensatz zurPagingData.from(List, LoadStates)
-Überladung). Diese Problemumgehung funktioniert nur für abschließbare Flows (z.B.flowOf(PagingData.from(...))
). Bei nicht abschließbaren Flows (z.B.MutableStateFlow
, verwenden Sie diePagingData.from
-Überladung, dieLoadStates
bereitstellt. (I502c3) - Paging Compose verwendet jetzt intern
AndroidUiDispatcher.Main
, um dafür zu sorgen, dass neue Daten im selben Frame wie der Abschluss des Ladevorgangs verfügbar sind. (Ia55af)
Version 3.2.0
26. Juli 2023
androidx.paging:paging-*:3.2.0
wird veröffentlicht. Version 3.2.0 enthält diese Commits.
Wichtige Änderungen seit Version 3.1.0
- Paging Compose hat die API-Stabilität erreicht und wurde wieder in den Rest von Paging zusammengeführt. Die Version entspricht jetzt allen anderen Paging-Artefakten. Änderungen seit Version 3.1.0:
- Unterstützung für die Vorschau einer Liste von Falschdaten durch Erstellen eines
PagingData.from(fakeData)
und Umschließen diesesPagingData
in einemMutableStateFlow
(z.B.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Übergeben Sie diesen Flow als Empfänger fürcollectAsLazyPagingItems()
an@Preview
-Composable-Funktionen, um eine Vorschau zu erstellen. - Unterstützung für alle Lazy-Layouts wie
LazyVerticalGrid
undHorizontalPager
sowie benutzerdefinierte Lazy-Komponenten aus Wear- und TV-Bibliotheken. Dies wurde durch neueLazyPagingItems
-Erweiterungsmethoden auf niedrigerer EbeneitemKey
unditemContentType
erreicht. So können Sie die Parameterkey
undcontentType
in den Standard-items
-APIs implementieren, die bereits fürLazyColumn
,LazyVerticalGrid
sowie deren Entsprechungen in APIs wieHorizontalPager
vorhanden sind. items(lazyPagingItems)
unditemsIndexed(lazyPagingItems)
, die nurLazyListScope
unterstützen, wurden eingestellt.
- Unterstützung für die Vorschau einer Liste von Falschdaten durch Erstellen eines
- Neues
paging-testing
-Artefakt mit APIs, die für Unit-Tests der einzelnen Ebenen Ihrer App und ihrer Integration mit Paging in Isolation entwickelt wurden. Dazu gehören beispielsweise- Die Klasse
TestPager
ermöglicht es Ihnen, das Verhalten Ihrer eigenen benutzerdefiniertenPagingSource
-Implementierung unabhängig vom Pager und der tatsächlichen Benutzeroberfläche zu validieren. -
asPagingSourceFactory
-APIs zum Transformieren einesFlow<List<Value>>
oder einer statischenList<Value>
in einPagingSourceFactory
, das in Tests an einen Pager übergeben werden kann asSnapshot
Kotlin-Erweiterung fürFlow<PagingData<Value>>
, dieFlow<PagingData<Value>>
in eine direkteList<Value>
übersetzt. MitasSnapshot lambda
können Sie die Benutzeroberfläche Ihrer App über APIs wiescrollTo
oderappendScrollWhile
simulieren, um den Snapshot der Daten an einem beliebigen Punkt in Ihren paginierten Daten zu überprüfen.
- Die Klasse
- Es wurden Standardlogs hinzugefügt, um Paging-Debugging-Informationen auf zwei Ebenen verfügbar zu machen:
VERBOSE
undDEBUG
. Die Logs können mit dem Befehladb shell setprop log.tag.Paging [DEBUG|VERBOSE]
aktiviert werden. Dies gilt sowohl für die Paginierung mit Ansichten als auch für die Paginierung mit Compose. - Es wurden Konstruktoren für
PagingDataAdapter
undAsyncPagingDataDiffer
hinzugefügt, dieCoroutineContext
anstelle vonCoroutineDispatcher
akzeptieren. - Es wurde eine neue funktionale Schnittstelle
PagingSourceFactory
hinzugefü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
wird veröffentlicht. Version 3.2.0-rc01 enthält diese Commits.
Externe Beiträge
- Vielen Dank an Veyndan für die Unterstützung bei der Abkehr von Android-/JVM-Spezifika für Paging. (#553, #554, #555, #559)
Version 3.2.0-beta01
7. Juni 2023
androidx.paging:paging-*:3.2.0-beta01
wird veröffentlicht. Version 3.2.0-beta01 enthält diese Commits.
Paging Compose
- Paging Compose hat offiziell API-Stabilität erreicht. Die Version wurde daher von
1.0.0-alpha20
aktualisiert, damit sie der Version aller anderen Paging-Artefakte entspricht.
API-Änderungen
- Die eingestellten 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
wird veröffentlicht. Version 3.2.0-alpha06 enthält diese Commits.
Neue Funktionen
- Es wurde eine neue funktionale Schnittstelle
PagingSourceFactory
hinzugefügt, die eine explizitere API-Oberfläche als die vorhandenen() -> PagingSource
-Lambdas bietet. Mit dieser Factory kann einePager
instanziiert werden. (I33165, b/280655188) - Die neue
paging-testing
API vonList<Value>.asPagingSourceFactory()
wurde hinzugefügt, um einePagingSourceFactory
abzurufen, die 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
@VisibleForTesting
annotiert, um sicherzustellen, dass diese APIs nur in Tests verwendet werden. (I7db6e) - Für die
asSnapshot
API muss keinCoroutineScope
mehr übergeben werden. Standardmäßig wird jetzt der Kontext verwendet, der vom übergeordneten Bereich übernommen wurde. (Id0a78, b/282240990) - Die Parameter des
TestPager
-Konstruktors wurden neu angeordnet, um intuitiv der Reihenfolge der echtenPager
-Konstruktorparameter zu entsprechen (I6185a). - Die Verwendung des Lambda-Typs
() -> PagingSource<Key, Value>
für das Paging-Testing wurde zu TypPagingSourceFactory<Key, Value>
migriert. (I4a950, b/280655188)
Geändertes Verhalten
- Der Hauptdispatcher ist nicht mehr erforderlich, um
asSnapshot
-Paging-Tests auszuführen. Wenn Sie diese Einstellung festlegen, ändert sich das Testverhalten nicht mehr. (Ie56ea)
Version 3.2.0-alpha05
3. Mai 2023
androidx.paging:paging-*:3.2.0-alpha05
wird veröffentlicht. Version 3.2.0-alpha05 enthält diese Commits.
API-Änderungen
- In der Paging Testing API von
asSnapshot
wird der ParameterloadOperations
jetzt standardmäßig auf eine leere Lambda-Funktion gesetzt. So kannasSnapshot
aufgerufen 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 einFlow
handelt, die eine wiederverwendbare Factory zum Generieren vonPagingSource
-Instanzen zurückgibt. (I5ff4f, I705b5) - Die Dokumentation zum
LoadResult.Page
-Konstruktor wurde aktualisiert, um klarzustellen, dassitemsBefore
unditemsAfter
überschrieben werden müssen, um Sprünge zu unterstützen. (Ied354)
Externe Beiträge
- Vielen Dank an Veyndan für die Unterstützung bei der Abkehr von Android-/JVM-Spezifika für Paging. (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, #493)
Version 3.2.0-alpha04
8. Februar 2023
androidx.paging:paging-*:3.2.0-alpha04
wird veröffentlicht. Version 3.2.0-alpha04 enthält diese Commits.
Paging-Tests
- Das
paging-testing
-Artefakt enthält jetzt eineasPagingSourceFactory
-Methode zum Erstellen einespagingSourceFactory
aus einemFlow<List<Value>>
, das an einen Pager übergeben werden soll. JedesList<Value>>
, das vom Flow ausgegeben wird, stellt eine Generierung von paginierten Daten dar. So können beispielsweise Paging-Tests fürPagingData
-Transformationen durchgeführt werden, indem eine Datenquelle für den Pager simuliert wird, aus der Daten abgerufen werden können. (I6f230, b/235528239) Das
paging-testing
-Artefakt wurde um neue APIs erweitert, mit denen sich die Daten in einemFlow<PagingData<T>>
überprüfen lassen. Dies kann beispielsweise verwendet werden, um die Ausgabe einerFlow<PagingData<T>>
aus der ViewModel-Ebene zu bestätigen.Dies erfolgt über die
asSnapshot
-Kotlin-Erweiterung fürFlow<PagingData<Value>>
, dieFlow<PagingData<Value>>
in ein direktesList<Value>
übersetzt. Mit derasSnapshot
-Lambdafunktion können Sie die Benutzeroberfläche Ihrer App über APIs wiescrollTo
oderappendScrollWhile
auf wiederholbare und konsistente Weise nachbilden, sodass Sie den Snapshot der Daten an jedem Punkt in Ihrem Satz von paginierten Daten überprüfen können.// Create your ViewModel instance val viewModel = … // Get the Flow of PagingData from the ViewModel val data< Flow<PagingData<String>> = viewModel.data val snapshot: List<String> = data.asSnapshot { // Each operation inside the lambda waits for the data to settle before continuing scrollTo(index = 50) // While you can’t view the items within the asSnapshot call, // you can continuously scroll in a direction while some condition is true // i.e., in this case until you hit a placeholder item appendScrollWhile { item: String -> item != “Header 1” } } // With the asSnapshot complete, you can now verify that the snapshot // has the expected values
asSnapshot
ist einesuspend
-Methode, die voraussichtlich inrunTest
ausgeführt wird. Weitere Informationen finden Sie unter Kotlin-Coroutinen unter Android testen. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)
API-Änderungen
- UI-Aufrufe für
getItem
undpeek
inAsyncPagingDataDiffer
undPagingDataAdapter
sind jetzt korrekt als nur im Hauptthread aufrufbar markiert. (I699b6) - Platzhalter wurden aus generischen Typen entfernt, die von
TestPager
verwendet werden. Dadurch ist es einfacher, die Ergebnisse dieser Methoden in Code zu verwenden, der in der Java-Programmiersprache geschrieben wurde. (I56c42)
Version 3.2.0-alpha03
24. Oktober 2022
androidx.paging:paging-*:3.2.0-alpha03
wird veröffentlicht. Version 3.2.0-alpha03 enthält diese Commits.
Paging-Tests
Dieser Release enthält ein neues Artefakt: paging-testing
. Dieses Artefakt bietet APIs, die für Unit-Tests jeder Ebene Ihrer App und ihrer Integration mit Paging in Isolation entwickelt wurden.
Diese erste Version enthält beispielsweise 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 zum Simulieren der End-to-End-Paging-Integration benötigen.
TestPager
sollte als Fake betrachtet werden – ein Test-Double, das die tatsächliche Implementierung von Pager
widerspiegelt und gleichzeitig eine vereinfachte API-Oberfläche zum Testen von PagingSource
bietet. Diese APIs sind suspend
-APIs und sollten in runTest
ausgeführt werden, wie im Leitfaden zum Testen von Kotlin-Coroutinen unter Android beschrieben.
Ein Beispiel für die Verwendung dieser APIs finden Sie in den room-paging
-Tests, die für die Verwendung von TestPager
umgestaltet wurden.
API-Änderungen
- Ermöglicht eine bequeme Iteration über
LoadResult.Page.data
bisLoadResult.Page.iterator()
. Dadurch kann indirekt die Kotlin-Standardbibliotheksmethodeflatten
verwendet werden, wenn einList<LoadResult.Page>
angegeben wird, z. B. mit derpages
-Eigenschaft vonPagingState
, die an diePagingSource.getRefreshKey
-Methode übergeben wird. (Ie0718)
Version 3.2.0-alpha02
10. August 2022
androidx.paging:paging-*:3.2.0-alpha02
wird veröffentlicht. Version 3.2.0-alpha02 enthält diese Commits.
Neue Funktionen
- Beim Paging werden jetzt Logs über die Klassen
AsyncPagingDataDiffer
oderPagingDataAdapter
bereitgestellt, um Debugging-Informationen ausPagingData
verfügbar zu machen. - Die Logs können über den
adb shell
-Befehladb shell setprop log.tag.Paging [DEBUG|VERBOSE].
aktiviert werden(b/235527159).
Fehlerkorrekturen
- Der Fehler „
PagingDataDiffer
-Konstruktor fehlt“ bei der Verwendung vonpaging-common:3.2.0-alpha01
mit der Laufzeitpaging-runtime:3.1.1
oder älter wurde behoben.(b/235256201)
Version 3.2.0-alpha01
1. Juni 2022
androidx.paging:paging-*:3.2.0-alpha01
wird veröffentlicht. Version 3.2.0-alpha01 enthält diese Commits.
API-Änderungen
- Es wurden Konstruktoren für
PagingDataAdapter
undAsyncPagingDataDiffer
hinzugefügt, dieCoroutineContext
anstelle vonCoroutineDispatcher
akzeptieren. (Idc878) - Standardmäßig wirken sich
PagingData.from()
undPagingData.empty()
nicht mehr aufCombinedLoadStates
auf der Seite des Moderators aus. Es wurde eine neue Überladung hinzugefügt, mit dersourceLoadStates
undremoteLoadStates
an diese Konstruktoren übergeben werden können, um das vorhandene Verhalten beizubehalten, bei demLoadStates
vollständig terminal ist (d.h.NotLoading(endOfPaginationReached = false)
) mit der Option, bei Bedarf auch Remote-Status einzubeziehen. WennLoadStates
nicht übergeben werden, wird die vorherigeCombinedLoadStates
auf der Seite des Moderators beibehalten, wenn er die statischePagingData
empfängt. (Ic3ce5, b/205344028)
Fehlerkorrekturen
- Das Ergebnis von
PagingSource.getRefreshKey()
wird jetzt korrekt gegenüberinitialKey
priorisiert, wenn es „null“ zurückgeben würde, aber eininitialKey
ungleich null festgelegt wurde. (Ic9542, b/230391606)
Externe Beiträge
- 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
wird veröffentlicht. Version 3.1.1 enthält diese Commits.
Fehlerkorrekturen
- Zwischengenerationen-Ereignisse vom Typ
LoadState.NotLoading
wurden entfernt, die fälschlicherweise von.cachedIn()
eingefügt wurden. Diese Änderung erleichtert die Reaktion aufLoadState
-Änderungen erheblich, da redundanteLoadState.NotLoading
-Ereignisse entfernt werden, die zwischen dem erneuten Versuch fehlgeschlagener Ladevorgänge, beim Aktualisieren oder während der Ungültigmachung erzeugt wurden.
Version 3.1.0
17. November 2021
androidx.paging:paging-*:3.1.0
wird veröffentlicht. Version 3.1.0 enthält diese Commits.
Wichtige Änderungen seit Version 3.0.0
- Die APIs
Flow<PagingData>.observable
undFlow<PagingData>.flowable
sind nicht mehr experimentell. - Verhaltensänderungen bei
LoadState
:endOfPaginationReached
ist jetzt immerfalse
fürLoadType.REFRESH
fürPagingSource
undRemoteMediator
.LoadStates
aus der Paginierung wartet jetzt auf gültige Werte vonPagingSource
undRemoteMediator
, bevor es downstream ausgegeben wird. Neue Generationen vonPagingData
beginnen jetzt immer korrekt mitLoading
für den Aktualisierungsstatus, anstatt in einigen Fällen fälschlicherweise aufNotLoading
zurückgesetzt zu werden..loadStateFlow
und.addLoadStateListener
senden bei Presenter-APIs nicht mehr redundant ein anfänglichesCombinedLoadStates
, bei dem die Vermittlerstatus immer aufnull
gesetzt sind.
- Die Kündigung bei früheren Generationen erfolgt jetzt sofort bei Ungültigkeit / neuen Generationen. Die Verwendung von
.collectLatest
aufFlow<PagingData>
ist nicht mehr erforderlich, wird aber weiterhin empfohlen. PagingSource.LoadResult.Invalid
wurde als neuer Rückgabetyp vonPagingSource.load
hinzugefügt. Dadurch verwirft Paging alle ausstehenden oder zukünftigen Ladeanfragen an diesenPagingSource
und macht ihn ungültig. Dieser Rückgabetyp ist für die Verarbeitung potenziell ungültiger oder veralteter Daten konzipiert, die von der Datenbank oder dem Netzwerk zurückgegeben werden können.- Die APIs
.onPagesPresented
und.addOnPagesUpdatedListener
für Vortragende wurden hinzugefügt. Sie werden synchron ausgelöst, wenn Seiten in der Benutzeroberfläche präsentiert werden. Seitenaktualisierungen können in den folgenden Fällen erfolgen:- Der erste Ladevorgang einer neuen Generation von „PagingData“ wird abgeschlossen, unabhängig davon, ob die neue Generation Änderungen an den präsentierten Elementen enthält. Beispiel: Auch wenn eine neue Generation den anfänglichen Ladevorgang ohne Aktualisierungen abschließt, weil die Liste genau gleich ist, wird dieser Callback ausgelöst.
- Eine Seite wird eingefügt, auch wenn sie keine neuen Elemente enthält.
- Eine Seite wird entfernt, auch wenn sie leer war.
Version 3.1.0-rc01
3. November 2021
androidx.paging:paging-*:3.1.0-rc01
wird veröffentlicht. Version 3.1.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Ein Race Condition-Problem und ein Speicherleck in .cachedIn() wurden behoben, wenn mehrere Ladeereignisse von Paging downstream gesendet wurden, während keine Beobachter vorhanden waren oder zwischen dem Wechsel eines Beobachters zu neuen PagingData. (Ib682e)
Version 3.1.0-beta01
13. Oktober 2021
androidx.paging:paging-*:3.1.0-beta01
wird veröffentlicht. Version 3.1.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem viele schnelle Elementzugriffe dazu führen konnten, dass sie für die Vorabrufdistanz nicht berücksichtigt wurden, was zu Verzögerungen beim Laden von Seiten führte. Das ist besonders dann ein Problem, wenn viele Elemente gleichzeitig in einer Reihenfolge angeordnet sind, bei der das Laden entgegen der Scrollrichtung des Nutzers priorisiert wird. Diese Elementzugriffe werden jetzt gepuffert und synchron priorisiert, damit sie nicht verloren gehen. (aosp/1833273)
Version 3.1.0-alpha04
29. September 2021
androidx.paging:paging-*:3.1.0-alpha04
wird veröffentlicht. Version 3.1.0-alpha04 enthält diese Commits.
API-Änderungen
- Die APIs
Flow<PagingData>.observable
undFlow<PagingData>.flowable
sind nicht mehr experimentell. (Ie0bdd)
Fehlerkorrekturen
- Für LoadStates ist
endOfPaginationReached
jetzt immerfalse
fürLoadType.REFRESH
. Bisher konnte „endOfPaginationReached“ für „RemoteMediator“REFRESH
, aber nicht für „PagingSource“true
sein. Dieses Verhalten wurde jetzt konsolidiert, sodass immerfalse
zurückgegeben wird, da es nie sinnvoll ist, dass REFRESH endgültig ist. Es ist jetzt als Teil des API-Vertrags in LoadStates dokumentiert. Bei der Entscheidung, ob die Paginierung beendet wird, sollten Sie immer die APPEND- oder PREPEND-Richtung berücksichtigen. (I047b6) LoadStates aus Paging warten jetzt auf gültige Werte von PagingSource und RemoteMediator, bevor sie zwischen den Generationen nachgelagert ausgegeben werden. Dadurch wird verhindert, dass neue Generationen von PagingData „NotLoading“ in „CombinedLoadStates.source.refresh“ senden, wenn „Loading“ bereits vorhanden war. Neue Generationen von PagingData beginnen jetzt immer korrekt mit „Loading“ für den Aktualisierungsstatus, anstatt in einigen Fällen fälschlicherweise zuerst auf „NotLoading“ zurückgesetzt zu werden.
Stornierungen bei früheren Generationen erfolgen jetzt sofort bei Ungültigkeit/neuen Generationen. Die Verwendung von .collectLatest für
Flow<PagingData>
ist nicht mehr erforderlich, wird aber weiterhin dringend empfohlen. (I0b2b5, b/177351336, b/195028524)Bei
.loadStateFlow
- und.addLoadStateListener
-Presenter-APIs wird nicht mehr redundant ein anfänglichesCombinedLoadStates
gesendet, bei dem die Mediator- und Quellstatus immer aufnull
bzw.NotLoading(endOfPaginationReached = false)
gesetzt sind. Das bedeutet Folgendes:- Mediator-Status werden immer ausgefüllt, wenn Sie RemoteMediator verwenden.
- Wenn Sie einen neuen loadState-Listener oder einen neuen Collector für
.loadStateFlow
registrieren, wird der aktuelle Wert nicht mehr sofort ausgegeben, wenn noch kein echtesCombinedLoadStates
vonPagingData
empfangen wurde. Das kann passieren, wenn ein Collector oder Listener gestartet wird, bevor einPagingData
eingereicht wurde. (I1a748)
Version 3.1.0-alpha03
21. Juli 2021
androidx.paging:paging-*:3.1.0-alpha03
wird veröffentlicht. Version 3.1.0-alpha03 enthält diese Commits.
API-Änderungen
Der Rückgabetyp „LoadResult.Invalid“ wird „PagingSource“ hinzugefügt. Wenn PagingSource.load LoadResult.Invalid zurückgibt, werden die geladenen Daten verworfen und die PagingSource wird ungültig. Dieser Rückgabetyp ist für potenziell ungültige oder veraltete 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 jedoch nicht rechtzeitig ungültig wird, kann es zu inkonsistenten Ergebnissen kommen, wenn die Implementierung von der Unveränderlichkeit des zugrunde liegenden Datasets abhängt, aus dem sie geladen wird (z.B. LIMIT OFFSET-Datenbankimplementierungen). In diesem Fall empfiehlt es sich, nach dem Laden auf Ungültigkeit zu prüfen und LoadResult.Invalid zurückzugeben. Dadurch werden alle ausstehenden oder zukünftigen Ladeanfragen an diese PagingSource verworfen und die PagingSource wird ungültig.
Dieser Rückgabetyp wird auch von der Paging2 API unterstützt, die LivePagedList oder RxPagedList verwendet. Wenn Sie eine PagingSource mit den PagedList-APIs von Paging2 verwenden, wird die PagedList sofort getrennt. Dadurch werden weitere Versuche, Daten in diese PagedList zu laden, beendet und die PagingSource wird ungültig.
LoadResult ist eine versiegelte Klasse. Das bedeutet, dass es sich um eine nicht quellkompatible Änderung handelt. Anwendungsfälle, in denen PagingSource.load-Ergebnisse direkt verwendet werden, müssen LoadResult.Invalid zur Kompilierzeit verarbeiten. Kotlin-Nutzer, die „exhaustive-when“ verwenden, um den Rückgabetyp zu prüfen, müssen beispielsweise eine Prüfung für den ungültigen Typ hinzufügen. (Id6bd3, b/191806126, b/192013267)
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 bereitgestellt wurde, die beim ersten Laden bereits ungültig war. Außerdem werden Invalidate-Callbacks jetzt nach dem Auslösen ordnungsgemäß entfernt, da sie garantiert höchstens einmal aufgerufen werden. (I27e69)
- Sie übergeben den Platzhalter-Anfangswert (InitialPagedList) aus einem neu instanziierten PagedList-Stream, z.B. Mit LivePagedListBuilder oder RxPagedListBuilder werden zuvor geladene Daten nicht mehr gelöscht.
Version 3.1.0-alpha02
1. Juli 2021
androidx.paging:paging-*:3.1.0-alpha02
wird veröffentlicht. Version 3.1.0-alpha02 enthält diese Commits.
Neue Funktionen
Die Listener- und Flow-Presenter-APIs „onPagesPresented“ wurden hinzugefügt. Sie werden sofort ausgelöst, nachdem die präsentierten Seiten in der Benutzeroberfläche aktualisiert wurden.
Da diese Aktualisierungen synchron mit der Benutzeroberfläche erfolgen, können Sie Adaptermethoden wie „.snapshot“ oder „.getItemCount“ aufrufen, um den Status nach der Aktualisierung zu prüfen. Beachten Sie, dass .snapshot() explizit aufgerufen werden muss, da dies bei jeder Aktualisierung sehr aufwendig sein kann.
Seitenaktualisierungen können in den folgenden Fällen erfolgen:
- Der erste Ladevorgang einer neuen Generation von PagingData ist abgeschlossen, unabhängig davon, ob die neue Generation Änderungen an den präsentierten Elementen enthält. Beispiel: Auch wenn eine neue Generation den anfänglichen Ladevorgang ohne Aktualisierungen abschließt, weil die Liste genau gleich ist, wird dieser Callback ausgelöst.
- Eine Seite wird eingefügt, auch wenn sie keine neuen Elemente enthält.
- Eine Seite wird entfernt, auch wenn sie leer war (I272c9, b/189999634).
Fehlerkorrekturen
- Beim Zugriff auf PagedList.dataSource über den Anfangswert, der von LivePagedList oder RxPagedList erzeugt wird, 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 veröffentlicht. Version 3.1.0-alpha01 enthält diese Commits.
API-Änderungen
- Die von
paging-rxjava3
bereitgestellten Klassen befinden sich jetzt im Paketandroidx.paging.rxjava3
, damit sie nicht mitpaging-rxjava2
(Ifa7f6) in Konflikt geraten.
Fehlerkorrekturen
- Es wurde ein Problem behoben, bei dem durch das Paging manchmal No-Op-Differenzereignisse an RecyclerView gesendet wurden, was dazu führen konnte, dass bestimmte Listener zu früh ausgelöst wurden. (Ic507f, b/182510751)
Externe Beiträge
- Dem rxjava3-Artefakt wurden eingestellte PagedList-kompatible APIs hinzugefügt (Id1ce2, b/182497591)
Paging Compose Version 1.0.0
Version 1.0.0-alpha20
24. Mai 2023
androidx.paging:paging-compose:1.0.0-alpha20
wird 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 müssen Sie eine
PagingData.from(fakeData)
erstellen und diesePagingData
in eineMutableStateFlow
einfügen (z. B.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Wenn Sie diese Daten als Eingabe für Ihre@Preview
verwenden, werden bei Aufrufen voncollectAsLazyPagingItems()
LazyPagingItems
mit Vorschau bereitgestellt. (I8a78d, b/194544557)
Fehlerkorrekturen
- Zwischengespeicherte Daten aus
pager.flow.cachedIn
, die inLazyPagingItems
erhoben wurden, sind jetzt nach der Wiederherstellung des Status sofort verfügbar, ohne dass eine asynchrone Erhebung erforderlich ist. Das bedeutet, dass die Daten im Cache sofort nach der ersten Zusammensetzung nach dem Wiederherstellen des Status für die Darstellung bereit sind. (I97a60, b/177245496)
Version 1.0.0-alpha19
3. Mai 2023
androidx.paging:paging-compose:1.0.0-alpha19
wird veröffentlicht. Version 1.0.0-alpha19 enthält diese Commits.
Unterstützung aller Lazy-Layouts
Bisher wurden in Paging Compose benutzerdefinierte items
- und itemsIndexed
-Erweiterungen für LazyListScope
bereitgestellt. Das bedeutete, dass Sie Paging Compose nicht mit anderen Lazy-Layouts wie LazyVerticalGrid
, HorizontalPager
oder anderen benutzerdefinierten Lazy-Komponenten aus den Wear- und TV-Bibliotheken verwenden konnten. Die primäre Änderung in dieser Version ist die Behebung dieser Inflexibilität.
Um mehr Lazy-Layouts zu unterstützen, mussten wir APIs auf einer anderen Ebene entwickeln. Anstatt für jedes Lazy-Layout eine benutzerdefinierte items
-API bereitzustellen, bietet Paging Compose jetzt Erweiterungsmethoden auf etwas niedrigerer Ebene für LazyPagingItems
in itemKey
und itemContentType
. Diese APIs sollen Ihnen helfen, die Parameter key
und contentType
in den Standard-items
-APIs zu implementieren, die bereits für LazyColumn
, LazyVerticalGrid
sowie deren Entsprechungen in APIs wie HorizontalPager
vorhanden sind. (Ifa13b, Ib04f0, b/259385813)
Das bedeutet, dass die Unterstützung von LazyVerticalGrid
so aussehen würde:
// This part is unchanged
val lazyPagingItems = pager.collectAsLazyPagingItems()
LazyVerticalGrid(columns = GridCells.Fixed(2)) {
// Here we use the standard items API
items(
count = lazyPagingItems.itemCount,
// Here we use the new itemKey extension on LazyPagingItems to
// handle placeholders automatically, ensuring you only need to provide
// keys for real items
key = lazyPagingItems.itemKey { it.uniqueId },
// Similarly, itemContentType lets you set a custom content type for each item
contentType = lazyPagingItems.itemContentType { "contentType" }
) { index ->
// As the standard items call provides only the index, we get the item
// directly from our lazyPagingItems
val item = lazyPagingItems[index]
PagingItem(item = item)
}
}
Weitere Beispiele für die Verwendung dieser neuen APIs
Durch diese Änderungen werden die Beispiele für LazyColumn
und LazyRow
zwar einige Zeilen länger, aber wir sind der Meinung, dass die Einheitlichkeit aller Lazy-Layouts ein wichtiger Faktor für Nutzer von Paging Compose ist. Aus diesem Grund wurden die vorhandenen Erweiterungen für LazyListScope
eingestellt. (I0c459, I92c8f, b/276989796)
API-Änderungen
- Um die Migration zu den neuen APIs zu erleichtern, unterstützen die Erweiterungsfunktionen
items
unditemsIndexed
fürLazyListScope
jetzt einencontentType
-Parameter, der der Unterstützung in den neuen APIs entspricht. (Ib1918, b/255283378)
Abhängigkeitsupdates
- Die Abhängigkeit von Paging Compose wurde von Compose 1.0.5 auf Compose 1.2.1 aktualisiert. (Ib1918, b/255283378)
Version 1.0.0-alpha18
8. Februar 2023
androidx.paging:paging-compose:1.0.0-alpha18
wird ohne Änderungen veröffentlicht. Version 1.0.0-alpha18 enthält diese Commits.
Version 1.0.0-alpha17
24. Oktober 2022
androidx.paging:paging-compose:1.0.0-alpha17
wird veröffentlicht. Version 1.0.0-alpha17 enthält diese Commits.
Neue Funktionen
- Unterstützung für einen benutzerdefinierten
CoroutineContext
beim Aufrufen voncollectLazyPagingItems
hinzugefügt. (I7a574, b/243182795, b/233783862)
Version 1.0.0-alpha16
10. August 2022
androidx.paging:paging-compose:1.0.0-alpha16
wird veröffentlicht. Version 1.0.0-alpha16 enthält diese Commits.
Neue Funktionen
- Paging bietet jetzt Logs über die Klasse
LazyPagingItems
, um Debugging-Informationen aus PagingData verfügbar zu machen. - Die Logs können über den Befehl
adb shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE]
aktiviert werden. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
Fehlerkorrekturen
- Der Fehler „
PagingDataDiffer
-Konstruktor fehlt“ bei der Verwendung vonpaging-compose:1.0.0-alpha15
mitpaging-common:3.1.1
oder älter wurde behoben.(b/235256201,b/239868768)
Version 1.0.0-alpha15
1. Juni 2022
androidx.paging:paging-compose:1.0.0-alpha15
wird veröffentlicht. Version 1.0.0-alpha15 enthält diese Commits.
API-Änderungen
- Es wurden Konstruktoren für
PagingDataAdapter
undAsyncPagingDataDiffer
hinzugefügt, dieCoroutineContext
anstelle vonCoroutineDispatcher
akzeptieren. (Idc878)
Fehlerkorrekturen
- Mit
LazyPagingItems
wird jetzt die anfänglicheloadState
auf eineLoadState.Loading
-Aktualisierung festgelegt. (I55043, b/224855902)
Version 1.0.0-alpha14
13. Oktober 2021
androidx.paging:paging-compose:1.0.0-alpha14
wird veröffentlicht. Version 1.0.0-alpha14 enthält diese Commits.
Version 1.0.0-alpha13
29. September 2021
androidx.paging:paging-compose:1.0.0-alpha13
wird veröffentlicht. Version 1.0.0-alpha13 enthält diese Commits.
API-Änderungen
- Die Funktion
LazyPagingItems.snapshot()
wurde durch das AttributLazyPagingItems.itemSnapshotList
ersetzt (Ie2da8). - Die verworfene
LazyPagingItems.getAsState()
wurde entfernt (Ie65e4)
Version 1.0.0-alpha12
21. Juli 2021
androidx.paging:paging-compose:1.0.0-alpha12
wird veröffentlicht. Version 1.0.0-alpha12 enthält diese Commits.
API-Änderungen
items(lazyPagingItems)
unditemsIndexed(lazyPagingItems)
, die zum Verbinden von Paging mitLazyColumn/Row
verwendet 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)
wurde eingestellt. Verwenden Sie stattdessenlazyPagingItems[index]
. (I086cb, b/187339372)
Version 1.0.0-alpha11
30. Juni 2021
androidx.paging:paging-compose:1.0.0-alpha11
wird veröffentlicht. Version 1.0.0-alpha11 enthält diese Commits.
Version 1.0.0-alpha10
2. Juni 2021
androidx.paging:paging-compose:1.0.0-alpha10
wird veröffentlicht. Version 1.0.0-alpha10 enthält diese Commits.
Version 1.0.0-alpha09
18. Mai 2021
androidx.paging:paging-compose:1.0.0-alpha09
wird veröffentlicht. Version 1.0.0-alpha09 enthält diese Commits.
Fehlerkorrekturen
- Die itemCount- und Item-Getter-Funktionen von LazyPagingItems sind jetzt beobachtbar, sodass sie auch mit LazyVerticalGrid verwendet werden können (Ie2446, b/171872064, b/168285687).
Compose-Kompatibilität
androidx.paging:paging-compose:1.0.0-alpha09
ist nur mit Compose-Version1.0.0-beta07
und höher kompatibel.
Version 1.0.0-alpha08
24. Februar 2021
androidx.paging:paging-compose:1.0.0-alpha08
wird veröffentlicht. Version 1.0.0-alpha08 enthält diese Commits.
Aktualisiert für die Integration mit Compose 1.0.0-beta01.
Version 1.0.0-alpha07
10. Februar 2021
androidx.paging:paging-compose:1.0.0-alpha07
wird veröffentlicht. Version 1.0.0-alpha07 enthält diese Commits.
Aktualisiert für die Integration mit Compose Alpha 12.
Version 1.0.0-alpha06
28. Januar 2021
androidx.paging:paging-compose:1.0.0-alpha06
wird veröffentlicht. Version 1.0.0-alpha06 enthält diese Commits.
Fehlerkorrekturen
Die Abhängigkeit wurde auf Compose 1.0.0-alpha11 aktualisiert.
Version 1.0.0-alpha05
13. Januar 2021
androidx.paging:paging-compose:1.0.0-alpha05
wird veröffentlicht. Version 1.0.0-alpha05 enthält diese Commits.
Die Abhängigkeit wurde auf Compose 1.0.0-alpha10 aktualisiert.
Version 1.0.0-alpha04
16. Dezember 2020
androidx.paging:paging-compose:1.0.0-alpha04
wird veröffentlicht. Version 1.0.0-alpha04 enthält diese Commits.
Fehlerkorrekturen
- Die Convenience-Properties
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
undCombinedLoadStates.append
werden jetzt erst vonLoading
zuNotLoading
geändert, wenn sowohl der Mediator- als auch der QuellladezustandNotLoading
sind. So wird sichergestellt, dass das Remote-Update angewendet wurde. (I65619)
Version 1.0.0-alpha03
2. Dezember 2020
androidx.paging:paging-compose:1.0.0-alpha03
wird veröffentlicht. Version 1.0.0-alpha03 enthält diese Commits.
- Aktualisiert für Compose 1.0.0-alpha08.
Version 1.0.0-alpha02
11. November 2020
androidx.paging:paging-compose:1.0.0-alpha02
wird veröffentlicht. Version 1.0.0-alpha02 enthält diese Commits.
API-Änderungen
- Die Methoden
.peek()
,.snapshot()
,.retry()
und.refresh()
wurdenLazyPagingItem
s hinzugefügt, um dieselbe Funktionalität wie inAsyncPagingDataDiffer
/PagingDataAdapter
(Iddfe8, b/172041660) zu ermöglichen.
Version 1.0.0-alpha01
28. Oktober 2020
androidx.paging:paging-compose:1.0.0-alpha01
wird veröffentlicht. Version 1.0.0-alpha01 enthält diese Commits.
Neue Funktionen
Das paging-compose
-Artefakt bietet eine Integration zwischen der Paging Library und Jetpack Compose. Einfaches Anwendungsbeispiel:
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
Version 3.0.1
Version 3.0.1
21. Juli 2021
androidx.paging:paging-*:3.0.1
wird veröffentlicht. Version 3.0.1 enthält diese Commits.
Fehlerkorrekturen
- Der Zugriff auf
PagedList.dataSource
über den vonLivePagedList
oderRxPagedList
erzeugten Anfangswert löst nicht mehr fälschlicherweise eine IllegalStateException (I96707) aus.
Version 3.0.0
Version 3.0.0
5. Mai 2021
androidx.paging:paging-*:3.0.0
wird veröffentlicht. Version 3.0.0 enthält diese Commits.
Wichtige Funktionen von Version 3.0.0
Die meisten vorhandenen APIs aus Paging 2.x.x wurden zugunsten der neuen Paging 3-APIs verworfen, um die folgenden Verbesserungen zu ermöglichen:
- Erstklassige Unterstützung für Kotlin-Coroutinen und Flow
- Support bei Stornierungen
- Integrierte Signale für Laststatus und Fehler
- Funktion zum Wiederholen und Aktualisieren
- Alle drei DataSource-Unterklassen wurden in einer einheitlichen PagingSource-Klasse zusammengefasst.
- Benutzerdefinierte Seitentransformationen, einschließlich einer integrierten Transformation zum Hinzufügen von Trennzeichen
- Kopf- und Fußzeilen für Bundesstaaten werden geladen
Version 3.0.0-rc01
21. April 2021
androidx.paging:paging-*:3.0.0-rc01
wird veröffentlicht. Version 3.0.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Es wurde ein Problem behoben, bei dem durch das Paging manchmal No-Op-Differenzereignisse an RecyclerView gesendet wurden, was dazu führen konnte, dass bestimmte Listener zu früh ausgelöst wurden. (Ic507f, b/182510751)
Version 3.0.0-beta03
24. März 2021
androidx.paging:paging-*:3.0.0-beta03
wird veröffentlicht. Version 3.0.0-beta03 enthält diese Commits.
Fehlerkorrekturen
- Wir haben die Verarbeitung von Platzhaltern beim Neuladen von Listen überarbeitet, um unerwartete Sprünge in RecyclerView zu verhindern. Weitere Informationen finden Sie unter NullPaddedDiffing.md. (If1490, b/170027529, b/177338149)
- Die verschiedenen PagedList-Builder (alter Kompatibilitätspfad) rufen
DataSource.Factory.create()
nicht mehr fälschlicherweise synchron im Hauptthread auf, wenn.build()
aufgerufen wird. (b/182798948)
Version 3.0.0-beta02
10. März 2021
androidx.paging:paging-*:3.0.0-beta02
wird veröffentlicht. Version 3.0.0-beta02 enthält diese Commits.
API-Änderungen
- Die Opt-in-Anforderung für Rx3-Erweiterungen wird jetzt korrekt weitergegeben.
@ExperimentalCoroutinesApi
Bisher wurden sie in der Methode@get
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
PagingState
immernull
war, wenn der Remote-Aktualisierung aufgerufen wurde. - Es wurde ein Fehler behoben, bei dem leere Seiten, die von PagingSource zurückgegeben wurden, verhindern konnten, dass Paging noch einmal Daten abruft, um
prefetchDistance
zu erfüllen. Dadurch konnte Paging „hängen bleiben“.
Version 3.0.0-beta01
10. Februar 2021
androidx.paging:paging-*:3.0.0-beta01
wird veröffentlicht. Version 3.0.0-beta01 enthält diese Commits.
API-Änderungen
- Rx2- und Rx3-Wrappern wird jetzt die experimentelle Annotation bereitgestellt, von der sie abhängen. Wenn Sie die Rx-kompatiblen Wrapper in paging-rxjava2 oder paging-rxjava3 verwenden, müssen Sie die Verwendungen jetzt mit
@OptIn(ExperimentalCoroutinesApi::class)
annotieren (Ib1f9d).
Fehlerkorrekturen
- Der Fehler
IndexOutOfBoundsException: Inconsistency detected
wurde manchmal ausgelöst, wenn dieDataSource
-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 auf „fetchDispatcher“ anstelle des Hauptthreads gestartet. Dadurch wird einIllegalStateException
behoben, 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
wird veröffentlicht. Version 3.0.0-alpha13 enthält diese Commits.
API-Änderungen
PagingSource.getRefreshKey
ist nicht mehr optional, sondern eine abstrakte Funktion ohne Standardimplementierung. Migrierende Nutzer können entweder weiterhin die Standardimplementierung zurückgeben, die einfachnull
zurückgibt, abergetRefreshKey()
sollte eine echte Implementierung haben, die einen Schlüssel basierend auf der aktuellen Scrollposition des Nutzers zurückgibt, damit Paging weiterhin um den Viewport herum überPagingState.anchorPosition
geladen werden kann, sofern dies möglich ist. (I4339a)InvalidatingPagingSourceFactory
ist jetzt eine endgültige Klasse (Ia3b0a).- Konfiguration des Trennzeichens für das Terminal (Kopf- und Fußzeile) mit einem zusätzlichen optionalen Parameter „SeparatorType“ zulassen. Es gibt zwei Optionen:
FULLY_COMPLETE
– vorhandenes Verhalten; warten Sie, bis sowohl PagingSource als auch RemoteMediator endOfPaginationReached markieren, bevor Sie Trennzeichen hinzufügen. Wenn RemoteMediator nicht verwendet wird, wird remote loadState ignoriert. Das ist vor allem dann nützlich, wenn Sie Abschnittstrennzeichen nur anzeigen möchten, wenn der Abschnitt vollständig geladen ist, einschließlich des Abrufs von einer Remotequelle, z.B. einem Netzwerk.SOURCE_COMPLETE
: Es wird nur darauf gewartet, dass PagingSource „endOfPaginationReached“ markiert, auch wenn RemoteMediator verwendet wird. So können Kopf- und Fußzeilen synchron mit dem ersten Laden der Seite präsentiert werden. Nutzer müssen dann nicht scrollen, um die Trennzeichen des Terminals zu sehen. (Ibe993, b/174700218)
Fehlerkorrekturen
- Ein seltener Speicherfehler wurde behoben, der auftritt, wenn eine PagingSource ungültig gemacht wird, bevor PageFetcher mit dem Laden von Daten beginnen kann. (I9606b, b/174625633)
Version 3.0.0-alpha12
13. Januar 2021
androidx.paging:paging-*:3.0.0-alpha12
wird veröffentlicht. Version 3.0.0-alpha12 enthält diese Commits.
API-Änderungen
- InvalidatingPagingSourceFactory ist keine abstrakte Klasse mehr, da sie nie abstrakte Methoden hatte. (I4a8c4)
- Für Java-Nutzer wurde eine Überladung von .cachedIn() hinzugefügt, die ViewModel anstelle von Lifecycle oder CoroutineScope akzeptiert. (I97d81, b/175332619)
- Ermöglicht Java-Aufrufern, PagingData-Transformationsvorgänge asynchron zu verwenden, indem ein Executor in den Argumenten des Transformationsoperators akzeptiert wird. Bei allen -Sync-Transformationsoperatoren wurde das Suffix „-Sync“ entfernt. Nutzer von Kotlin Coroutines müssen die Erweiterungsfunktion aufrufen, die einen suspendierenden Block akzeptiert, um Mehrdeutigkeiten zu vermeiden.
Alle PagingData-Transformationsoperatoren wurden in die Erweiterungen unter der statischen Klasse „PagingDataTransforms“ verschoben. Java-Nutzer müssen sie über statische Helfer aufrufen, z.B.
PagingDataTransforms.map(pagingData, transform)
Für Kotlin-Nutzer ist die Syntax dieselbe, aber Sie müssen die Funktion importieren. (If6885, b/172895919)
Fehlerkorrekturen
- Ein Fehler wurde behoben, bei dem
RemoteMediator.load()
währendadapter.refresh()
nicht aufgerufen wurde, wenn das Ende der Paginierung bereits erreicht war.
Version 3.0.0-alpha11
16. Dezember 2020
androidx.paging:paging-*:3.0.0-alpha11
wird 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 von Ebenenquellen, ist noch in Arbeit):
- Der Flow wird im Cache gespeichert und die Anwendung wird nicht beendet (z. B. wird der Flow in einem View-Modell im Cache gespeichert und die Aktivität wird im Prozess neu erstellt).
- Die Paging-Quelle wird gezählt, Platzhalter sind aktiviert und das Layout ist nicht versetzt.
API-Änderungen
PagingSource.getRefreshKey()
ist jetzt eine stabile API (I22f6f, b/173530980)PagingSource.invalidate
ist keine offene Funktion mehr. Wenn Sie benachrichtigt werden müssen, wenn eine Invalidation 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-Properties
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
undCombinedLoadStates.append
werden jetzt erst vonLoading
zuNotLoading
geändert, wenn sowohl der Mediator- als auch der QuellladezustandNotLoading
sind. So wird sichergestellt, dass das Remote-Update angewendet wurde. (I65619) LoadParams.pageSize wurde entfernt (es war bereits als veraltet markiert). Wir empfehlen,
LoadParams.loadSize
in Ihrer PagingSource zu verwenden.LoadParams.loadSize
entspricht immerPagingConfig.pageSize
, mit Ausnahme des Aufrufs für das anfängliche Laden, bei dem esPagingConfig.initialLoadSize
entspricht.Wenn Sie Ihre Paging2-DataSource testen, ohne einen Pager oder eine PagedList zu verwenden, stimmt
pageSize
möglicherweise nicht mitPagingConfig.pageSize
überein, wenn Sie auchinitialLoadSize
festlegen. Wenn das für Ihre Tests wichtig ist, verwenden Sie stattdessen einen Pager/eine PagedList. Dadurch wird intern die richtige PageSize für die Lademethoden Ihrer DataSource festgelegt. (I98ac7, b/149157296)
Fehlerkorrekturen
- Ein Absturz aufgrund von IllegalStateException bei Verwendung von Trennzeichen mit festgelegtem PagingConfig.maxSize wurde behoben. (I0ed33, b/174787528)
- Ein Fehler wurde behoben, durch den der Ladestatus für PREPEND / APPEND nicht sofort nach dem ersten Laden auf
NotLoading(endOfPaginationReached = true)
aktualisiert wurde, wenn RemoteMediator festgelegt war (I8cf5a). - Es wurde ein Fehler 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, durch den mit RemoteMediator verwendete Separators-Operatoren keine Kopf- oder Fußzeilen hinzugefügt haben.
- Es wurde ein Fehler behoben, bei dem LoadState-Aktualisierungen für RemoteMediator im Status „Wird geladen“ hängen blieben.
- Ein Fehler wurde behoben, bei dem die Paging 2.0-kompatible API
.asPagingSourceFactory()
dazu führen konnte, dass das zugrunde liegendeDataSource
im falschen CoroutineDispatcher initialisiert wurde. Dadurch werden Abstürze 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
wird veröffentlicht. Version 3.0.0-alpha10 enthält diese Commits.
API-Änderungen
Die veralteten APIs
dataRefreshFlow
unddataRefreshListener
wurden entfernt, da sie durch loadStateFlow- und Listener-Updates überflüssig sind. Für Nutzer, die migrieren, ist der loadStateFlow-Äquivalent: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 die Remote-ElementeAPPEND
undPREPEND
ausgelöst werden. (I94a3f, b/155290248) - Wenn eine leere Liste aufgrund einer leeren Startseite oder starker Filterung angezeigt wird, wird das Paging nicht mehr verhindert, sodass
PREPEND
- oderAPPEND
-Ladevorgänge gestartet werden. (I3e702, b/168169730) - Ein Problem wurde behoben, bei dem
getRefreshKey
bei nachfolgenden Generationen von PagingSource nicht aufgerufen wird, wenn Invalidierungen schnell erfolgen. (I45460, b/170027530)
Externe Beiträge
- Eine neue abstrakte Klasse „InvalidatingPagingSourceFactory“ wurde mit einer
.invalidate()
-API hinzugefügt, die „invalidate“ an alle von ihr ausgegebenen „PagingSource“-Objekte 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 die Remote-
LoadState
hängen bleibt, wenn die Invalidierung undPagingSource.load(LoadParams.Refresh(...))
abgeschlossen sind, bevorRemoteMediator.load()
b/173717820 zurückgibt.
Version 3.0.0-alpha09
11. November 2020
androidx.paging:paging-*:3.0.0-alpha09
wird veröffentlicht. Version 3.0.0-alpha09 enthält diese Commits.
API-Änderungen
- dataRefreshFlow-/Listener-Methoden vollständig mit einer replaceWith-Klausel einstellen. (I6e2dd)
Fehlerkorrekturen
- Fehler behoben, der dazu führte, dass
IllegalArgumentException
ausgelöst wurde, wenn Trennzeichen mit RemoteMediator verwendet wurden und ein „invalidate“ 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
wird veröffentlicht. Version 3.0.0-alpha08 enthält diese Commits.
API-Änderungen
- Die Kotlin-/Java-Varianten von
DataSource.InvalidatedCallback
wurden kombiniert, indem SAM-Konvertierungen in Kotlin über das funktionale Interface aktiviert wurden (verfügbar in Kotlin 1.4). Außerdem wird ein Fehler behoben, bei dem die Kotlin-Variante von „invalidate“-Callbacks nicht aufgerufen wurde, nachdem sie von.map
oder.mapByPage
transformiert wurde. (I1f244, b/165313046)
Fehlerkorrekturen
- Die Interaktion von Paging mit ViewPager wurde erheblich verbessert. Insbesondere wird durch das Paging kein
RemoteMediator#load
-Aufruf mehr aufgrund einer Seitenungültigmachung abgebrochen. Außerdem wird keine Append-/Prepend-Ladeanfrage mehr gesendet, wenn REFRESH erforderlich ist, bis die REFRESH-Anfrage erfolgreich abgeschlossen wurde. (I6390b, b/162252536) - Der API-Lint-Check für MissingGetterMatchingBuilder ist für androidx aktiviert (I4bbea, b/138602561).
- Es wurde ein Fehler behoben, bei dem
.withLoadState*
-ConcatAdapter
-Helfer aufgrund der Benachrichtigung von RecyclerView über einen Hintergrundthread abgestürzt sind (I18bb5, b/170988309). - Ein Fehler wurde behoben, bei dem das Laden einer sehr kleinen, nicht leeren Seite manchmal verhinderte, dass der Prefetch-Mechanismus richtig ausgelöst wurde.Iffda3 b/169259468
Version 3.0.0-alpha07
1. Oktober 2020
androidx.paging:paging-*:3.0.0-alpha07
wird 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)
Fehlerkorrekturen
- Die IndexOutOfBounds-Ausnahme, die in RemoteMediator aufgrund einer Race Condition ausgelöst wurde, wurde behoben. (I00b7f, b/165821814)
- Es wurde ein Race-Bedingungsproblem bei der Konvertierung von DataSource -> PagingSource behoben, das dazu führen konnte, dass die resultierende PagingSource Invalidierungssignale von DataSource ignoriert hat.
- Ein Problem in der Logik zum Abrufen von Seiten wurde behoben, das manchmal dazu führte, dass neue Generationen von PagingSource erst nach dem Aufrufen von PagingDataAdapter.refresh() erkannt wurden.
- Ein Problem wurde behoben, durch das die Scrollposition manchmal verloren ging, wenn eine in eine PagingSource umgewandelte DataSource (z. B. die von Room erstellte) in Verbindung mit RemoteMediator verwendet wurde.
Externe Beiträge
- Vielen Dank an @simonschiller für das Hinzufügen von RxJava2-, RxJava3- und Guava-basierten asynchronen Transformationsoperatoren für PagingData.
Version 3.0.0-alpha06
2. September 2020
androidx.paging:paging-*:3.0.0-alpha06
wird veröffentlicht. Version 3.0.0-alpha06 enthält diese Commits.
API-Änderungen
UnsupportedOperationException
mit klareren Meldungen zum Fehlen der Unterstützung für stabile IDs wird jetzt immer dann ausgegeben, wennPagingDataAdapter.setHasStableIds
aufgerufen wird. (Ib3890, b/158801427)
Fehlerkorrekturen
- Mit „insertSeparators“ werden leere Seiten nicht mehr herausgefiltert. Der Prefetch-Abstand 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
wird veröffentlicht. Version 3.0.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Beim Paging werden Seiten jetzt auch dann korrekt vorab abgerufen, wenn die präsentierten Daten stark gefiltert sind.
- Wenn
LoadResult.Error
an einen wiederholten Ladevorgang zurückgegeben wird, werden Elementzugriffe nicht mehr fälschlicherweise wiederholt.
Externe Beiträge
- Vielen Dank an Clara F., die uns beim Aufräumen einiger Tests geholfen hat. (549612)
Version 3.0.0-alpha04
5. August 2020
androidx.paging:paging-*:3.0.0-alpha04
wird veröffentlicht. Version 3.0.0-alpha04 enthält diese Commits.
API-Änderungen
- Die
peek()
API wurdeAsyncPagingDataDiffer
undPagingDataAdapter
hinzugefügt, um den Zugriff auf präsentierte Daten ohne Triggerseitenladevorgänge zu ermöglichen. (I38898, b/159104197) - Der
snapshot()
API wurdePagingDataAdapter
undAsyncPagingDataDiffer
hinzugefügt, damit die präsentierten Elemente abgerufen werden können, ohne dass ein Seitenabruf ausgelöst wird. (I566b6, b/159104197) - Es wurde ein
PagingData.from(List<T>)
-Konstruktor hinzugefügt, mit dem statische Listen präsentiert werden können. Diese können mit dem gesamten PagingData-Ablauf kombiniert werden, um statische Listen in bestimmten Status zu zeigen, z. B. bevor der erste REFRESH abgeschlossen ist oder einfach zum Testen von Transformationen. (Id134d) - Die APIs für den dataRefresh-Flow / -Listener werden eingestellt, da sie den Status der präsentierten Elemente bei REFRESH offenlegen sollten. Durch Verbesserungen beim Timing des loadState-Flows / -Listener-Callbacks und der itemCount-Eigenschaft sind sie jedoch überflüssig. (Ia19f3)
- RxJava3-Kompatibilitäts-Wrapper für
PagingSource
undRemoteMediator
hinzugefügt (I49ef3, b/161480176)
Fehlerkorrekturen
PositionalDataSource
wurde über dentoPagingSourceFactory
-Helfer inPagingSource
konvertiert. Dazu gehört auch, dass von Room generiertePagingSource
jetzt korrekt markiert werden, 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 einem Race-Bedingung führte, die einen
ClosedSendChannelException
(I4d702, b/160192222) verursachte.
Externe Beiträge
- Vielen Dank an Zac Sweers, der im Namen von Slack Wrapper für die RxJava3-Kompatibilität hinzugefügt hat. (I49ef3, b/161480176)
Version 3.0.0-alpha03
22. Juli 2020
androidx.paging:paging-*:3.0.0-alpha03
wird 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-Kartenfunktion „DataSource“ wurden in Java ausgeblendet, um Unklarheiten zwischen den ursprünglichen und den Kotlin-Varianten zu beseitigen. (If7b23, b/161150011)
- Redundante APIs, die als Komfortfunktionen für Kotlin-Nutzer gedacht sind, wurden mit @JvmSynthetic gekennzeichnet (I56ae5).
- Es wurden Überladungen für den Konstruktor von LoadResult.Page hinzugefügt, bei denen „itemsBefore“ und „itemsAfter“ standardmäßig auf COUNT_UNDEFINED gesetzt sind (I47849).
- Vorhandene PagingData-Operatoren akzeptieren jetzt suspendierende Methoden. Außerdem wurden für Java-Nutzer die neuen nicht suspendierenden Operatoren mapSync, flatMapSync und filterSync eingeführt. Die vorhandenen Transformationsmethoden wurden in Erweiterungsfunktionen verschoben. Kotlin-Nutzer müssen sie jetzt importieren. (I34239, b/159983232)
Fehlerkorrekturen
- Bei PagingSources für Räume (und PositionalDataSource) wird jetzt ein Trennzeichen am Anfang der ersten Seite angezeigt, sodass der Nutzer nicht scrollen muss, um es zu sehen. (I6f747, b/160257628)
- Der Zugriff auf Elemente in Platzhaltern löst jetzt PagingSource-Ladevorgänge aus, bis eine Seite zurückgegeben wird, die den angeforderten Index erfüllt, nachdem sie von PagingData.filter() transformiert wurde (I95625, b/158763195).
- Fehlerbehebung für einen Fehler, bei dem das Scrollen nach der Rückgabe eines Fehlers durch PagingSource manchmal verhindert hat, dass PagingDataAdapter.retry() den Vorgang wiederholt. (I1084f, b/160194384)
- Ein Problem wurde behoben, bei dem Seiten nach dem Ablegen einer Seite möglicherweise nicht geladen wurden, obwohl der Elementzugriff innerhalb von „prefetchDistance“ lag (Ie95ae, b/160038730).
- Durch Festlegen von PagingConfig.maxSize werden nach einem Drop-Ereignis keine Platzhalter mehr aktiviert (I2be29, b/159667766)
Version 3.0.0-alpha02
24. Juni 2020
androidx.paging:paging-*:3.0.0-alpha02
wird veröffentlicht. Version 3.0.0-alpha02 enthält diese Commits.
API-Änderungen
- Überladungen für den Konstruktor von
PagingConfig
mit gängigen Standardwerten hinzugefügt (I39c50, b/158576040) - Überladungen für Konstruktoren von
PagingDataAdapter
undAsyncPagingDataDiffer
mit gemeinsamen Standardwerten hinzugefügt (Ie91f5) - Die Adapter-APIs
dataRefreshFlow
unddataRefreshListener
übergeben jetzt einen booleschen Wert, um anzugeben, ob einPagingData
leer ist (I6e37e, b/159054196). - RxJava- und Guava-APIs für RemoteMediator hinzugefügt: RxRemoteMediator und ListenableFutureRemoteMediator
- Der PagingState wurden Hilfsfunktionen für den allgemeinen Elementzugriff wie
isEmpty()
undfirstItemOrNull()
hinzugefügt (I3b5b6, b/158892717).
Fehlerkorrekturen
- Pager prüft jetzt 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 REFRESH von RemoteMediator verhindern nicht mehr, dass PagingSource geladen wird (I38b1b, b/158892717)
- Die nicht suspendierende Version von
submitData
führt nicht mehr zu einem Absturz aufgrund der gleichzeitigen Erfassung auf mehrerenPagingData
, wenn sie nach der suspendierenden Version vonsubmitData
aufgerufen wird. (I26358, b/158048877) - Die Ausnahme „cannot collect twice from pager“ (kann nicht zweimal vom Pager erfasst werden) wurde behoben, die nach einer Konfigurationsänderung auftreten konnte (I58bcc, b/158784811).
Version 3.0.0-alpha01
10. Juni 2020
androidx.paging:paging-*:3.0.0-alpha01
wird veröffentlicht. Version 3.0.0-alpha01 enthält diese Commits.
Die Paging Library wurde auf Version 3.0 aktualisiert, um mehrere wichtige neue Funktionen zu ermöglichen.
Neue Funktionen in Version 3.0
- Erstklassige Unterstützung für Kotlin-Coroutinen und Flow.
- Unterstützung für das asynchrone Laden mit coroutines suspend-Funktionen, RxJava Single- oder Guava ListenableFuture-Primitiven.
- Integrierte Signale für den Ladestatus und Fehlersignale für ein responsives UI-Design, einschließlich Wiederholungs- und Aktualisierungsfunktionen.
- Verbesserungen an der Repository-Ebene
- Vereinfachte Datenquellenoberfläche
- Vereinfachte Netzwerk- und Datenbankpaginierung
- Unterstützung bei der Kündigung
- Verbesserungen an der Präsentationsebene
Bekannte Probleme
- Die Java-Dokumentation für Paging 3 ist noch nicht verfügbar. Verwenden Sie in der Zwischenzeit die oben verlinkten Anleitungen oder die Kotlin-Dokumentation. (b/158614050)
Version 2.1.2
Version 2.1.2
18. März 2020
androidx.paging:paging:2.1.2
wird veröffentlicht. Version 2.1.2 enthält diese Commits im Vergleich zu Version 2.1.0.
Fehlerkorrekturen
- Problem mit
IndexOutOfBoundsException
in seltenen Fällen bei der Konvertierung einer Position während der Ungültigmachung behoben.
Problem mit der Veröffentlichung
Die Paging-Version
2.1.1
wurde fälschlicherweise über einen falsch konfigurierten Branch veröffentlicht. Dadurch wurden teilweise implementierte APIs und Funktionen, die in einer zukünftigen Version verfügbar sein werden, offengelegt.Die Paging-Version
2.1.2
enthält den Fix für die Lastzentrierung, der ursprünglich in Version 2.1.1 veröffentlicht wurde. Dieses Mal wurde er jedoch korrekt auf Version 2.1.0 angewendet. Wenn Sie derzeit Version 2.1.1 verwenden, wird dringend empfohlen, ein Upgrade auf diese Version durchzuführen.
Version 2.1.1
Version 2.1.1
18. Dezember 2019
androidx.paging:paging-*:2.1.1
wird veröffentlicht. Version 2.1.1 enthält diese Commits.
Fehlerkorrekturen
- Zusammenhängende anfängliche Ladevorgänge von PositionalDataSources sind jetzt um den letzten Zugriff zentriert, wenn Platzhalter deaktiviert sind
Version 2.1.0
Version 2.1.0
25. Januar 2019
Die Paging-Funktion 2.1.0
wird ohne Änderungen gegenüber 2.1.0-rc01
veröffentlicht.
Version 2.1.0-rc01
6. Dezember 2018
Die Paging-Funktion 2.1.0-rc01
wird ohne Änderungen gegenüber 2.1.0-beta01
veröffentlicht.
Version 2.1.0-beta01
1. November 2018
Die Paging-Funktion 2.1.0-beta01
wird ohne Änderungen gegenüber 2.1.0-alpha01
veröffentlicht.
Version 2.1.0-alpha01
12. Oktober 2018
Die Paging-Bibliothek 2.1.0-alpha01
bietet zwei wichtige Neuerungen: das Löschen von Seiten und KTX-Erweiterungsbibliotheken für jedes Artefakt. Außerdem gibt es mehrere API-Änderungen und Fehlerkorrekturen.
API-Änderungen
PagedList.Config.Builder.setMaxSize()
wurde hinzugefügt, um die Anzahl der im Arbeitsspeicher geladenen Elemente zu begrenzen.androidx.paging.Config()
wurde als Kotlin-Alternative fürPagedList.Config.Builder
hinzugefügtandroidx.paging.PagedList()
wurde als Kotlin-Alternative fürPagedList.Builder
hinzugefügtDataSourceFactory.toLiveData()
wurde als Kotlin-Alternative fürLivePagedListBuilder
hinzugefügtDataSourceFactory.toObservable()
undtoFlowable()
als Kotlin-Alternativen fürRxPagedListBuilder
hinzugefügtAsyncPagedListDiffer.addPagedListListener()
wurde hinzugefügt, um zu erfassen, wenn PagedList getauscht wird. b/111698609- Die Variante
PagedListAdapter.onCurrentListChanged()
wurde hinzugefügt, die sowohl die alte als auch die neue Liste besteht. Die vorherige Variante wurde eingestellt. - Es wurden
PagedListAdapter/AsyncPagedListDiffer.submitList()
-Varianten hinzugefügt, die einen zusätzlichen Callback verwenden, der ausgelöst wird, wenn die PagedList nach dem Abgleich angezeigt wird. So können Sie einen PagedList-Tausch mit anderen UI-Updates synchronisieren. b/73781068 PagedList.getLoadedCount()
wurde hinzugefügt, um Ihnen mitzuteilen, wie viele Elemente sich im Arbeitsspeicher befinden. Der Rückgabewert ist immer gleich.size()
, wenn Platzhalter deaktiviert sind.
Fehlerkorrekturen
- Es wurde eine Race-Bedingung beim Vergleichen behoben, wenn Listen wiederverwendet werden. b/111591017
PagedList.loadAround()
löst jetztIndexOutOfBoundsException
aus, wenn der Index ungültig ist. Zuvor konnte die App mit einer unklaren anderen Ausnahme abstürzen.- Ein Fall wurde behoben, in dem eine extrem kleine anfängliche Ladegröße in Verbindung mit unveränderten Daten dazu führte, dass keine weiteren Daten geladen wurden. b/113122599
Version 2.0.0
Version 2.0.0
1. Oktober 2018
Die Paginierung 2.0.0
wird mit einem einzelnen Fehlerkorrektur-Release veröffentlicht.
Fehlerkorrekturen
- Ein Absturz wurde behoben, der bei sehr schnellem Scrollen mit
PositionalDataSource
und Platzhaltern auftreten konnte b/114635383.
Version 2.0.0-beta01
2. Juli 2018
Fehlerkorrekturen
- Es wurde ein Fehler behoben, durch den Inhalte in einigen Fällen mit Prepend-Anweisungen verschwanden (Platzhalter deaktiviert, PositionalDataSource) b/80149146
- (Bereits in
1.0.1
veröffentlicht) Abstürze wurden behoben, bei denenPagedListAdapter
undAsyncPagedListDiffer
keine Bewegungsereignisse signalisiert haben. b/110711937
Abhängigkeiten vor AndroidX
Für die Pre-AndroidX-Versionen von Paging, die folgen, müssen Sie diese Abhängigkeiten einfügen:
dependencies {
def paging_version = "1.0.0"
implementation "android.arch.paging:runtime:$paging_version"
// alternatively - without Android dependencies for testing
testImplementation "android.arch.paging:common:$paging_version"
// optional - RxJava support
implementation "android.arch.paging:rxjava2:$paging_version"
}
Version 1.0.1
Version 1.0.1
26. Juni 2018
Die Paginierung 1.0.1
wird mit einem einzelnen Fehlerkorrektur in runtime
veröffentlicht. Wir empfehlen dringend, 1.0.1
zu verwenden, um die Stabilität zu erhöhen. Paging RxJava2 1.0.1
wurde ebenfalls veröffentlicht und ist mit 1.0.0-rc1
identisch.
Fehlerkorrekturen
- Abstürze wurden behoben, bei denen
PagedListAdapter
undAsyncPagedListDiffer
keine Bewegungsereignisse signalisiert haben. b/110711937
RxJava2 Version 1.0.0
RxJava2 Version 1.0.0-rc1
16. Mai 2018
Paging RxJava2 1.0.0-rc1
wird zum Releasekandidaten, ohne dass sich etwas gegenüber der ursprünglichen Alphaversion ändert.
Version 1.0.0
Version 1.0.0-rc1
19. April 2018 Releasekandidat für Paging
Für die Veröffentlichung der Paginierung 1.0.0
sind keine weiteren bekannten Probleme oder neuen Funktionen geplant. Bitte führen Sie für Ihre Projekte ein Upgrade durch, damit 1.0.0-rc1
verwendet wird. Helfen Sie uns, die Funktion zu testen, damit wir eine stabile Version von 1.0.0
veröffentlichen können.
In diesem Release gibt es keine Änderungen. Es ist identisch mit 1.0.0-beta1
.
Version 1.0.0-beta1
5. April 2018
Die Paging-Funktion befindet sich für kurze Zeit in der Betaphase, bevor sie zum Release-Kandidaten wird.
Wir planen keine weiteren API-Änderungen für Paging 1.0
. Die Hürde für API-Änderungen ist sehr hoch.
Die Alpha-Unterstützung für RxJava2 für Paging wird als separates optionales Modul (android.arch.paging:rxjava2:1.0.0-alpha1
) veröffentlicht und wird vorübergehend separat versioniert, bis sie stabil ist.
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 zur Verdeutlichung der Rolle von Executors in Builders:
setBackgroundThreadExecutor()
wurde insetFetchExecutor()
umbenannt (inPagedList.Builder
undLivePagedListBuilder
)setMainThreadExecutor()
wurde insetNotifyExecutor()
umbenannt (inPagedList.Builder
).
Das
PagedList.mCallbacks
-Mitglied wurde als privat festgelegt.
Fehlerkorrekturen
LivePagedListBuilder
löst das anfängliche Laden vonPagedList
auf dem angegebenen Executor anstelle des Arch Components IO-Thread-Pools aus.Das Verhalten von „invalidate“ in internen
DataSource
-Wrappern wurde korrigiert (wird zur Implementierung vonDataSource.map
sowie zum Laden vonPositionalDataSource
verwendet, wenn Platzhalter deaktiviert sind). b/77237534
Version 1.0.0-alpha7
21. März 2018
Paging 1.0.0-alpha7
wird zusammen mit Lifecycles 1.1.1
veröffentlicht. Da Paging alpha7 von der oben erwähnten Verschiebung der Klasse Function
abhängt, müssen Sie die lifecycle:runtime
-Abhängigkeit auf android.arch.lifecycle:runtime:1.1.1
aktualisieren.
Die Version alpha7
ist die letzte Version vor der Betaphase.
API-Änderungen
DataSource.LoadParams
-Objekte haben jetzt einen öffentlichen Konstruktor undDataSource.LoadCallback
-Objekte sind jetzt abstrakt. So kann einDataSource
umschlossen oder einDataSource
direkt mit einem Mock-Callback getestet werden. b/72600421- Mappers für DataSource und DataSource.Factory
- Mit
map(Function<IN,OUT>)
können Sie Ergebnisse, die von einemDataSource
geladen werden, 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 eingestellten Klassen wurden aus der API entfernt, einschließlich der Überreste des Pakets
recyclerview.extensions
und derLivePagedListProvider
. DataSource.Factory
wurde von einer Schnittstelle in eine abstrakte Klasse geändert, um Kartenfunktionen zu ermöglichen.
Fehlerkorrekturen
- Builders wurden als „final“ festgelegt. b/70848565
- Die Implementierung von Room
DataSource
wurde korrigiert, um Anfragen mit mehreren Tabellen zu verarbeiten. Diese Korrektur ist in Room 1.1.0-beta1 enthalten (siehe oben). - Ein Fehler wurde behoben, bei dem
BoundaryCallback.onItemAtEndLoaded
fürPositionalDataSource
nicht aufgerufen wurde, wenn Platzhalter aktiviert sind und die Gesamtgröße ein genaues Vielfaches der Seitengröße ist.
Version 1.0.0-alpha5
22. Januar 2018
Fehlerkorrekturen
- Probleme beim Laden von Seiten beheben, wenn Platzhalter deaktiviert sind b/70573345
- Zusätzliches Logging zur Behebung des IllegalArgumentException-Fehlers b/70360195 (und spekulative Korrektur auf Room-Seite)
- Korrekturen am Javadoc-Beispielcode b/70411933, b/71467637