Paging

Mit der Paging Library können Sie Daten in der RecyclerView Ihrer App einfacher schrittweise und reibungslos laden.

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
Diese Bibliothek wurde zuletzt am 2. Juli 2025 aktualisiert.

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.

Neues Problem erstellen

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

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 Fehler IndexOutOfBoundsException ausgibt, wenn der Nutzer scrollt, während RecyclerView 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

  • Vielen Dank an Eva für die Einreichung der Fehlerkorrektur (#754)

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 Fehler IndexOutOfBoundsException ausgibt, wenn der Nutzer scrollt, während RecyclerView 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 und paging-testing haben neue Kotlin Multiplatform-Ziele hinzugefügt: watchos, tvos und linuxArm64 (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 verwendete AsyncPagingDataDiffer oder darauf basierende APIs wie PagingDataAdapter 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 einem PagingDataAdapter oder AsyncPagingDataDiffer 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 auf PagingDataPresenter aufgebaut werden, ohne dass interne Paging-APIs oder AsyncPagingDataDiffer von paging-runtime erforderlich sind.
  • In hasError und isIdle wurden die neuen Hilfsmethoden LoadStates und CombinedLoadStates hinzugefügt, um zu prüfen, ob sich LoadStates im Status „Error“ (Fehler) oder „NotLoading“ befindet. Außerdem wurde eine neue awaitNotLoading()-Kotlin-Erweiterungsmethode für Flow<CombinedLoadStates> hinzugefügt, die wartet, bis ein Ladevorgang entweder den Status NotLoading oder „Fehler“ erreicht hat.
  • PagingData.empty() löst jetzt standardmäßig NotLoading-Zustände aus, sofern keine benutzerdefinierten LoadStates an den Konstruktor übergeben werden. Das weicht vom bisherigen Verhalten ab, bei dem LoadStates nicht gesendet wird, wenn es an PagingDataAdapter übermittelt wird, oder Ladestatus gesendet werden, wenn sie als LazyPagingItems erfasst werden. Wenn sie als LazyPagingItems 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 zu common verschoben und ist jetzt neben Android auch mit JVM und iOS kompatibel.
  • Der Code von paging-testing wurde zu common verschoben und ist jetzt neben Android auch mit JVM und iOS kompatibel.
  • paging-compose hat seinen Code zu common verschoben und liefert ein Android-Artefakt, das der Multiplattform-Unterstützung von androidx.compose entspricht.
  • paging-runtime, paging-guava, paging-rxjava2 und paging-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 auf PagingDataPresenter aufgebaut werden, ohne dass interne Paging-APIs oder AsyncPagingDataDiffer von paging-runtime erforderlich sind. (Id1f74, b/315214786)
  • Es wurden neue Hilfsmethoden LoadStates und CombinedLoadStates hinzugefügt, um zu prüfen, ob sich LoadStates im Status „Error“ (Fehler) oder „NotLoading“ befindet. Außerdem wurde eine neue API hinzugefügt, die auf eine LoadStateFlow wartet, bis sich eine Last entweder im Status NotLoading oder im Fehlerstatus befindet. (Id6c67)

Verhaltensänderung

  • PagingData.empty() löst jetzt standardmäßig NotLoading-Zustände aus, sofern keine benutzerdefinierten LoadStates an den Konstruktor übergeben werden. Das weicht vom bisherigen Verhalten ab, bei dem LoadStates nicht gesendet wird, wenn es an PagingDataAdapter übermittelt wird, oder Ladestatus gesendet werden, wenn sie als LazyPagingItems erfasst werden. Wenn sie als LazyPagingItems 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 zu common verschoben und ist jetzt neben Android auch mit JVM und iOS kompatibel.
  • Der Code von paging-testing wurde zu common verschoben und ist jetzt neben Android auch mit JVM und iOS kompatibel.
  • paging-compose hat seinen Code zu common verschoben und liefert ein Android-Artefakt, das der Multiplattform-Unterstützung von androidx.compose entspricht.
  • paging-runtime, paging-guava, paging-rxjava2 und paging-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

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-Varianten 3.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 mit PagingData.from(List) erstellter Flow übergeben wurde, da asSnapshot() keine Informationen darüber hatte, wann das Laden abgeschlossen war (im Gegensatz zur PagingData.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 die PagingData.from-Überladung, die LoadStates 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 dieses PagingData in einem MutableStateFlow (z.B. MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Übergeben Sie diesen Flow als Empfänger für collectAsLazyPagingItems() an @Preview-Composable-Funktionen, um eine Vorschau zu erstellen.
    • Unterstützung für alle Lazy-Layouts wie LazyVerticalGrid und HorizontalPager sowie benutzerdefinierte Lazy-Komponenten aus Wear- und TV-Bibliotheken. Dies wurde durch neue LazyPagingItems-Erweiterungsmethoden auf niedrigerer Ebene itemKey und itemContentType erreicht. So können Sie die Parameter key und contentType in den Standard-items-APIs implementieren, die bereits für LazyColumn, LazyVerticalGrid sowie deren Entsprechungen in APIs wie HorizontalPager vorhanden sind.
    • items(lazyPagingItems) und itemsIndexed(lazyPagingItems), die nur LazyListScope unterstützen, wurden eingestellt.
  • 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 benutzerdefinierten PagingSource-Implementierung unabhängig vom Pager und der tatsächlichen Benutzeroberfläche zu validieren.
    • ​​asPagingSourceFactory-APIs zum Transformieren eines Flow<List<Value>> oder einer statischen List<Value> in ein PagingSourceFactory, das in Tests an einen Pager übergeben werden kann
    • asSnapshot Kotlin-Erweiterung für Flow<PagingData<Value>>, die Flow<PagingData<Value>> in eine direkte List<Value> übersetzt. Mit asSnapshot lambda können Sie die Benutzeroberfläche Ihrer App über APIs wie scrollTo oder appendScrollWhile simulieren, um den Snapshot der Daten an einem beliebigen Punkt in Ihren paginierten Daten zu überprüfen.
  • Es wurden Standardlogs hinzugefügt, um Paging-Debugging-Informationen auf zwei Ebenen verfügbar zu machen: VERBOSE und DEBUG. Die Logs können mit dem Befehl adb 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 und AsyncPagingDataDiffer hinzugefügt, die CoroutineContext anstelle von CoroutineDispatcher 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

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 eine Pager instanziiert werden. (I33165, b/280655188)
  • Die neue paging-testing API von List<Value>.asPagingSourceFactory() wurde hinzugefügt, um eine PagingSourceFactory abzurufen, die nur aus einer unveränderlichen Liste von Daten geladen wird. Die vorhandene Erweiterung auf Flow<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 kein CoroutineScope 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 echten Pager-Konstruktorparameter zu entsprechen (I6185a).
  • Die Verwendung des Lambda-Typs () -> PagingSource<Key, Value> für das Paging-Testing wurde zu Typ PagingSourceFactory<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 Parameter loadOperations jetzt standardmäßig auf eine leere Lambda-Funktion gesetzt. So kann asSnapshot 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 ein Flow handelt, die eine wiederverwendbare Factory zum Generieren von PagingSource-Instanzen zurückgibt. (I5ff4f, I705b5)
  • Die Dokumentation zum LoadResult.Page-Konstruktor wurde aktualisiert, um klarzustellen, dass itemsBefore und itemsAfter überschrieben werden müssen, um Sprünge zu unterstützen. (Ied354)

Externe Beiträge

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 eine asPagingSourceFactory-Methode zum Erstellen eines pagingSourceFactory aus einem Flow<List<Value>>, das an einen Pager übergeben werden soll. Jedes List<Value>>, das vom Flow ausgegeben wird, stellt eine Generierung von paginierten Daten dar. So können beispielsweise Paging-Tests für PagingData-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 einem Flow<PagingData<T>> überprüfen lassen. Dies kann beispielsweise verwendet werden, um die Ausgabe einer Flow<PagingData<T>> aus der ViewModel-Ebene zu bestätigen.

    Dies erfolgt über die asSnapshot-Kotlin-Erweiterung für Flow<PagingData<Value>>, die Flow<PagingData<Value>> in ein direktes List<Value> übersetzt. Mit der asSnapshot-Lambdafunktion können Sie die Benutzeroberfläche Ihrer App über APIs wie scrollTo oder appendScrollWhile 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 eine suspend-Methode, die voraussichtlich in runTest 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 und peek in AsyncPagingDataDiffer und PagingDataAdapter 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 bis LoadResult.Page.iterator(). Dadurch kann indirekt die Kotlin-Standardbibliotheksmethode flatten verwendet werden, wenn ein List<LoadResult.Page> angegeben wird, z. B. mit der pages-Eigenschaft von PagingState, die an die PagingSource.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 AsyncPagingDataDifferoder PagingDataAdapter bereitgestellt, um Debugging-Informationen aus PagingData verfügbar zu machen.
  • Die Logs können über den adb shell-Befehl adb shell setprop log.tag.Paging [DEBUG|VERBOSE]. aktiviert werden(b/235527159).

Fehlerkorrekturen

  • Der Fehler „PagingDataDiffer-Konstruktor fehlt“ bei der Verwendung von paging-common:3.2.0-alpha01 mit der 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 veröffentlicht. Version 3.2.0-alpha01 enthält diese Commits.

API-Änderungen

  • Es wurden Konstruktoren für PagingDataAdapter und AsyncPagingDataDiffer hinzugefügt, die CoroutineContext anstelle von CoroutineDispatcher akzeptieren. (Idc878)
  • Standardmäßig wirken sich PagingData.from() und PagingData.empty() nicht mehr auf CombinedLoadStates auf der Seite des Moderators aus. Es wurde eine neue Überladung hinzugefügt, mit der sourceLoadStates und remoteLoadStates an diese Konstruktoren übergeben werden können, um das vorhandene Verhalten beizubehalten, bei dem LoadStates vollständig terminal ist (d.h. NotLoading(endOfPaginationReached = false)) mit der Option, bei Bedarf auch Remote-Status einzubeziehen. Wenn LoadStates nicht übergeben werden, wird die vorherige CombinedLoadStates auf der Seite des Moderators beibehalten, wenn er die statische PagingData empfängt. (Ic3ce5, b/205344028)

Fehlerkorrekturen

  • Das Ergebnis von PagingSource.getRefreshKey() wird jetzt korrekt gegenüber initialKey priorisiert, wenn es „null“ zurückgeben würde, aber ein initialKey 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 auf LoadState-Änderungen erheblich, da redundante LoadState.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 und Flow<PagingData>.flowable sind nicht mehr experimentell.
  • Verhaltensänderungen bei LoadState:
    • endOfPaginationReached ist jetzt immer false für LoadType.REFRESH für PagingSource und RemoteMediator.
    • LoadStates aus der Paginierung wartet jetzt auf gültige Werte von PagingSource und RemoteMediator, bevor es downstream ausgegeben wird. Neue Generationen von PagingData beginnen jetzt immer korrekt mit Loading für den Aktualisierungsstatus, anstatt in einigen Fällen fälschlicherweise auf NotLoading zurückgesetzt zu werden.
    • .loadStateFlow und .addLoadStateListener senden bei Presenter-APIs nicht mehr redundant ein anfängliches CombinedLoadStates, bei dem die Vermittlerstatus immer auf null gesetzt sind.
  • Die Kündigung bei früheren Generationen erfolgt jetzt sofort bei Ungültigkeit / neuen Generationen. Die Verwendung von .collectLatest auf Flow<PagingData> ist nicht mehr erforderlich, wird aber weiterhin empfohlen.
  • PagingSource.LoadResult.Invalid wurde als neuer Rückgabetyp von PagingSource.load hinzugefügt. Dadurch verwirft Paging alle ausstehenden oder zukünftigen Ladeanfragen an diesen PagingSource 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 und Flow<PagingData>.flowable sind nicht mehr experimentell. (Ie0bdd)

Fehlerkorrekturen

  • Für LoadStates ist endOfPaginationReached jetzt immer false für LoadType.REFRESH. Bisher konnte „endOfPaginationReached“ für „RemoteMediator“ REFRESH, aber nicht für „PagingSource“ true sein. Dieses Verhalten wurde jetzt konsolidiert, sodass immer false 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ängliches CombinedLoadStates gesendet, bei dem die Mediator- und Quellstatus immer auf null bzw. NotLoading(endOfPaginationReached = false) gesetzt sind. Das bedeutet Folgendes:

    1. Mediator-Status werden immer ausgefüllt, wenn Sie RemoteMediator verwenden.
    2. 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 echtes CombinedLoadStates von PagingData empfangen wurde. Das kann passieren, wenn ein Collector oder Listener gestartet wird, bevor ein PagingData 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 Paket androidx.paging.rxjava3, damit sie nicht mit paging-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 diese PagingData in eine MutableStateFlow 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 von collectAsLazyPagingItems() LazyPagingItems mit Vorschau bereitgestellt. (I8a78d, b/194544557)

Fehlerkorrekturen

  • Zwischengespeicherte Daten aus pager.flow.cachedIn, die in LazyPagingItems 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 und itemsIndexed für LazyListScope jetzt einen contentType-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 von collectLazyPagingItems 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 von paging-compose:1.0.0-alpha15 mit paging-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 und AsyncPagingDataDiffer hinzugefügt, die CoroutineContext anstelle von CoroutineDispatcher akzeptieren. (Idc878)

Fehlerkorrekturen

  • Mit LazyPagingItems wird jetzt die anfängliche loadState auf eine LoadState.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 Attribut LazyPagingItems.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) und itemsIndexed(lazyPagingItems), die zum Verbinden von Paging mit LazyColumn/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 stattdessen lazyPagingItems[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-Version 1.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 und CombinedLoadStates.append werden jetzt erst von Loading zu NotLoading geändert, wenn sowohl der Mediator- als auch der Quellladezustand NotLoading 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() wurden LazyPagingItems hinzugefügt, um dieselbe Funktionalität wie in AsyncPagingDataDiffer / 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 von LivePagedList oder RxPagedList 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 immer null 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 die DataSource-APIs der Version 2 über Kompatibilitätspfade verwendet wurden.
  • Der isInvalid-Aufruf während der Initialisierung von DataSource wird bei Verwendung über Kompatibilitätspfade jetzt korrekt auf „fetchDispatcher“ anstelle des Hauptthreads gestartet. Dadurch wird ein IllegalStateException behoben, der durch den Datenbankzugriff im Hauptthread bei Verwendung der PagingSource-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 einfach null zurückgibt, aber getRefreshKey() 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 über PagingState.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ährend adapter.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 und CombinedLoadStates.append werden jetzt erst von Loading zu NotLoading geändert, wenn sowohl der Mediator- als auch der Quellladezustand NotLoading 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 immer PagingConfig.pageSize, mit Ausnahme des Aufrufs für das anfängliche Laden, bei dem es PagingConfig.initialLoadSize entspricht.

    Wenn Sie Ihre Paging2-DataSource testen, ohne einen Pager oder eine PagedList zu verwenden, stimmt pageSize möglicherweise nicht mit PagingConfig.pageSize überein, wenn Sie auch initialLoadSize 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 liegende DataSource 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 und dataRefreshListener 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 }
    

    (Ib5570, b/173530908)

Fehlerkorrekturen

  • „endOfPaginationReached“ für „RemoteMediator“ REFRESH wird jetzt korrekt an „LoadState“-Updates weitergegeben und verhindert, dass die Remote-Elemente APPEND und PREPEND 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- oder APPEND-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 und PagingSource.load(LoadParams.Refresh(...)) abgeschlossen sind, bevor RemoteMediator.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, wenn PagingDataAdapter.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 wurde AsyncPagingDataDiffer und PagingDataAdapter hinzugefügt, um den Zugriff auf präsentierte Daten ohne Triggerseitenladevorgänge zu ermöglichen. (I38898, b/159104197)
  • Der snapshot() API wurde PagingDataAdapter und AsyncPagingDataDiffer 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 und RemoteMediator hinzugefügt (I49ef3, b/161480176)

Fehlerkorrekturen

  • PositionalDataSource wurde über den toPagingSourceFactory-Helfer in PagingSource konvertiert. Dazu gehört auch, dass von Room generierte PagingSource 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 und AsyncPagingDataDiffer mit gemeinsamen Standardwerten hinzugefügt (Ie91f5)
  • Die Adapter-APIs dataRefreshFlow und dataRefreshListener übergeben jetzt einen booleschen Wert, um anzugeben, ob ein PagingData 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() und firstItemOrNull() 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 mehreren PagingData, wenn sie nach der suspendierenden Version von submitData 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

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ür PagedList.Config.Builder hinzugefügt
  • androidx.paging.PagedList() wurde als Kotlin-Alternative für PagedList.Builder hinzugefügt
  • DataSourceFactory.toLiveData() wurde als Kotlin-Alternative für LivePagedListBuilder hinzugefügt
  • DataSourceFactory.toObservable() und toFlowable() als Kotlin-Alternativen für RxPagedListBuilder hinzugefügt
  • AsyncPagedListDiffer.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 jetzt IndexOutOfBoundsException 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 denen PagedListAdapter und AsyncPagedListDiffer 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 und AsyncPagedListDiffer 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 Observables und Flowables erstellt werden können. Dabei werden Schedulers anstelle von Executors verwendet:

Kotlin

val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50)
        .setFetchScheduler(myNetworkScheduler)
        .buildObservable()

Java

Observable<PagedList<Item>> pagedItems =
        RxPagedListBuilder(myDataSource, /* page size */ 50)
                .setFetchScheduler(myNetworkScheduler)
                .buildObservable();

Neue Funktionen

  • RxPagedListBuilder wird über das neue android.arch.paging:rxjava2-Artefakt hinzugefügt.

API-Änderungen

  • API-Änderungen zur Verdeutlichung der Rolle von Executors in Builders:

    • setBackgroundThreadExecutor() wurde in setFetchExecutor() umbenannt (in PagedList.Builder und LivePagedListBuilder)

    • setMainThreadExecutor() wurde in setNotifyExecutor() umbenannt (in PagedList.Builder).

  • Das PagedList.mCallbacks-Mitglied wurde als privat festgelegt.

Fehlerkorrekturen

  • LivePagedListBuilder löst das anfängliche Laden von PagedList 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 von DataSource.map sowie zum Laden von PositionalDataSource 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 und DataSource.LoadCallback-Objekte sind jetzt abstrakt. So kann ein DataSource umschlossen oder ein DataSource 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 einem DataSource 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).
  • 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 der LivePagedListProvider.
  • 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ür PositionalDataSource 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