Auslagerung

Mit der Paging-Bibliothek können Sie Daten schrittweise und reibungslos in den RecyclerView Ihrer App laden.

In dieser Tabelle sind alle Artefakte in der Gruppe androidx.paging aufgeführt.

Artefakt Stabile Version Release Candidate Beta-Ausgabe Alphaversion
paging-* 3.3.5 - -
paging-compose 3.3.5 - -
Diese Bibliothek wurde zuletzt am 11. Dezember 2024 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 erforderlichen Artefakte hinzu:

Cool

dependencies {
  def paging_version = "3.3.2"

  implementation "androidx.paging:paging-runtime:$paging_version"

  // alternatively - without Android dependencies for tests
  testImplementation "androidx.paging:paging-common:$paging_version"

  // optional - RxJava2 support
  implementation "androidx.paging:paging-rxjava2:$paging_version"

  // optional - RxJava3 support
  implementation "androidx.paging:paging-rxjava3:$paging_version"

  // optional - Guava ListenableFuture support
  implementation "androidx.paging:paging-guava:$paging_version"

  // optional - Jetpack Compose integration
  implementation "androidx.paging:paging-compose:3.3.2"
}

Kotlin

dependencies {
  val paging_version = "3.3.2"

  implementation("androidx.paging:paging-runtime:$paging_version")

  // alternatively - without Android dependencies for tests
  testImplementation("androidx.paging:paging-common:$paging_version")

  // optional - RxJava2 support
  implementation("androidx.paging:paging-rxjava2:$paging_version")

  // optional - RxJava3 support
  implementation("androidx.paging:paging-rxjava3:$paging_version")

  // optional - Guava ListenableFuture support
  implementation("androidx.paging:paging-guava:$paging_version")

  // optional - Jetpack Compose integration
  implementation("androidx.paging:paging-compose:3.3.2")
}

Weitere 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. Bitte teilen Sie uns mit, wenn Sie neue Probleme feststellen 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 einem vorhandenen Problem Ihre Stimme geben, indem Sie auf die Schaltfläche mit dem Stern klicken.

Neues Problem erstellen

Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.

Version 3.3

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, durch den RecyclerView IndexOutOfBoundsException zurückgab, wenn der Nutzer beim Aktualisieren von RecyclerView scrollte. (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-Unit-Tests, bei denen Paging 3.3 oder höher eingebunden 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

  • Für paging-common und paging-testing wurden neue Kotlin Multiplatform-Zielgruppen 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, durch das AsyncPagingDataDiffer oder darauf aufbauende APIs wie die PagingDataAdapter, die mit RecyclerView verwendet wird, keine weiteren Ladevorgänge auslösen konnten, wenn die zugrunde liegende Datenquelle beim Scrollen aktualisiert wurde. (I60ca5, b/352586078)
  • Ein Absturz wurde behoben, der beim Entfernen von Elementen aus der zugrunde liegenden Datenquelle beim Scrollen durch eine RecyclerView mithilfe einer PagingDataAdapter oder AsyncPagingDataDiffer auftrat. (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 basieren, anstatt interne Paging-APIs oder die AsyncPagingDataDiffer von paging-runtime zu benötigen.
  • In hasError und isIdle wurden neue LoadStates- und CombinedLoadStates-Hilfsmethoden hinzugefügt, um zu prüfen, ob LoadStates bzw. NotLoading den Status „Fehler“ hat. Außerdem wurde eine neue awaitNotLoading()-Kotlin-Erweiterungsmethode für Flow<CombinedLoadStates> hinzugefügt, die wartet, bis eine Ladung den Status NotLoading oder „Fehler“ erreicht hat.
  • PagingData.empty() sendet jetzt standardmäßig NotLoading-Status, es sei denn, dem Konstruktor werden benutzerdefinierte LoadStates übergeben. Das unterscheidet sich vom bisherigen Verhalten, bei dem LoadStates nicht gesendet wird, wenn es an eine PagingDataAdapter gesendet wird, oder es werden Ladestatus gesendet, wenn es als LazyPagingItems erfasst wird. Wenn die Daten als LazyPagingItems erfasst werden, wird jetzt auch sofort nach der ersten Zusammenstellung eine leere Liste angezeigt.

Kompatibilität von Kotlin Multiplatform

Die Auslieferung von Artefakten, die mit Kotlin Multiplatform kompatibel sind, ist jetzt möglich. Dies ist vor allem auf die Upstream-Arbeiten aus dem Multi-Plattform-Paging-Projekt von CashApp zurückzuführen.

  • paging-common hat alle Paging 3 APIs zu common verschoben und ist jetzt zusätzlich zu Android mit jvm und iOS kompatibel.
  • paging-testing hat seinen Code zu common verschoben und ist jetzt zusätzlich zu Android mit JVM und iOS kompatibel.
  • paging-compose hat seinen Code zu common verschoben und stellt ein Android-Artefakt bereit, das der Multiplattformunterstützung von androidx.compose entspricht.
  • paging-runtime, paging-guava, paging-rxjava2 und paging-rxjava3 sind weiterhin 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 Auslagerung wird jetzt die AndroidX-Anmerkung @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

  • Kleinere Dokumentationsfehler im Zusammenhang mit der Einführung der Kotlin-Plattformübergreifenden Kompatibilität wurden 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 basieren, anstatt interne Paging-APIs oder die AsyncPagingDataDiffer von paging-runtime zu benötigen. (Id1f74, b/315214786)
  • Es wurden neue LoadStates- und CombinedLoadStates-Hilfsmethoden hinzugefügt, um zu prüfen, ob LoadStates den Status „Fehler“ oder NotLoading hat. Außerdem wurde eine neue API hinzugefügt, die auf eine LoadStateFlow wartet, bis eine Ladung den Status NotLoading oder „Fehler“ erreicht hat. (Id6c67)

Verhaltensänderung

  • PagingData.empty() sendet jetzt standardmäßig NotLoading-Status, es sei denn, dem Konstruktor werden benutzerdefinierte LoadStates übergeben. Das unterscheidet sich vom bisherigen Verhalten, bei dem LoadStates nicht gesendet wird, wenn es an eine PagingDataAdapter gesendet wird, oder es werden Ladestatus gesendet, wenn es als LazyPagingItems erfasst wird. Wenn die Daten als LazyPagingItems erfasst werden, wird jetzt auch sofort nach der ersten Zusammenstellung 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 von Kotlin Multiplatform

Die Auslieferung von Artefakten, die mit Kotlin Multiplatform kompatibel sind, ist jetzt möglich. Dies ist vor allem auf die Upstream-Arbeiten aus dem Multi-Plattform-Paging-Projekt von CashApp zurückzuführen. So können wir Abweichungen zwischen zwei Repositories vermeiden und sie kompatibel halten.

  • paging-common hat alle Paging 3 APIs zu common verschoben und ist jetzt zusätzlich zu Android mit jvm und iOS kompatibel.
  • paging-testing hat seinen Code zu common verschoben und ist jetzt zusätzlich zu Android mit JVM und iOS kompatibel.
  • paging-compose hat seinen Code zu common verschoben und stellt ein Android-Artefakt bereit, das der Multiplattformunterstützung von androidx.compose entspricht.
  • paging-runtime, paging-guava, paging-rxjava2 und paging-rxjava3 sind weiterhin nur für Android verfügbar.

API-Änderungen

  • Die öffentliche Logger-Schnittstelle, die nur für die interne Nutzung gedacht war, wurde eingestellt (I16e95, b/288623117)

Externer Beitrag

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. Für macOS-, iOS- und Linux-Varianten verwenden Sie 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-Test-Artefakts hängen blieb, wenn ein mit PagingData.from(List) erstellter Ablauf übergeben wurde, da asSnapshot() im Gegensatz zur PagingData.from(List, LoadStates)-Überladung keine Informationen dazu hatte, wann das Laden abgeschlossen ist. Diese Problemumgehung funktioniert nur für abzuschließende Abläufe (z.B. flowOf(PagingData.from(...))). Bei nicht abzuschließenden Abläufen (z.B. MutableStateFlow, verwenden Sie die PagingData.from-Überladung, die LoadStates bereitstellt). (I502c3)
  • Bei der Paginierung wird jetzt intern AndroidUiDispatcher.Main verwendet, damit neue Daten im selben Frame verfügbar sind, sobald das Laden abgeschlossen ist. (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 mit dem Rest von Paging zusammengeführt. Die Version stimmt jetzt mit allen anderen Paging-Artefakten überein. Zu den Änderungen seit Version 3.1.0 gehören:
    • Unterstützung für die Vorschau einer Liste mit fiktiven Daten. Erstelle dazu eine PagingData.from(fakeData) und greife diese PagingData in einer MutableStateFlow (z. B. MutableStateFlow(PagingData.from(listOf(1, 2, 3)))) auf. Übergebe diesen Fluss als Empfänger an @Preview-Kompositionen, um eine Vorschau von collectAsLazyPagingItems() zu erhalten.
    • 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 der unteren 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 und ihre Entsprechungen in APIs wie HorizontalPager verfügbar sind.
    • items(lazyPagingItems) und itemsIndexed(lazyPagingItems), die nur LazyListScope unterstützen, wurden eingestellt.
  • Neues paging-testing-Artefakt mit APIs, die für die Durchführung von Unit-Tests für jede Schicht Ihrer App und deren Integration mit dem Paging entwickelt wurden. Dazu gehören beispielsweise:
    • TestPager-Klasse, mit der Sie das Verhalten Ihrer eigenen benutzerdefinierten PagingSource-Implementierung unabhängig vom Pager und der tatsächlichen Benutzeroberfläche validieren können.
    • ​​asPagingSourceFactory APIs, mit denen entweder ein Flow<List<Value>> oder ein statisches List<Value> in ein PagingSourceFactory umgewandelt werden kann, 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 der asSnapshot lambda können Sie die Benutzeroberfläche Ihrer App über APIs wie scrollTo oder appendScrollWhile nachahmen, damit Sie jederzeit prüfen können, ob der Daten-Snapshot in Ihrem Satz von paginaten Daten korrekt ist.
  • Es wurden Standardprotokolle hinzugefügt, um Informationen zur Fehlerbehebung bei der Auslagerung auf zwei Ebenen bereitzustellen: VERBOSE und DEBUG. Die Protokolle können über den Befehl adb shell setprop log.tag.Paging [DEBUG|VERBOSE] aktiviert werden. Das gilt sowohl für die Seitennavigation mit Ansichten als auch für die Seitennavigation mit Compose.
  • Es wurden Konstruktoren für PagingDataAdapter und AsyncPagingDataDiffer hinzugefügt, die CoroutineContext anstelle von CoroutineDispatcher akzeptieren.
  • Es wurde eine neue PagingSourceFactory-Funktionsschnittstelle hinzugefügt, die eine explizitere API-Oberfläche bietet als die vorherigen Lambdas vom Typ () -> PagingSource. 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.

Externer Beitrag

  • Vielen Dank an Veyndan, der dazu beigetragen hat, dass das Auslagern nicht mehr von Android-/JVM-spezifischen Funktionen abhängt. (#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 die API-Stabilität erreicht. Daher wurde die Version von 1.0.0-alpha20 auf die Version aller anderen Paginierungsartefakte aktualisiert.

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 PagingSourceFactory-Funktionsoberfläche hinzugefügt, die eine explizitere API-Oberfläche als die vorhandenen () -> PagingSource-Lambdas bietet. Mit dieser Fabrik kann eine Pager instanziiert werden. (I33165, b/280655188)
  • Neue paging-testing API von List<Value>.asPagingSourceFactory() hinzugefügt, um eine PagingSourceFactory abzurufen, die nur aus einer unveränderlichen Datenliste geladen wird. Die vorhandene Erweiterung für Flow<List<Value>> sollte weiterhin für Tests mit mehreren Generationen statischer Daten verwendet werden. (Id34d1, b/280655188)

API-Änderungen

  • Alle öffentlichen APIs in den Tests für die Seitensuche sind jetzt mit @VisibleForTesting gekennzeichnet, damit sichergestellt wird, 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, damit sie der Reihenfolge der Parameter des Pager-Konstruktors entsprechen (I6185a)
  • Beim migrierten Auslagerungstest wurde der Lambda-Typ () -> PagingSource<Key, Value> in PagingSourceFactory<Key, Value> geändert. (I4a950, b/280655188)

Verhaltensänderungen

  • Der Haupt-Dispatcher ist nicht mehr erforderlich, um asSnapshot-Suchtests auszuführen. Das Testverhalten ändert sich dadurch 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

  • Die Paging Testing API von asSnapshot verwendet jetzt standardmäßig ein leeres Lambda für den Parameter loadOperations. So können Sie asSnapshot aufrufen, ohne Ladevorgänge anzugeben, um die Daten aus dem ursprünglichen Aktualisierungsladevorgang abzurufen. (Ied354, b/277233770)

Verbesserungen an der Dokumentation

  • Die Dokumentation zu asPagingSourceFactory() wurde aktualisiert, um zu verdeutlichen, dass es sich um eine Erweiterungsmethode für eine Flow handelt, die eine wiederverwendbare Fabrik 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 das Springen 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.

Auslagerungstests

  • Das paging-testing-Artefakt enthält jetzt eine asPagingSourceFactory-Methode, mit der eine pagingSourceFactory aus einer Flow<List<Value>> erstellt wird, die an einen Pager übergeben werden soll. Jedes List<Value>>, das vom Ablauf gesendet wird, stellt eine Generation von paginaten Daten dar. Dies erleichtert die Seitentests für beispielsweise PagingData-Transformationen, da eine Datenquelle gefälscht werden kann, aus der der Pager Daten abrufen kann. (I6f230, b/235528239)
  • Das paging-testing-Artefakt wurde um neue APIs erweitert, mit denen die Richtigkeit der Daten in einem Flow<PagingData<T>> überprüft werden kann. So können Sie beispielsweise die Ausgabe einer Flow<PagingData<T>> aus Ihrer ViewModel-Ebene prüfen.

    Dies geschieht über die asSnapshot-Kotlin-Erweiterung in Flow<PagingData<Value>>, die Flow<PagingData<Value>> in eine direkte List<Value> übersetzt. Mit dem asSnapshot-Lambda können Sie die Benutzeroberfläche Ihrer App über APIs wie scrollTo oder appendScrollWhile auf wiederholbare und konsistente Weise nachahmen, damit Sie jederzeit prüfen können, ob der Daten-Snapshot in Ihrem Satz von paginaten Daten korrekt ist.

    // Create your ViewModel instance
    val viewModel = 
    // Get the Flow of PagingData from the ViewModel
    val data< Flow<PagingData<String>> = viewModel.data
    val snapshot: List<String> = data.asSnapshot {
      // Each operation inside the lambda waits for the data to settle before continuing
      scrollTo(index = 50)
    
      // While you can’t view the items within the asSnapshot call,
      // you can continuously scroll in a direction while some condition is true
      // i.e., in this case until you hit a placeholder item
      appendScrollWhile {  item: String -> item != Header 1 }
    }
    // With the asSnapshot complete, you can now verify that the snapshot
    // has the expected 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 von getItem und peek in AsyncPagingDataDiffer und PagingDataAdapter sind jetzt korrekt als nur im Hauptthread aufrufbar gekennzeichnet. (I699b6)
  • Platzhalter wurden aus generischen Typen entfernt, die von TestPager verwendet werden. Dadurch können die Ergebnisse dieser Methoden einfacher in Code verwendet werden, der in der Programmiersprache Java 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.

Auslagerungstests

Dieser Release enthält ein neues Artefakt: paging-testing. Dieses Artefakt enthält APIs, die für Unit-Tests jeder Schicht Ihrer App und ihrer Integration mit dem Paging 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 realen Benutzeroberfläche validieren können, die Sie normalerweise zur Simulation der End-to-End-Paging-Integration benötigen.

TestPager sollte als Fake betrachtet werden – ein Test-Double, der die tatsächliche Implementierung von Pager widerspiegelt und gleichzeitig eine vereinfachte API-Oberfläche zum Testen einer PagingSource bietet. Diese APIs sind suspend-APIs und sollten wie im Leitfaden zum Testen von Kotlin-Coroutinen auf Android beschrieben in runTest ausgeführt werden.

Ein Beispiel für die Verwendung dieser APIs finden Sie in den room-paging-Tests, die für die Verwendung von TestPager umgeschrieben wurden.

API-Änderungen

  • Ermöglicht eine praktische Iteration von LoadResult.Page.data bis LoadResult.Page.iterator(). So ist die indirekte Verwendung der flatten-Methode der Kotlin-Standardbibliothek möglich, wenn ein List<LoadResult.Page> übergeben wird, z. B. die 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

  • Die Auslagerung stellt jetzt Logs über die Klassen AsyncPagingDataDiffer oder PagingDataAdapter bereit, um Debug-Informationen aus PagingData zu erfassen.
  • Die Logs können über den Befehl adb shell adb shell setprop log.tag.Paging [DEBUG|VERBOSE]. aktiviert werden(b/235527159).

Fehlerkorrekturen

  • Der Fehler beim fehlenden PagingDataDiffer-Konstruktor bei 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 Vortragenden aus. Es wurde eine neue Überladung hinzugefügt, mit der sourceLoadStates und remoteLoadStates an diese Konstruktoren übergeben werden können, um das bestehende Verhalten beizubehalten, bei dem LoadStates als vollständig terminal (d.h. NotLoading(endOfPaginationReached = false)), mit der Option, bei Bedarf auch Remote-Status einzuschließen. Wenn keine LoadStates übergeben werden, wird die vorherige CombinedLoadStates auf der Seite des Vortragenden beibehalten, wenn er die statische PagingData empfängt. (Ic3ce5, b/205344028)

Fehlerkorrekturen

  • Das Ergebnis von PagingSource.getRefreshKey() wird jetzt in Fällen, in denen es „null“ zurückgeben würde, aber eine nicht-null-Wert-initialKey festgelegt wurde, korrekt vor initialKey priorisiert. (Ic9542, b/230391606)

Externer Beitrag

  • :compose:ui:ui-test API (updateApi) aufgrund der Migration von test-coroutines-lib aktualisiert (I3366d)

Version 3.1

Version 3.1.1

9. März 2022

androidx.paging:paging-*:3.1.1 wird veröffentlicht. Version 3.1.1 enthält diese Commits.

Fehlerkorrekturen

  • Zwischen den Generationen wurden LoadState.NotLoading-Ereignisse entfernt, die von .cachedIn() fälschlicherweise eingefügt wurden. Durch diese Änderung lässt sich viel einfacher auf LoadState-Änderungen reagieren, da redundante LoadState.NotLoading-Ereignisse entfernt werden, die zwischen den Wiederholungen fehlgeschlagener Ladevorgänge, beim Aktualisieren oder bei der Ungültigmachung generiert 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

  • Flow<PagingData>.observable und Flow<PagingData>.flowable APIs sind nicht mehr experimentell
  • Verhalten ändert sich bei LoadState:
    • endOfPaginationReached ist jetzt immer false für LoadType.REFRESH, sowohl für PagingSource als auch für RemoteMediator.
    • LoadStates aus dem Paging wartet jetzt auf gültige Werte sowohl von PagingSource als auch von RemoteMediator, bevor es weitergeleitet 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 in Presenter APIs nicht mehr redundant eine anfängliche CombinedLoadStates, bei der die Mediator-Status immer auf null festgelegt sind.
  • Die Stornierung früherer Generationen erfolgt jetzt sofort bei Ungültigmachung oder neuen Generationen. Die Verwendung von .collectLatest auf Flow<PagingData> sollte nicht mehr erforderlich sein, wird aber weiterhin empfohlen.
  • PagingSource.LoadResult.Invalid wurde als neuer Rückgabetyp von PagingSource.load hinzugefügt. Dadurch werden alle ausstehenden oder zukünftigen Ladeanfragen an diese PagingSource von Paging verworfen und ungültig gemacht. Dieser Rückgabetyp ist für potenziell ungültige oder veraltete Daten ausgelegt, die aus der Datenbank oder dem Netzwerk zurückgegeben werden können.
  • Die .onPagesPresented- und .addOnPagesUpdatedListener-APIs für Vortragende wurden hinzugefügt. Sie werden synchron ausgelöst, wenn Seiten in der Benutzeroberfläche angezeigt werden. Seitenaktualisierungen können in den folgenden Fällen erfolgen:
    • Das initiale Laden einer neuen Generation von PagingData wird abgeschlossen, unabhängig davon, ob die neue Generation Änderungen an den angezeigten Elementen enthält. Auch wenn eine neue Generation das erste Laden ohne Aktualisierungen durchführt, weil die Liste genau dieselbe ist, wird dieser Rückruf ausgelöst.
    • Es wird eine Seite eingefügt, auch wenn sie keine neuen Elemente enthält.
    • Eine Seite wird gelöscht, auch wenn sie leer war.

Version 3.1.0-rc01

3. November 2021

androidx.paging:paging-*:3.1.0-rc01 wird veröffentlicht. Version 3.1.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Behobenes Problem: In .cachedIn() kam es zu einer Race-Condition und einem Speicherleck, wenn mehrere Ladeereignisse von Paging downstream gesendet wurden, während keine Beobachter vorhanden waren oder wenn ein Beobachter zu neuen PagingData wechselte. (Ib682e)

Version 3.1.0-beta01

13. Oktober 2021

androidx.paging:paging-*:3.1.0-beta01 wird 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 bei prefetchDistance nicht berücksichtigt wurden, was zu einer Verzögerung beim Laden der Seite führte. Das ist besonders dann ein Problem, wenn viele Elemente gleichzeitig in einer Reihenfolge angeordnet sind, bei der das Laden gegen die Scrollrichtung des Nutzers priorisiert wird. Diese Elementzugriffe werden jetzt zwischengespeichert und synchron priorisiert, um zu verhindern, dass sie verworfen werden. (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

  • Bei LoadStates ist endOfPaginationReached jetzt immer false für LoadType.REFRESH. Bisher war es möglich, dass „endOfPaginationReached“ für „RemoteMediator“ true war, aber nicht für „PagingSource“.REFRESH 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. Wenn Sie entscheiden, ob die Paginierung beendet wird, sollten Sie immer die Anweisungen APPEND oder PREPEND berücksichtigen. (I047b6)
  • LoadStates von Paging warten jetzt auf gültige Werte sowohl von PagingSource als auch von RemoteMediator, bevor sie zwischen den Generationen weitergeleitet werden. So wird verhindert, dass neue PagingData-Generationen „Nicht geladen“ in CombinedLoadStates.source.refresh senden, wenn bereits „Wird geladen“ festgelegt wurde. Neue PagingData-Generationen beginnen jetzt immer korrekt mit „Wird geladen“ für den Aktualisierungsstatus, anstatt in einigen Fällen fälschlicherweise zuerst auf „Nicht geladen“ zurückgesetzt zu werden.

    Die Stornierung früherer Generationen erfolgt jetzt sofort bei Ungültigkeit oder neuen Generationen. Die Verwendung von .collectLatest auf Flow<PagingData> sollte nicht mehr erforderlich sein, wird aber weiterhin dringend empfohlen. (I0b2b5, b/177351336, b/195028524)

  • .loadStateFlow und .addLoadStateListener in Presenter-APIs senden nicht mehr redundant eine anfängliche CombinedLoadStates, bei der die Mediatorstatus immer auf null und die Quellstatus immer auf NotLoading(endOfPaginationReached = false) gesetzt sind. Das bedeutet Folgendes:

    1. Mediator-Status werden immer ausgefüllt, wenn du RemoteMediator verwendest.
    2. Wenn Sie einen neuen loadState-Listener oder einen neuen Collector für .loadStateFlow registrieren, wird der aktuelle Wert nicht mehr sofort gesendet, wenn kein echter CombinedLoadStates von PagingData empfangen wurde. Das kann passieren, wenn ein Collector oder Listener gestartet wird, bevor ein PagingData gesendet 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

  • PagingSource wird ein dritter Rückgabetyp für LoadResult hinzugefügt: LoadResult.Invalid. Wenn PagingSource.load LoadResult.Invalid zurückgibt, werden die geladenen Daten verworfen und die PagingSource ungültig. Dieser Rückgabetyp ist für potenziell ungültige oder veraltete Daten ausgelegt, die aus der Datenbank oder dem Netzwerk zurückgegeben werden können.

    Wenn beispielsweise in die zugrunde liegende Datenbank geschrieben wird, die PagingSource aber nicht rechtzeitig ungültig wird, werden möglicherweise inkonsistente Ergebnisse zurückgegeben, wenn die Implementierung von der Unveränderlichkeit des zugrunde liegenden Datasets abhängt, von dem aus geladen wird (z.B. LIMIT/OFFSET-Datenbankimplementierungen). In diesem Szenario wird empfohlen, nach dem Laden auf Ungültigheit zu prüfen und LoadResult.Invalid zurückzugeben. Dadurch werden alle ausstehenden oder zukünftigen Ladeanfragen an diese PagingSource von Paging verworfen und ungültig gemacht.

    Dieser Rückgabetyp wird auch von der Paging2 API unterstützt, die LivePagedList oder RxPagedList nutzt. Wenn Sie eine PagingSource mit den PagedList APIs von Paging2 verwenden, wird die PagedList sofort getrennt. Dadurch werden weitere Versuche zum Laden von Daten in dieser PagedList verhindert und die PagingSource wird ungültig.

    LoadResult ist eine versiegelte Klasse. Das bedeutet, dass diese Änderung nicht mit der Quelle kompatibel ist. Bei Anwendungsfällen, in denen PagingSource.load-Ergebnisse direkt verwendet werden, muss LoadResult.Invalid zur Kompilierungszeit verarbeitet werden. Kotlin-Nutzer, die den Rückgabetyp mit exhaustive-when prüfen, müssen beispielsweise eine Prüfung für den ungültigen Typ hinzufügen. (Id6bd3, b/191806126, b/192013267)

Fehlerkorrekturen

  • Callbacks zur Datenannullierung, die über PagingSource.registerInvalidatedCallback oder DataSource.addInvalidatedCallback hinzugefügt wurden, werden jetzt automatisch ausgelöst, wenn sie bei einer PagingSource / DataSource registriert wurden, die bereits ungültig war. Dadurch wird eine Race-Bedingung behoben, die dazu führte, dass beim Paging Invalidation-Signale gelöscht wurden und das System hängenblieb, wenn eine Quelle angegeben wurde, die bereits beim ersten Laden ungültig war. Außerdem werden invalidate-Callbacks jetzt nach dem Auslösen ordnungsgemäß entfernt, da sie garantiert höchstens einmal aufgerufen werden. (I27e69)
  • Senden des Platzhalter-Anfangswerts (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

  • Es wurden die Listener-API „onPagesPresented“ und die Flow-Presenter-API hinzugefügt, die sofort ausgelöst werden, nachdem die angezeigten Seiten in der Benutzeroberfläche aktualisiert wurden.

    Da diese Updates synchron mit der Benutzeroberfläche erfolgen, können Sie Adaptermethoden wie .snapshot oder .getItemCount aufrufen, um den Status nach der Anwendung des Updates zu prüfen. Hinweis: .snapshot() wurde explizit aufgerufen, da es bei jeder Aktualisierung teuer werden kann.

    Seitenaktualisierungen können in den folgenden Fällen erfolgen:

    • Das initiale Laden einer neuen Generation von PagingData wird abgeschlossen, unabhängig davon, ob die neue Generation Änderungen an den angezeigten Elementen enthält. Auch wenn eine neue Generation das erste Laden ohne Aktualisierungen durchführt, weil die Liste genau dieselbe ist, wird dieser Rückruf ausgelöst.
    • Es wird eine Seite eingefügt, auch wenn sie keine neuen Elemente enthält.
    • Eine Seite wird gelöscht, auch wenn sie leer ist (I272c9, b/189999634)

Fehlerkorrekturen

  • Beim Zugriff auf PagedList.dataSource über den ursprünglichen Wert, der von LivePagedList oder RxPagedList generiert wurde, wird nicht mehr fälschlicherweise eine IllegalStateException geworfen (I96707)

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

  • Von paging-rxjava3 bereitgestellte Klassen befinden sich jetzt im Paket androidx.paging.rxjava3, damit sie nicht mit paging-rxjava2 (Ifa7f6) in Konflikt stehen.

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem Paging manchmal No-Op-Unterschiedsereignisse an RecyclerView sendete, was dazu führen konnte, dass bestimmte Listener zu früh ausgelöst wurden. (Ic507f, b/182510751)

Externer Beitrag

  • Dem rxjava3-Artefakt wurden verworfene PagedList-APIs zur Kompatibilität 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

  • Die Funktion „Paging Compose“ unterstützt jetzt die Vorschau einer Liste mit fiktiven Daten. Dazu erstellen Sie eine PagingData.from(fakeData) und legen diese PagingData in eine MutableStateFlow ein (z. B. MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Wenn du diese Daten als Eingabe für @Preview verwendest, kannst du dir mit collectAsLazyPagingItems() eine Vorschau von LazyPagingItems ansehen. (I8a78d, b/194544557)

Fehlerkorrekturen

  • Zwischengespeicherte Daten aus pager.flow.cachedIn, die in LazyPagingItems erfasst wurden, sind jetzt nach der Statuswiederherstellung sofort verfügbar, ohne dass eine asynchrone Erhebung erforderlich ist. Das bedeutet, dass die im Cache gespeicherten Daten nach der Wiederherstellung des Status sofort zur 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 Paging Compose nicht mit anderen Lazy-Layouts wie LazyVerticalGrid, HorizontalPager oder anderen benutzerdefinierten Lazy-Komponenten aus den Wear- und TV-Bibliotheken verwendet werden konnte. Die Behebung dieser Einschränkung ist das Hauptupdate dieser Version.

Um mehr Lazy-Layouts zu unterstützen, mussten wir APIs auf einer anderen Ebene entwickeln. Anstatt für jedes Lazy-Layout eine benutzerdefinierte items API bereitzustellen, bietet Paging Compose jetzt Erweiterungsmethoden auf etwas niedrigerer Ebene für LazyPagingItems in itemKey und itemContentType. Diese APIs helfen Ihnen dabei, die key- und contentType-Parameter in die standardmäßigen items-APIs zu implementieren, die bereits für LazyColumn, LazyVerticalGrid und ihre Entsprechungen in APIs wie HorizontalPager vorhanden sind. (Ifa13b, Ib04f0, b/259385813)

Das bedeutet, dass die Unterstützung eines 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 finden Sie in unseren Beispielen.

Durch diese Änderungen werden die Beispiele für LazyColumn und LazyRow zwar um einige Zeilen länger, aber wir sind der Meinung, dass Einheitlichkeit bei allen Lazy-Layouts ein wichtiger Faktor für Nutzer ist, die Paging Compose in Zukunft verwenden. Aus diesem Grund wurden die vorhandenen Erweiterungen für LazyListScope eingestellt. (I0c459, I92c8f, b/276989796)

API-Änderungen

  • Zur Vereinfachung der Migration zu den neuen APIs unterstützen die Erweiterungsfunktionen items und itemsIndexed in 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

  • Fügen Sie beim Aufrufen von collectLazyPagingItems die Unterstützung für eine benutzerdefinierte CoroutineContext hinzu. (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

  • Die Funktion „Paging“ stellt jetzt Logs über die Klasse LazyPagingItems bereit, um Informationen zur Fehlerbehebung bereitzustellen, die aus PagingData erfasst wurden.
  • Die Protokolle 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 beim fehlenden PagingDataDiffer-Konstruktor bei 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

  • LazyPagingItems legt jetzt die anfängliche loadState auf eine LoadState.Loading-Aktualisierung fest. (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 LazyPagingItems.itemSnapshotList-Attribut ersetzt (Ie2da8)
  • Die eingestellte Funktion 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

  • Für items(lazyPagingItems) und itemsIndexed(lazyPagingItems), die zum Verbinden der Paginierung mit LazyColumn/Row verwendet werden, kann jetzt der Parameter „key“ angegeben werden. Damit lässt sich ein stabiler Schlüssel für das Element angeben. Weitere Informationen zu Schlüsseln (I7986d)
  • Die Funktion lazyPagingItems.getAsState(index) ist jetzt 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 von LazyPagingItems sind jetzt beobachtbar, sodass sie auch mit LazyVerticalGrid verwendet werden können (Ie2446, b/171872064, b/168285687)

Kompatibilität von Compose

  • 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, um die Einbindung in Compose 1.0.0-beta01 zu ermöglichen.

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, um Compose alpha12 zu unterstützen.

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

Aktualisiert, damit die Abhängigkeit von Compose 1.0.0-alpha11 besteht.

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.

Aktualisiert, um von Compose 1.0.0-alpha10 abhängig zu sein.

Version 1.0.0-alpha04

16. Dezember 2020

androidx.paging:paging-compose:1.0.0-alpha04 wird veröffentlicht. Version 1.0.0-alpha04 enthält diese Commits.

Fehlerkorrekturen

  • Die praktischen Eigenschaften CombinedLoadStates.refresh, CombinedLoadStates.prepend und CombinedLoadStates.append wurden so aktualisiert, dass der Status von Loading nur dann auf NotLoading umgestellt wird, wenn sowohl der Mediator- als auch der Quellladestatus NotLoading ist. 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, um mit Compose 1.0.0-alpha08 übereinzustimmen.

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

  • .peek()-, .snapshot()-, .retry()- und .refresh()-Methoden zu LazyPagingItems hinzugefügt, die dieselben Funktionen wie AsyncPagingDataDiffer / PagingDataAdapter bieten (Iddfe8, b/172041660)

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 ermöglicht die Integration zwischen der Paging Library und Jetpack Compose. Ein einfaches Anwendungsbeispiel:

  @Composable
  @OptIn(ExperimentalLazyDsl::class)
  fun ItemsDemo(flow: Flow<PagingData<String>>) {
      val lazyPagingItems = flow.collectAsLazyPagingItems()
      LazyColumn {
          items(lazyPagingItems) {
              Text("Item is $it")
          }
      }
  }

Version 3.0.1

Version 3.0.1

21. Juli 2021

androidx.paging:paging-*:3.0.1 wird veröffentlicht. Version 3.0.1 enthält diese Commits.

Fehlerkorrekturen

  • Beim Zugriff auf PagedList.dataSource über den ursprünglichen Wert, der von LivePagedList oder RxPagedList generiert wurde, wird nicht mehr fälschlicherweise eine IllegalStateException ausgelöst (I96707)

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 3.0.0

Der Großteil der vorhandenen API von Paging 2.x.x wurde zugunsten der neuen Paging 3 APIs eingestellt. Dadurch konnten die folgenden Verbesserungen erzielt werden:

  • Erstklassige Unterstützung für Kotlin-Coroutinen und Flow
  • Support bei Stornierungen
  • Integrierte Signale für Ladestatus und Fehler
  • Funktion „Wiederholen und aktualisieren“
  • Alle drei DataSource-Unterklassen wurden in einer einheitlichen PagingSource-Klasse kombiniert.
  • Benutzerdefinierte Seitentransformationen, einschließlich einer integrierten Option zum Hinzufügen von Trennlinien
  • Kopf- und Fußzeilen des Status 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

  • Ein Problem wurde behoben, bei dem Paging manchmal No-Op-Unterschiedsereignisse an RecyclerView sendete, 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 Aktualisieren der Liste überarbeitet, um unerwartete Sprünge im RecyclerView zu vermeiden. 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 @ExperimentalCoroutinesApi-Opt-in-Anforderung wird jetzt korrekt an Rx3-Erweiterungen weitergegeben. Bisher wurden sie in der Methode @get markiert, die vom Kotlin-Compiler aufgrund von https://youtrack.jetbrains.com/issue/KT-45227 (I5733c) ignoriert wird.

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 die Remoteaktualisierung aufgerufen wurde.
  • Es wurde ein Fehler behoben, durch den leere Seiten, die von PagingSource zurückgegeben wurden, verhindern konnten, dass Paging noch einmal abgerufen wurde, um prefetchDistance zu erfüllen, was dazu führte, dass Paging „hängen blieb“.

Version 3.0.0-beta01

10. Februar 2021

androidx.paging:paging-*:3.0.0-beta01 wird veröffentlicht. Version 3.0.0-beta01 enthält diese Commits.

API-Änderungen

  • Rx2- und Rx3-Wrapper geben jetzt die experimentelle Anmerkung an, 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) (Ib1f9d) annotieren.

Fehlerkorrekturen

  • Behoben: Fehler IndexOutOfBoundsException: Inconsistency detected, der manchmal bei Verwendung von DataSource APIs der Version 2 über Kompatibilitätspfade auftritt
  • isInvalid-Aufrufe während der Initialisierung von DataSource, die über Kompatibilitätspfade verwendet werden, werden jetzt korrekt im fetchDispatcher und nicht im Hauptthread gestartet. Dadurch wird ein IllegalStateException behoben, der durch den Datenbankzugriff auf den 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 muss jetzt implementiert werden. Es handelt sich um eine abstrakte Funktion ohne Standardimplementierung. Migrierende Nutzer können weiterhin die Standardimplementierung zurückgeben, die einfach null zurückgibt. getRefreshKey() sollte jedoch eine echte Implementierung haben, die einen Schlüssel basierend auf der aktuellen Scrollposition des Nutzers zurückgibt, damit die Seitenabfolge bei Bedarf über PagingState.anchorPosition zentriert um den Viewport herum weiter geladen werden kann. (I4339a)
  • InvalidatingPagingSourceFactory ist jetzt eine finale Klasse (Ia3b0a).
  • Konfigurieren des Terminal-Separators (Header / Fußzeile) mit einem zusätzlichen optionalen Parameter „SeparatorType“ Es gibt zwei Optionen:
    • FULLY_COMPLETE – bestehendes Verhalten: Warten, bis sowohl PagingSource als auch RemoteMediator „endOfPaginationReached“ markieren, bevor Terminaltrennzeichen hinzugefügt werden. Wenn RemoteMediator nicht verwendet wird, wird der Remote-loadState ignoriert. Das ist vor allem dann nützlich, wenn Sie Abschnittsabscheider nur anzeigen lassen möchten, wenn der Abschnitt vollständig geladen ist, einschließlich des Abrufs aus einer Remotequelle, z.B. einem Netzwerk.
    • SOURCE_COMPLETE – Warten Sie nur, bis PagingSource „endOfPaginationReached“ markiert, auch wenn RemoteMediator verwendet wird. So können Kopf- und Fußzeilen synchron mit dem ersten Laden angezeigt werden, sodass Nutzer nicht scrollen müssen, um Terminaltrennzeichen zu sehen. (Ibe993, b/174700218)

Fehlerkorrekturen

  • Ein seltener Speicherleck wurde behoben, der auftritt, wenn eine PagingSource ungültig gemacht wird, bevor der PageFetcher überhaupt mit dem Laden aus ihr 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)
  • Es wurde eine Überladung von .cachedIn() hinzugefügt, die für Java-Nutzer ViewModel anstelle von Lifecycle oder CoroutineScope akzeptiert. (I97d81, b/175332619)
  • Java-Aufrufern die asynchrone Verwendung von PagingData-Transformationsvorgänge ermöglichen, indem ein Executor in die Argumente des Transformationsoperators aufgenommen wird. Das Suffix „-Sync“ wurde bei allen Transformationsoperatoren mit „-Sync“ entfernt. Kotlin-Coroutine-Nutzer müssen die Mehrdeutigkeit beseitigen, indem sie die Erweiterungsfunktion aufrufen, die stattdessen einen Block zum Aussetzen akzeptiert. Alle Transformationsoperatoren für PagingData wurden in Erweiterungen unter der statischen Klasse „PagingDataTransforms“ verschoben. Java-Nutzer müssen sie über statische Helfer aufrufen, z.B. PagingDataTransforms.map(pagingData, transform) Für Kotlin-Nutzer ist die Syntax identisch, Sie müssen die Funktion jedoch importieren. (If6885, b/172895919)

Fehlerkorrekturen

  • Ein Fehler wurde behoben, aufgrund dessen RemoteMediator.load() während adapter.refresh() nicht aufgerufen wurde, wenn das Ende der Paginierung bereits erreicht wurde.

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 den gespeicherten Status für die folgenden grundlegenden Anwendungsfälle hinzugefügt (vollständige Unterstützung, insbesondere bei der mehrschichtigen Quelle, ist noch in Arbeit):
    • Der Ablauf wird im Cache gespeichert und die Anwendung wird nicht beendet (z.B. wird der Ablauf in einem Ansichtsmodell im Cache gespeichert und die Aktivität wird im Prozess neu erstellt)
    • Die Paginierungsquelle 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öchten, wenn eine Datensatz-Ungültigmachung 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-Anmerkung in die öffentliche API zu schleusen. (I9dc61, b/174531520)
  • Die praktischen Eigenschaften CombinedLoadStates.refresh, CombinedLoadStates.prepend und CombinedLoadStates.append wurden so aktualisiert, dass der Status von Loading nur dann auf NotLoading umgestellt wird, wenn sowohl der Mediator- als auch der Quellladestatus NotLoading ist. So wird sichergestellt, dass das Remote-Update angewendet wurde. (I65619)
  • LoadParams.pageSize wurde entfernt (war bereits eingestellt). Wir empfehlen, LoadParams.loadSize in Ihrer PagingSource zu verwenden.

    LoadParams.loadSize entspricht immer PagingConfig.pageSize, mit Ausnahme des Aufrufs zum Initialisieren des Ladevorgangs, bei dem es PagingConfig.initialLoadSize entspricht.

    Wenn Sie Ihre Paging2-Datenquelle ohne Pager oder PaginatedList testen, 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/PagedList, mit dem intern die richtige PageSize für Ihre DataSource-Lademethoden festgelegt wird. (I98ac7, b/149157296)

Fehlerkorrekturen

  • Ein Absturz aufgrund einer IllegalStateException bei Verwendung von Trennzeichen mit festgelegter 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 Presenter-Seite wie .snapshot() und .peek() bei Aktualisierungen von ListUpdateCallback die vorherige (veraltete) Liste zurückgaben.
  • Ein Fehler wurde behoben, durch den Trennoperatoren bei Verwendung mit RemoteMediator keine Kopf- oder Fußzeilen hinzugefügt haben.
  • Es wurde ein Fehler behoben, durch den der LoadState für RemoteMediator auf „NotLoading“ aktualisiert wurde und im Status „Wird geladen“ hängen blieb.
  • Ein Fehler wurde behoben, durch den die Paging2.0-Kompatibilitäts-API .asPagingSourceFactory() dazu führen konnte, dass die zugrunde liegende DataSource im falschen CoroutineDispatcher initialisiert wurde. Dadurch werden Abstürze und mögliche ANR-Fälle behoben, insbesondere wenn die aktuelle Implementierung von PagingSource von Room verwendet wird, 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 mit den Updates für „loadStateFlow“ und „Listener“ redundant sind. Für Nutzer, die migrieren, entspricht das 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-Aktualisierungen weitergegeben und verhindert, dass APPEND und PREPEND ausgelöst werden. (I94a3f, b/155290248)
  • Wenn eine leere Liste angezeigt wird, weil die Startseite leer ist oder die Ergebnisse stark gefiltert wurden, wird das Laden von PREPEND- oder APPEND-Seiten durch die Paginierung nicht mehr verhindert. (I3e702, b/168169730)
  • Ein Problem wurde behoben, bei dem getRefreshKey bei nachfolgenden Generationen von PagingSource nicht aufgerufen wird, wenn Invalidationen schnell auftreten. (I45460, b/170027530)

Externer Beitrag

  • Die neue abstrakte Klasse „InvalidatingPagingSourceFactory“ mit einer .invalidate() API wurde hinzugefügt, die „invalidate“ an alle von ihr gesendeten PagingSources weiterleitet. Vielen Dank an @claraf3! (Ie71fc, b/160716447)

Bekannte Probleme

  • Kopf- und Fußzeilen aus der Transformation „.insertSeparators()“ werden bei Verwendung von RemoteMediator b/172254056 möglicherweise nicht sofort angezeigt.
  • Die Verwendung von RemoteMediator kann dazu führen, dass die Remote-LoadState hängen bleibt, wenn die Ungültigmachung und PagingSource.load(LoadParams.Refresh(...)) abgeschlossen werden, bevor RemoteMediator.load() zurückgegeben wird. b/173717820

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

  • Die Methoden „dataRefreshFlow“ und „Listener“ mit einer „replaceWith“-Klausel werden vollständig eingestellt. (I6e2dd)

Fehlerkorrekturen

  • Fehlerbehebung: IllegalArgumentException wird geworfen, wenn Trennzeichen mit RemoteMediator verwendet werden und eine Invalidation ausgelöst wird, während eine Remote-Ladevorgang, der „endOfPagination“ zurückgeben würde, noch ausgeführt wird (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 die funktionale Schnittstelle (verfügbar in Kotlin 1.4) aktiviert wurden. Außerdem wird ein Fehler behoben, bei dem die Kotlin-Variante der invalidate-Callbacks nicht aufgerufen wurde, nachdem sie durch .map oder .mapByPage transformiert wurde. (I1f244, b/165313046)

Fehlerkorrekturen

  • Die Interaktion der Paginierung mit ViewPager wurde erheblich verbessert. Insbesondere wird ein RemoteMediator#load-Aufruf durch das Paging nicht mehr aufgrund einer Seitenungültigkeit abgebrochen. Außerdem wird keine Ladeanfrage mehr zum Anhängen oder Voranstellen gesendet, wenn REFRESH erforderlich ist, bis die REFRESH-Anfrage erfolgreich abgeschlossen wurde. (I6390b, b/162252536)
  • API-Lint-Prüfung für fehlende Getter-Matching-Builder ist für androidx aktiviert (I4bbea, b/138602561)
  • Es wurde ein Fehler behoben, durch den .withLoadState* ConcatAdapter-Hilfsprogramme abstürzten, weil RecyclerView aus dem Hintergrund-Thread benachrichtigt wurde (I18bb5, b/170988309)
  • Ein Fehler wurde behoben, durch den beim Laden einer sehr kleinen, nicht leeren Seite manchmal verhindert wurde, dass das Vorladen die Ladevorgänge richtig auslöste.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

  • Async PagingData-Guava-basierte Operatoren akzeptieren jetzt einen Executor als Parameter, um den Ausführungskontext zu steuern. (Id4372)

Fehlerkorrekturen

  • Die IndexOutOfBounds-Ausnahme, die in RemoteMediator aufgrund einer Race-Condition geworfen wurde, wurde behoben. (I00b7f, b/165821814)
  • Es wurde eine Race-Condition bei der Umwandlung von DataSource in PagingSource behoben, die dazu führen konnte, dass die resultierende PagingSource Invalidate-Signale von DataSource ignorierte.
  • Ein Problem in der Logik zum Abrufen von Seiten wurde behoben, durch das manchmal keine neuen Generationen von PagingSource übernommen wurden, bis PagingDataAdapter.refresh() aufgerufen wurde.
  • Ein Problem wurde behoben, durch das die Scrollposition manchmal verloren ging, wenn eine DataSource in eine PagingSource umgewandelt wurde (z. B. die von Room erstellte) und in Verbindung mit RemoteMediator verwendet wurde.

Externer Beitrag

  • Vielen Dank an @simonschiller für das Hinzufügen von RxJava2-, RxJava3- und Guava-basierten asynchronen Transformationsoperatoren für PagingData.

Version 3.0.0-alpha06

2. September 2020

androidx.paging:paging-*:3.0.0-alpha06 wird veröffentlicht. Version 3.0.0-alpha06 enthält diese Commits.

API-Änderungen

  • UnsupportedOperationException mit klarerer Fehlermeldung zur fehlenden Unterstützung für stabile IDs wird jetzt geworfen, wenn PagingDataAdapter.setHasStableIds aufgerufen wird. (Ib3890, b/158801427)

Fehlerkorrekturen

  • Mit „insertSeparators“ werden keine leeren Seiten mehr herausgefiltert. So kann der Vortragende den Prefetch-Abstand auch dann einhalten, 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

  • Bei der Paginierung werden Seiten jetzt auch dann korrekt vorab geladen, wenn die angezeigten Daten stark gefiltert sind.
  • Wenn LoadResult.Error zu einem wiederholten Laden zurückgegeben wird, wird der Wiederholungsversuch für Elementzugriffe nicht mehr fälschlicherweise ausgelöst.

Externer Beitrag

  • Vielen Dank an Clara F. für die Hilfe beim Optimieren einiger Tests. (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 dargestellte Daten zu ermöglichen, ohne dass Seiten geladen werden müssen. (I38898, b/159104197)
  • PagingDataAdapter und AsyncPagingDataDiffer wurden eine snapshot() API hinzugefügt, damit die angezeigten Elemente abgerufen werden können, ohne dass das Laden der Seite ausgelöst wird. (I566b6, b/159104197)
  • Es wurde ein PagingData.from(List<T>)-Konstruktor hinzugefügt, um statische Listen zu präsentieren. Diese können mit dem gesamten PagingData-Ablauf kombiniert werden, um statische Listen in bestimmten Status anzuzeigen, z. B. bevor die anfängliche Aktualisierung abgeschlossen ist oder einfach zum Testen von Transformationen. (Id134d)
  • Die APIs „dataRefresh Flow“ und „Listener“ werden eingestellt, da sie dazu dienen sollten, den Status der angezeigten Elemente bei REFRESH zu veröffentlichen. Aufgrund von Verbesserungen beim Timing des „loadState Flow“/Listener-Callbacks und der „itemCount“-Eigenschaft sind sie jedoch redundant. (Ia19f3)
  • RxJava3-Kompatibilitäts-Wrapper für PagingSource und RemoteMediator hinzugefügt (I49ef3, b/161480176)

Fehlerkorrekturen

  • PositionalDataSource, die über den toPagingSourceFactory-Hilfstool in PagingSource umgewandelt wurden, einschließlich PagingSource, die von Room erstellt wurden, werden jetzt korrekt markiert, um das Springen zu unterstützen. (I3e84c, b/162161201)
  • Ein Fehler wurde behoben, bei dem die Verwendung der synchronen Variante von „submitData“ manchmal zu einem Race führte, der einen ClosedSendChannelException verursachte (I4d702, b/160192222)

Externer Beitrag

  • Vielen Dank an Zac Sweers, der im Namen von Slack RxJava3-Kompatibilitäts-Wrapper hinzugefügt hat. (I49ef3, b/161480176)

Version 3.0.0-alpha03

22. Juli 2020

androidx.paging:paging-*:3.0.0-alpha03 wird veröffentlicht. Version 3.0.0-alpha03 enthält diese Commits.

API-Änderungen

  • Der Konstruktor für PagingState ist jetzt öffentlich. Das sollte das Testen von Implementierungen von getRefreshKey() erleichtern (I8bf15)
  • Kotlin-Varianten der DataSource-Map-Funktion wurden in Java ausgeblendet, um Unklarheiten zwischen Original- und Kotlin-Varianten zu beheben. (If7b23, b/161150011)
  • Redundante APIs, die als praktische Funktion für Kotlin-Nutzer gedacht sind, wurden mit dem Attribut „@JvmSynthetic“ gekennzeichnet (I56ae5).
  • Überladungen für den Konstruktor von LoadResult.Page hinzugefügt, bei denen „itemsBefore“ und „itemsAfter“ standardmäßig auf COUNT_UNDEFINED festgelegt sind (I47849)
  • Vorhandene PagingData-Operatoren akzeptieren jetzt Aussetzungsmethoden. Außerdem wurden die neuen nicht aussetzenden Operatoren „mapSync“, „flatMapSync“ und „filterSync“ für Java-Nutzer eingeführt. Die vorhandenen Transformationsmethoden wurden in Erweiterungsfunktionen verschoben. Kotlin-Nutzer müssen sie jetzt importieren. (I34239, b/159983232)

Fehlerkorrekturen

  • Bei Paginierungsquellen für „Room“ (und „PositionalDataSource“) wird jetzt ein vorangestellter Trennstrich als Teil der ersten Seite angezeigt, sodass der Nutzer nicht scrollen muss, um ihn zu sehen. (I6f747, b/160257628)
  • Artikelzugriffe auf Platzhalter lösen jetzt korrekt das Laden von PagingSource aus, bis eine Seite zurückgegeben wird, die den angeforderten Index erfüllt, nachdem sie durch PagingData.filter() transformiert wurde (I95625, b/158763195)
  • Behebung eines Fehlers, durch den das Scrollen nach dem Zurückgeben eines Fehlers durch PagingSource manchmal verhinderte, dass PagingDataAdapter.retry() noch einmal ausgeführt wurde. (I1084f, b/160194384)
  • Ein Problem wurde behoben, bei dem nach dem Einfügen einer Seite möglicherweise keine Seiten geladen wurden, obwohl der Artikelzugriff innerhalb von prefetchDistance lag (Ie95ae, b/160038730)
  • Durch die Einstellung 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 gängigen Standardwerten hinzugefügt (Ie91f5)
  • Die Adapter-APIs dataRefreshFlow und dataRefreshListener geben jetzt einen booleschen Wert zurück, um anzugeben, ob eine PagingData leer ist (I6e37e, b/159054196)
  • RxJava- und Guava-APIs für RemoteMediator hinzugefügt: RxRemoteMediator und ListenableFutureRemoteMediator
  • Dem PagingState wurden Helfer für den Zugriff auf gängige Elemente wie isEmpty() und firstItemOrNull() hinzugefügt (I3b5b6, b/158892717)

Fehlerkorrekturen

  • Der Pager prüft jetzt bei der Fertigung, ob PagingSource wiederverwendet wird, um eine versehentliche Wiederverwendung ungültiger PagingSources zu verhindern, was zu einem unklaren Fehler geführt hat (I99809, b/158486430)
  • Fehler bei RemoteMediator REFRESH verhindern nicht mehr das Laden von PagingSource (I38b1b, b/158892717)
  • Die nicht anhaltende Version von submitData führt nicht mehr zu einem Absturz aufgrund gleichzeitiger Erfassung mehrerer PagingData, wenn sie nach der anhaltenden Version von submitData aufgerufen wird. (I26358, b/158048877)
  • Der Fehler „cannot collect twice from pager“ (nicht zweimal vom Pager abrufen können) wurde behoben, der 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

  • Javadocs für Paging 3 sind noch nicht verfügbar. In der Zwischenzeit können Sie die oben verlinkten Anleitungen oder die Kotlin-Dokumentation verwenden. (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

  • Behebung eines Problems mit IndexOutOfBoundsException in seltenen Fällen beim Umwandeln einer Position während der Ungültigmachung.

Release-Problem

  • Die Version 2.1.1 der Paging API wurde fälschlicherweise aus einem falsch konfigurierten Branch veröffentlicht. Dadurch wurden teilweise implementierte APIs und Funktionen freigegeben, die erst in einem zukünftigen Release verfügbar sein sollten.

  • Die Auslagerung 2.1.2 enthält die Korrektur für die Lastzentrierung, die ursprünglich in 2.1.1 veröffentlicht wurde, aber dieses Mal korrekt auf die Version 2.1.0 angewendet wurde. Wenn Sie derzeit Version 2.1.1 verwenden, wird ein Upgrade auf diese Version dringend empfohlen.

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

  • Kontinuierliche anfängliche Ladevorgänge von PositionalDataSources sind jetzt auf den letzten Zugriff ausgerichtet, wenn Platzhalter deaktiviert sind

Version 2.1.0

Version 2.1.0

25. Januar 2019

Die Seitennummerierung 2.1.0 wird ohne Änderungen von 2.1.0-rc01 veröffentlicht.

Version 2.1.0-rc01

6. Dezember 2018

Die Seitennummerierung 2.1.0-rc01 wird ohne Änderungen von 2.1.0-beta01 freigegeben.

Version 2.1.0-beta01

1. November 2018

Die Seitennummerierung 2.1.0-beta01 wird ohne Änderungen von 2.1.0-alpha01 freigegeben.

Version 2.1.0-alpha01

12. Oktober 2018

Die 2.1.0-alpha01-Version für die Auslagerung enthält zwei wichtige Ergänzungen – das Auslagern von Seiten und KTX-Erweiterungsbibliotheken für jedes Artefakt – sowie mehrere andere API-Änderungen und Fehlerkorrekturen.

API-Änderungen

  • PagedList.Config.Builder.setMaxSize() wurde hinzugefügt, um die Anzahl der geladenen Elemente im Arbeitsspeicher zu begrenzen.
  • androidx.paging.Config() als Kotlin-Alternative für PagedList.Config.Builder hinzugefügt
  • androidx.paging.PagedList() als Kotlin-Alternative für PagedList.Builder hinzugefügt
  • DataSourceFactory.toLiveData() als Kotlin-Alternative für LivePagedListBuilder hinzugefügt
  • DataSourceFactory.toObservable() und toFlowable() wurden als Kotlin-Alternativen für RxPagedListBuilder hinzugefügt
  • AsyncPagedListDiffer.addPagedListListener() wurde hinzugefügt, um zu überwachen, wann die PagedList getauscht wird. b/111698609
  • Variante PagedListAdapter.onCurrentListChanged() hinzugefügt, die alte und neue Liste weitergibt, vorherige Variante eingestellt
  • Es wurden PagedListAdapter/AsyncPagedListDiffer.submitList() Varianten hinzugefügt, die einen zusätzlichen Rückruf annehmen, der ausgelöst wird, wenn die Paginierungsliste nach dem Vergleich angezeigt wird. So können Sie einen PagedList-Swap mit anderen UI-Änderungen synchronisieren. b/73781068
  • PagedList.getLoadedCount() hinzugefügt, um anzugeben, wie viele Elemente sich im Arbeitsspeicher befinden. Wenn Platzhalter deaktiviert sind, ist der Rückgabewert immer .size().

Fehlerkorrekturen

  • Es wurde eine Race-Bedingung beim Vergleich behoben, wenn Listen wiederverwendet werden b/111591017
  • PagedList.loadAround() gibt jetzt IndexOutOfBoundsException zurück, wenn der Index ungültig ist. Bisher kam es in diesem Fall zu einem Absturz mit einer unklaren anderen Ausnahme.
  • Ein Fall wurde behoben, bei 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

2.0.0 für die Seitennavigation wird mit einer einzelnen Fehlerkorrektur veröffentlicht.

Fehlerkorrekturen

  • Ein Absturz wurde behoben, der beim sehr schnellen Scrollen mit PositionalDataSource und Platzhaltern auftreten konnte b/114635383.

Version 2.0.0-beta01

2. Juli 2018

Fehlerkorrekturen

  • Behoben: In einigen Fällen, in denen Inhalte vorangestellt wurden, sind sie verschwunden (Platzhalter deaktiviert, PositionalDataSource) b/80149146
  • (Bereits in 1.0.1 veröffentlicht) Abstürze behoben, bei denen PagedListAdapter und AsyncPagedListDiffer keine Bewegungsereignisse signalisierten. b/110711937

Abhängigkeiten vor AndroidX

Fügen Sie für die folgenden Versionen von Paging, die vor Android X erschienen sind, die folgenden Abhängigkeiten hinzu:

dependencies {
    def paging_version = "1.0.0"

    implementation "android.arch.paging:runtime:$paging_version"

    // alternatively - without Android dependencies for testing
    testImplementation "android.arch.paging:common:$paging_version"

    // optional - RxJava support
    implementation "android.arch.paging:rxjava2:$paging_version"
}

Version 1.0.1

Version 1.0.1

26. Juni 2018

Die 1.0.1-Seitenleiste wird mit einer 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 ist ebenfalls veröffentlicht und identisch mit 1.0.0-rc1.

Fehlerkorrekturen

  • Abstürze wurden behoben, bei denen PagedListAdapter und AsyncPagedListDiffer keine Verschiebungsereignisse signalisierten. b/110711937

RxJava2 Version 1.0.0

RxJava2 Version 1.0.0-rc1

16. Mai 2018

Paging RxJava2 1.0.0-rc1 wird ohne Änderungen gegenüber der ursprünglichen Alphaversion zum Release-Kandidaten.

Version 1.0.0

Version 1.0.0-rc1

19. April 2018 Releasekandidat für die Paginierung

Für die 1.0.0-Version von Paging sind keine weiteren bekannten Probleme oder neuen Funktionen geplant. Bitte aktualisieren Sie Ihre Projekte auf 1.0.0-rc1 und helfen Sie uns bei den Härtetests, damit wir eine stabile 1.0.0 bereitstellen können.

In dieser Version gibt es keine Änderungen. Sie entspricht 1.0.0-beta1.

Version 1.0.0-beta1

5. April 2018

Die Seitensuche befindet sich noch für kurze Zeit in der Betaphase, bevor sie in die Release-Kandidatenphase übergeht. Wir planen keine weiteren API-Änderungen für Paging 1.0 und die Anforderungen an API-Änderungen sind sehr hoch.

Der Alpha-RxJava2-Support für das Paging wird als separates optionales Modul (android.arch.paging:rxjava2:1.0.0-alpha1) veröffentlicht und wird vorübergehend separat versioniert, bis er stabil ist.

Diese neue Bibliothek bietet eine RxJava2-Alternative zu LivePagedListBuilder, mit der Observables und Flowables mit Schedulers anstelle von Executors erstellt werden können:

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 Artefakt android.arch.paging:rxjava2 hinzugefügt.

API-Änderungen

  • API-Änderungen zur Klärung der Rolle von Executors in Buildern:

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

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

  • Das Mitglied PagedList.mCallbacks ist jetzt privat.

Fehlerkorrekturen

  • LivePagedListBuilder löst die anfängliche PagedList-Auslastung auf dem angegebenen Executor aus, anstatt auf dem Arch Components IO-Thread-Pool.

  • Invalidate-Verhalten in internen DataSource-Wrappern korrigiert, die zur Implementierung von DataSource.map und zum Laden von PositionalDataSource ohne Platzhalter verwendet werden b/77237534

Version 1.0.0-alpha7

21. März 2018

Die Funktion „Paging“ 1.0.0-alpha7 wird zusammen mit „Lebenszyklen“ 1.1.1 veröffentlicht. Da Paging alpha7 vom Umzug der oben genannten Function-Klasse abhängt, müssen Sie Ihre lifecycle:runtime-Abhängigkeit auf android.arch.lifecycle:runtime:1.1.1 aktualisieren.

Paging alpha7 soll die letzte Version sein, bevor Paging in die Betaphase übergeht.

API-Änderungen

  • DataSource.LoadParams-Objekte haben jetzt einen öffentlichen Konstruktor und DataSource.LoadCallback-Objekte sind jetzt abstrakt. So können Sie eine DataSource einschließen oder eine DataSource direkt mit einem Mock-Callback testen. b/72600421
  • Mapper für DataSource und DataSource.Factory
    • Mit map(Function<IN,OUT>) können Sie von einem DataSource geladene Ergebnisse transformieren, umbrechen oder verschönern.
    • mapByPage(<List<IN>,List<OUT>>) ermöglicht dies auch für die Batchverarbeitung. Wenn beispielsweise 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 veralteten Klassen wurden aus der API entfernt, einschließlich der Überreste des recyclerview.extensions-Pakets und der LivePagedListProvider.
  • DataSource.Factory wird von einer Schnittstelle in eine abstrakte Klasse geändert, um Kartenfunktionen zu ermöglichen.

Fehlerkorrekturen

  • „Builders“ in „final“ geändert. b/70848565
  • Die Implementierung von Room DataSource wurde jetzt so angepasst, dass auch Abfragen mit mehreren Tabellen verarbeitet werden können. Diese Korrektur ist in Room 1.1.0-beta1 enthalten (siehe oben).
  • Ein Fehler wurde behoben, bei dem BoundaryCallback.onItemAtEndLoaded nicht für PositionalDataSource 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

  • Problem beim Laden von Seiten beheben, wenn Platzhalter deaktiviert sind b/70573345
  • Zusätzliche Protokollierung zur Fehlerbehebung bei IllegalArgumentException b/70360195 (und spekulative Korrektur auf Raumseite)
  • Korrekturen am Javadoc-Beispielcode für b/70411933 und b/71467637