Paging

Mit der Paging Library wird es einfacher, damit Sie die Daten in der App RecyclerView

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

Artefakt Stabile Version Releasekandidat Beta-Ausgabe Alpha-Release
paging-* 3.3.1 - -
Paging-Compose 3.3.1 - -
Letzte Aktualisierung dieser Mediathek: 24. Juli 2024

Abhängigkeiten deklarieren

Um eine Abhängigkeit von Paging hinzuzufügen, müssen Sie das Maven-Repository von Google zu Ihrem Projekt arbeiten. Maven-Repository von Google lesen .

Fügen Sie der Datei build.gradle die Abhängigkeiten für die Artefakte hinzu, die Sie benötigen Ihre App oder Ihr Modul:

Groovig

dependencies {
  def paging_version = "3.3.1"

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

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

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

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

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

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

Kotlin

dependencies {
  val paging_version = "3.3.1"

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

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

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

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

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

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

Informationen zur Verwendung von Kotlin-Erweiterungen finden Sie unter ktx-Dokumentation

Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.

Feedback

Dein Feedback hilft uns, Jetpack zu verbessern. Teilen Sie uns mit, wenn Sie neue Ausgaben entdecken oder zur Verbesserung dieser Bibliothek. In der bestehende Probleme in dieser Bibliothek, bevor Sie eine neue erstellen. So können Sie für ein vorhandenes Problem abstimmen: indem Sie auf die Sternschaltfläche klicken.

Neues Problem erstellen

Weitere Informationen finden Sie in der Dokumentation zur Problemverfolgung. .

Version 3.3

Version 3.3.1

24. Juli 2024

androidx.paging:paging-*:3.3.1 wurde veröffentlicht. Version 3.3.1 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem AsyncPagingDataDiffer oder darauf basierende APIs wie die mit RecyclerView verwendete PagingDataAdapter keine weiteren Ladevorgänge auslösen konnten, wenn die unterstützende Datenquelle beim Scrollen aktualisiert wurde. (I60ca5, b/352586078)
  • Ein Absturz wurde behoben, der auftrat, wenn Elemente beim Scrollen eines RecyclerView mit PagingDataAdapter oder AsyncPagingDataDiffer aus der unterstützenden Datenquelle entfernt wurden. (I8c65a, b/347649763)

Version 3.3.0

14. Mai 2024

androidx.paging:paging-*:3.3.0 wurde veröffentlicht. Version 3.3.0 enthält diese Commits.

Wichtige Änderungen seit Version 3.2.0

  • PagingDataPresenter ist jetzt eine öffentliche Klasse. Plattformübergreifende Vortragende können jetzt auf PagingDataPresenter aufbauen und sind nicht mehr auf interne Paging APIs oder die AsyncPagingDataDiffer von paging-runtime angewiesen.
  • Neue Hilfsmethoden LoadStates und CombinedLoadStates wurden in hasError und isIdle hinzugefügt, um zu prüfen, ob LoadStates den Status „Fehler“ bzw. den Status NotLoading hat. 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 aufweist.
  • PagingData.empty() sendet jetzt standardmäßig NotLoading-Status, es sei denn, benutzerdefinierte LoadStates werden an seinen Konstruktor übergeben. Dies unterscheidet sich vom bisherigen Verhalten, bei dem weder LoadStates gesendet wird, wenn das Element an PagingDataAdapter gesendet wird, oder es wird Ladestatus ausgelöst, wenn es als LazyPagingItems erfasst wird. Wenn es als LazyPagingItems erfasst wird, wird jetzt auch sofort nach der anfänglichen Zusammensetzung eine leere Liste angezeigt.

Kotlin-Kompatibilität mit mehreren Plattformen

Paging liefert jetzt mit Kotlin Multiplatform kompatible Artefakte, was zum Großteil auf Upstream-Arbeiten aus dem Multiplatform-Pging-Projekt von CashApp zurückzuführen ist.

  • paging-common hat alle Paging 3-APIs zu common verschoben und ist jetzt zusätzlich zu Android auch mit jvm und iOS kompatibel.
  • Der Code von paging-testing wurde zu common verschoben und ist jetzt nicht nur mit Android, sondern auch mit jvm und iOS kompatibel.
  • paging-compose hat seinen Code zu common verschoben und liefert ein Android-Artefakt, das der plattformübergreifenden Unterstü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 wurde veröffentlicht. Version 3.3.0-alpha05 enthält diese Commits.

API-Änderungen

  • Beim Paging wird jetzt für allgemeinen Code die AndroidX-Annotation @MainThread verwendet. (I78f0d, b/327682438)

Version 3.3.0-alpha04

6. März 2024

androidx.paging:paging-*:3.3.0-alpha04 wurde veröffentlicht. Version 3.3.0-alpha04 enthält diese Commits.

Fehlerkorrekturen

  • Kleinere Dokumentationsfehler im Zusammenhang mit der neuen Kotlin-Multi-Plattform-Kompatibilität wurden behoben. (aosp/2950785)

Version 3.3.0-alpha03

7. Februar 2024

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

Neue Funktionen

  • PagingDataPresenter ist jetzt eine öffentliche Klasse. Plattformübergreifende Vortragende können jetzt auf PagingDataPresenter aufbauen und sind nicht mehr auf interne Paging APIs oder die AsyncPagingDataDiffer von paging-runtime angewiesen. (Id1f74, b/315214786)
  • Neue Hilfsmethoden LoadStates und CombinedLoadStates 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 ein Ladevorgang in den Status NotLoading oder Fehler eingetreten ist. (Id6c67)

Verhaltensänderung

  • PagingData.empty() sendet jetzt standardmäßig NotLoading-Status, es sei denn, benutzerdefinierte LoadStates werden an seinen Konstruktor übergeben. Dies unterscheidet sich vom bisherigen Verhalten, bei dem weder LoadStates gesendet wird, wenn das Element an PagingDataAdapter gesendet wird, oder es wird Ladestatus ausgelöst, wenn es als LazyPagingItems erfasst wird. Wenn es als LazyPagingItems erfasst wird, wird jetzt auch sofort nach der anfänglichen Zusammensetzung eine leere Liste angezeigt. (I4d11d, b/301833847)

Version 3.3.0-alpha02

20. September 2023

androidx.paging:paging-*:3.3.0-alpha02 wurde veröffentlicht. Version 3.3.0-alpha02 enthält diese Commits.

Kotlin-Kompatibilität mit mehreren Plattformen

Paging liefert jetzt mit Kotlin Multiplatform kompatible Artefakte, was zum Großteil auf Upstream-Arbeiten aus dem Multiplatform-Pging-Projekt von CashApp zurückzuführen ist. Auf diese Weise 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 auch mit jvm und iOS kompatibel.
  • Der Code von paging-testing wurde zu common verschoben und ist jetzt nicht nur mit Android, sondern auch mit jvm und iOS kompatibel.
  • paging-compose hat seinen Code zu common verschoben und liefert ein Android-Artefakt, das der plattformübergreifenden Unterstü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 Protokollierungsschnittstelle, die nur für die interne Verwendung gedacht war, wurde eingestellt (I16e95, b/288623117).

Externer Beitrag

Version 3.3.0-alpha01

20. September 2023

  • Dies ist der erste plattformübergreifende Release der androidx.paging-Bibliotheken. Diese Version hat nur die Artefakte *-jvm und *-android. 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 wurde veröffentlicht. Version 3.2.1 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem die asSnapshot() API des Paging-Testartefakts hängen blieb, wenn ein mit PagingData.from(List) erstellter Ablauf übergeben wurde, da asSnapshot() im Gegensatz zur PagingData.from(List, LoadStates)-Überlastung keine Informationen zum Abschluss des Ladevorgangs hatte. Diese Problemumgehung funktioniert nur für abgeschlossene Abläufe (z.B. ein flowOf(PagingData.from(...))). Für nicht abgeschlossene Abläufe (z.B. MutableStateFlow, verwenden Sie die PagingData.from-Überlastung, die LoadStates bereitstellt. (I502c3)
  • Bei der Funktion zum Erstellen von Seiten wird jetzt intern AndroidUiDispatcher.Main verwendet, damit neue Daten im selben Frame verfügbar sind, in dem der Ladevorgang abgeschlossen ist. (Ia55af)

Version 3.2.0

26. Juli 2023

androidx.paging:paging-*:3.2.0 wurde 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, wo seine Version jetzt mit allen anderen Paging-Artefakten übereinstimmt. Zu den Änderungen seit Version 3.1.0 gehören: <ph type="x-smartling-placeholder">
      </ph>
    • Unterstützung für die Vorschau einer Liste mit fiktiven Daten durch Erstellen einer PagingData.from(fakeData) und Einbinden dieses PagingData in eine MutableStateFlow (z.B. MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Übergeben Sie diesen Ablauf als Empfänger für collectAsLazyPagingItems() an die zusammensetzbaren Funktionen von @Preview, um eine Vorschau anzuzeigen.
    • Unterstützung für alle Lazy-Layouts wie LazyVerticalGrid und HorizontalPager sowie benutzerdefinierte Lazy-Komponenten aus Wear- und TV-Mediatheken. Dies wurde durch die neuen Erweiterungsmethoden itemKey und itemContentType auf niedrigerer Ebene erreicht, mit denen Sie die Parameter key und contentType in den standardmäßigen items APIs implementieren können, die bereits für LazyColumn und LazyVerticalGrid vorhanden sind, sowie deren Entsprechungen in APIs wie HorizontalPager.LazyPagingItems
    • items(lazyPagingItems) und itemsIndexed(lazyPagingItems), die nur LazyListScope unterstützen, wurden eingestellt.
  • Neues paging-testing-Artefakt mit APIs, die für den Einheitentest jeder Ebene der App und deren isolierte Einbindung in Paging entwickelt wurden. Zum Beispiel enthält sie <ph type="x-smartling-placeholder">
      </ph>
    • TestPager, mit der Sie das Verhalten Ihrer eigenen benutzerdefinierten PagingSource-Implementierung unabhängig vom Pager und der echten Benutzeroberfläche validieren können.
    • asPagingSourceFactory APIs zur Umwandlung von Flow<List<Value>> oder statischen List<Value> in PagingSourceFactory, die in Tests an einen Pager übergeben werden können
    • asSnapshot Kotlin-Erweiterung für Flow<PagingData<Value>>, die den Flow<PagingData<Value>> in einen direkten List<Value> übersetzt. Mit dem 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 Seitendaten korrekt ist.
  • Es wurden Standardlogs hinzugefügt, um Informationen zur Paging-Fehlerbehebung auf zwei Ebenen bereitzustellen: 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 das Paging mit Ansichten als auch für das Paging mit Text.
  • Es wurden Konstruktoren für PagingDataAdapter und AsyncPagingDataDiffer hinzugefügt, die CoroutineContext anstelle von CoroutineDispatcher akzeptieren.
  • Es wurde eine neue funktionale PagingSourceFactory-Schnittstelle hinzugefügt, die eine explizitere API-Oberfläche als die vorherige API-Oberfläche bietet () -> PagingSource Lambdas. Diese Factory kann verwendet werden, um einen Pager zu instanziieren.

Version 3.2.0-rc01

21. Juni 2023

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

Externer Beitrag

Version 3.2.0-beta01

7. Juni 2023

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

Schreibassistent

  • Paging Compose hat offiziell die API-Stabilität erreicht. Aus diesem Grund wurde die Version von 1.0.0-alpha20 aktualisiert, damit sie der Version aller anderen Seitenartefakte entspricht.

API-Änderungen

Version 3.2.0-alpha06

24. Mai 2023

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

Neue Funktionen

  • Es wurde eine neue funktionale PagingSourceFactory-Schnittstelle hinzugefügt, die eine explizitere API-Oberfläche als die bestehenden () -> PagingSource-Lambdas bietet. Diese Factory kann verwendet werden, um eine Pager zu instanziieren. (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 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-Tests werden jetzt mit @VisibleForTesting annotiert, damit diese APIs nur in Tests verwendet werden. (I7db6e)
  • Für die asSnapshot API muss kein CoroutineScope mehr übergeben werden. Jetzt wird standardmäßig der Kontext verwendet, der vom übergeordneten Bereich übernommen wurde. (Id0a78, b/282240990)
  • TestPager-Konstruktorparameter neu angeordnet, sodass sie intuitiv mit der Reihenfolge der realen Pager-Konstruktorparameter übereinstimmen (I6185a)
  • Die Verwendung des Lambda-Typs () -> PagingSource<Key, Value> für den Typ PagingSourceFactory<Key, Value> wurde bei Pagingtests migriert. (I4a950, b/280655188)

Änderungen im Verhalten

  • Der Hauptdisponent ist nicht mehr für die Ausführung von asSnapshot-Pagingtests erforderlich. Durch das Festlegen dieses Werts ändert sich das Testverhalten nicht mehr. (Ie56ea)

Version 3.2.0-alpha05

3. Mai 2023

androidx.paging:paging-*:3.2.0-alpha05 wurde veröffentlicht. Version 3.2.0-alpha05 enthält diese Commits.

API-Änderungen

  • Die Paging Testing API von asSnapshot verwendet jetzt standardmäßig den Parameter loadOperations auf ein leeres Lambda. Dadurch kann asSnapshot aufgerufen werden, ohne Ladevorgänge zu übergeben, um die Daten aus dem anfänglichen Aktualisierungsladevorgang abzurufen. (Ied354, b/277233770)

Verbesserte Dokumentation

  • Die Dokumentation zu asPagingSourceFactory() wurde aktualisiert, um klarzustellen, dass es sich um eine Erweiterungsmethode für eine 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 Jumping zu unterstützen. (ID354)

Externe Beiträge

Version 3.2.0-alpha04

8. Februar 2023

androidx.paging:paging-*:3.2.0-alpha04 wurde veröffentlicht. Version 3.2.0-alpha04 enthält diese Commits.

Paging-Tests

  • Das Artefakt paging-testing enthält jetzt eine asPagingSourceFactory-Methode, um eine pagingSourceFactory aus einer Flow<List<Value>> zu erstellen, die einem Pager bereitgestellt wird. Jede vom Ablauf ausgegebene List<Value>> stellt eine Generierung von Paged-Daten dar. Dies erleichtert Paging-Tests beispielsweise für PagingData-Transformationen, indem eine Datenquelle nachgeahmt wird, aus der der Pager Daten erfassen kann. (I6f230, b/235528239)
  • Das Artefakt paging-testing wurde um neue APIs erweitert, mit denen sich prüfen lässt, ob die in einer Flow<PagingData<T>> enthaltenen Daten korrekt sind. Damit lässt sich beispielsweise die Ausgabe einer Flow<PagingData<T>> aus Ihrer ViewModel-Ebene bestätigen.

    Dazu wird die asSnapshot Kotlin-Erweiterung auf Flow<PagingData<Value>> verwendet, die den Flow<PagingData<Value>> in einen direkten List<Value> übersetzt. Mit der Lambda-Funktion asSnapshot können Sie die Benutzeroberfläche Ihrer App über APIs wie scrollTo oder appendScrollWhile auf eine wiederholbare und konsistente Weise nachahmen, sodass Sie jederzeit prüfen können, ob der Daten-Snapshot in Ihrem Satz von Seitendaten 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 innerhalb von runTest ausgeführt werden soll. Weitere Informationen finden Sie unter Kotlin-Koroutinen unter Android testen. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic192/Ic1238

API-Änderungen

  • UI-Aufrufe an getItem und peek in AsyncPagingDataDiffer und PagingDataAdapter sind jetzt korrekt als aufrufbar nur im Hauptthread gekennzeichnet. (I699b6)
  • Platzhalter aus generischen Typen, die von TestPager verwendet werden, wurden entfernt. Dadurch wird es einfacher, die Ergebnisse dieser Methoden in Code zu verarbeiten, der in der Programmiersprache Java geschrieben wurde. (I56c42)

Version 3.2.0-alpha03

24. Oktober 2022

androidx.paging:paging-*:3.2.0-alpha03 wurde 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 den Unittest jeder Ebene Ihrer App und deren Integration in Paging (isoliert) entwickelt wurden.

Dieser erste Release enthält beispielsweise eine TestPager-Klasse, mit der Sie das Verhalten Ihrer eigenen benutzerdefinierten PagingSource-Implementierung unabhängig von Pager und der tatsächlichen Benutzeroberfläche validieren können, die Sie normalerweise für die Simulation der End-to-End-Seiteneinbindung hätten.

TestPager sollte als Fake betrachtet werden – als Test-Double, das 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 innerhalb von runTest ausgeführt werden, wie im Leitfaden zum Testen von Kotlin-Koroutinen unter Android beschrieben.

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

API-Änderungen

  • Ermöglicht eine bequeme Iteration über LoadResult.Page.data bis LoadResult.Page.iterator(). Dies ermöglicht indirekt die Verwendung der Kotlin-Standardbibliotheksmethode flatten, wenn ein List<LoadResult.Page> angegeben wird, z. B. mit der pages-Eigenschaft von PagingState, die an die Methode PagingSource.getRefreshKey übergeben wird. (IE0718)

Version 3.2.0-alpha02

10. August 2022

androidx.paging:paging-*:3.2.0-alpha02 wurde veröffentlicht. Version 3.2.0-alpha02 enthält diese Commits.

Neue Funktionen

  • Paging stellt jetzt Logs über die Klassen AsyncPagingDataDiffer oder PagingDataAdapter bereit, um Debugging-Informationen bereitzustellen, die von PagingData erfasst wurden.
  • Die Logs können mit dem adb shell-Befehl adb shell setprop log.tag.Paging [DEBUG|VERBOSE].(b/235527159) aktiviert werden.

Fehlerkorrekturen

  • Der Fehler aufgrund des fehlenden PagingDataDiffer-Konstruktors wurde behoben, wenn paging-common:3.2.0-alpha01 mit der Laufzeit paging-runtime:3.1.1 oder älter verwendet wurde.(b/235256201)

Version 3.2.0-alpha01

1. Juni 2022

androidx.paging:paging-*:3.2.0-alpha01 wurde 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() auf der Seite des Vortragenden nicht mehr auf CombinedLoadStates aus. Es wurde eine neue Überlastung hinzugefügt, die die Übergabe von sourceLoadStates und remoteLoadStates an diese Konstruktoren ermöglicht, um das bestehende Verhalten der Einstellung von LoadStates aufrechtzuerhalten, d.h. NotLoading(endOfPaginationReached = false)) mit der Option, bei Bedarf auch Remote-Zustände hinzuzufügen. Wenn LoadStates nicht übergeben werden, wird die vorherige CombinedLoadStates auf der Seite des Vortragenden beibehalten, wenn sie 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-Wert ungleich null festgelegt wurde. (IC9542, b/230391606)

Externer Beitrag

  • :compose:ui:ui-test api (updateApi) aufgrund der Migration „test-coroutines-lib“ (I3366d) aktualisiert

Version 3.1

Version 3.1.1

9. März 2022

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

Fehlerkorrekturen

  • LoadState.NotLoading-Zwischenereignisse zwischen Generierungen, die von .cachedIn() falsch eingefügt wurden, wurden entfernt. Durch diese Änderung ist es viel einfacher, auf LoadState-Änderungen zu reagieren, da redundante LoadState.NotLoading-Ereignisse entfernt werden, die zwischen den Wiederholungsversuchen fehlgeschlagener Ladevorgänge, der Aktualisierung oder der Entwertung aufgetreten sind.

Version 3.1.0

17. November 2021

androidx.paging:paging-*:3.1.0 wurde 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
  • Verhaltensänderungen für LoadState:
    • endOfPaginationReached ist jetzt sowohl für PagingSource als auch für RemoteMediator immer false für LoadType.REFRESH
    • LoadStates aus Paging wartet jetzt auf gültige Werte von PagingSource und RemoteMediator, bevor die Ausgabe nachgelagert wird. Neue Generationen von PagingData beginnen jetzt im Aktualisierungsstatus immer korrekt mit Loading und werden in einigen Fällen nicht fälschlicherweise auf NotLoading zurückgesetzt.
    • .loadStateFlow und .addLoadStateListener in Präsentations-APIs senden nicht mehr redundant eine anfängliche CombinedLoadStates, bei der Vermittlerstatus immer auf null festgelegt sind.
  • Bei früheren Generationen erfolgt die Kündigung jetzt eifrig bei der Entwertung bzw. bei neuen Generationen. Es sollte für die Verwendung von .collectLatest auf Flow<PagingData> nicht mehr erforderlich sein, wird aber weiterhin empfohlen.
  • PagingSource.LoadResult.Invalid wurde als neuer Rückgabetyp von PagingSource.load hinzugefügt. Dadurch werden durch Paging alle ausstehenden oder zukünftigen Ladeanfragen an PagingSource verworfen und sie ungültig gemacht. Dieser Rückgabetyp ist darauf ausgelegt, potenziell ungültige oder veraltete Daten zu verarbeiten, die aus der Datenbank oder dem Netzwerk zurückgegeben werden können.
  • Es wurden die Presenter-APIs .onPagesPresented und .addOnPagesUpdatedListener hinzugefügt, die synchron ausgelöst werden, wenn die Seiten in der Benutzeroberfläche dargestellt werden. In folgenden Fällen können Seitenaktualisierungen erfolgen: <ph type="x-smartling-placeholder">
      </ph>
    • Das anfängliche Laden einer neuen Generation von PagingData ist abgeschlossen, unabhängig davon, ob die neue Generation Änderungen an den dargestellten Elementen enthält. d.h. Eine neue Generation, die den anfänglichen Ladevorgang ohne Aktualisierungen abschließt, weil die Liste genau dieselbe ist, löst diesen Callback dennoch aus.
    • Eine Seite wird eingefügt, auch wenn die eingefügte Seite keine neuen Elemente enthält.
    • Eine Seite wird verworfen, auch wenn sie leer war.

Version 3.1.0-rc01

3. November 2021

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

Fehlerkorrekturen

  • Es wurde eine Race-Bedingung und ein Speicherleck in .cachedIn() behoben, bei denen mehrere Ladeereignisse durch ein Downstream-Format gesendet wurden, obwohl 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 wurde veröffentlicht. Version 3.1.0-beta01 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem viele schnell aufgerufene Elemente dazu führten, dass sie für die Berücksichtigung bei „PrefetchDistance“ nicht berücksichtigt wurden und Seitenladevorgänge verzögert wurden. Dies ist besonders dann ein Problem, wenn viele Elemente gleichzeitig in einer Reihenfolge angeordnet sind, bei der das Laden gegenüber der Scrollrichtung des Nutzers priorisiert wird. Diese Elementzugriffe werden jetzt zwischengespeichert und synchron priorisiert, damit sie nicht gelöscht werden. (aosp/1833273)

Version 3.1.0-alpha04

29. September 2021

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

API-Änderungen

  • Flow<PagingData>.observable und Flow<PagingData>.flowable API nicht mehr in der Testphase sind. (Ie0bdd)

Fehlerkorrekturen

  • Für LoadStates ist endOfPaginationReached jetzt immer false für LoadType.REFRESH. Zuvor war es möglich, endOfPagination erreicht für RemoteMediator REFRESH als true, aber nicht für PagingSource. Dieses Verhalten ist jetzt konsolidiert, sodass Sie immer false da es nie sinnvoll ist, für AKTUALISIERUNGEN AKTUALISIERUNG die als Teil des API-Vertrags in LoadStates dokumentiert sind. Wenn Sie entscheiden, Paginierung beendet ist, sollten Sie dies immer in Bezug auf die Anweisungen „ANHENDEN“ oder „VORANSTELLEN“. (I047b6)
  • Die LoadStates aus Paging warten nun auf gültige Werte von beiden PagingSource und RemoteMediator vor der Übertragung zwischen Generationen. Dadurch wird verhindert, dass von neuen Generationen von PagingData NotLoading in CombinedLoadStates.source.refresh, wenn dies bereits der Fall war Wird geladen: neuen Generationen von PagingData beginnen, mit "Laden für Aktualisierungsstatus" statt zunächst mit Zurücksetzen auf "NotLoading" in manchen Fällen falsch.

    Bei früheren Generationen erfolgt die Kündigung jetzt eifrig bei der Entwertung / neuen Generationen zu entwickeln. Es sollte nicht mehr erforderlich sein, um .collectlatest zu verwenden. am Flow<PagingData>, obwohl es nach wie vor dringend empfohlen wird, dies zu tun. (I0b2b5, b/177351336, b/195028524)

  • .loadStateFlow und .addLoadStateListener in Presenter APIs nicht mehr redundant eine erste CombinedLoadStates senden, die immer hat Vermittlerstatus auf null und Quellstatus auf NotLoading(endOfPaginationReached = false) Das bedeutet Folgendes:

    1. Vermittlerstatus werden immer ausgefüllt, wenn Sie RemoteMediator verwenden.
    2. Neuen LoadState-Listener oder neuen Collector für registrieren .loadStateFlow gibt den aktuellen Wert nicht mehr sofort aus wenn keine echte CombinedLoadStates von PagingData Dies kann passieren, wenn ein Collector oder Listener startet bevor ein PagingData gesendet wurde. (I1a748)

Version 3.1.0-alpha03

21. Juli 2021

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

API-Änderungen

  • Ein dritter "LoadResult"-Rückgabetyp "LoadResult.Ungültig" wird zu PagingSource. Wenn ein PagingSource.load LoadResult.Ungültig ist, werden die geladenen Daten durch das Paging verworfen. die PagingSource ungültig machen. Dieser Rückgabetyp dient dazu, potenziell ungültige oder veraltete Daten zu verarbeiten, aus der Datenbank oder dem Netzwerk.

    Wenn beispielsweise in die zugrunde liegende Datenbank geschrieben wird, Da die PagingSource keine Zeit entwertet, kann sie Ergebnisse sind inkonsistent, wenn ihre Implementierung vom Unveränderlichkeit des unterstützenden Datasets, aus dem es geladen wird (z.B. BEGRENZUNG OFFSET-Stildatenbankimplementierungen). In diesem Szenario ist es empfohlen, nach dem Laden auf Entwertung zu prüfen und "LoadResult.Ungültig" zurückgeben, was dazu führt, dass Paging jegliche ausstehende oder zukünftige Ladeanfragen an diese PagingSource und und ungültig erklären.

    Dieser Rückgabetyp wird auch von der Paging2 API unterstützt, die die Methode LivePagedList oder RxPagedList. Bei Verwendung einer PagingSource mit der PagedList APIs von Paging2 wird die PagedList sofort getrennt, weitere Versuche, Daten aus dieser PagedList zu laden, und löst die Entwertung für die PagingSource aus.

    LoadResult ist eine versiegelte Klasse, d. h., dies ist eine nicht quell nicht kompatible Änderung, sodass in Anwendungsfällen Die Ergebnisse von PagingSource.load müssen LoadResult.Ungültig verarbeiten. zur Kompilierungszeit. Beispielsweise nutzen Kotlin-Nutzer Für die Prüfung des Rückgabetyps muss eine Prüfung hinzugefügt werden. für Ungültiger Typ. (Id6bd3, b/191806126, b/192013267)

Fehlerkorrekturen

  • Entwertungs-Callbacks hinzugefügt über PagingSource.register InvalidatedCallback oder DataSource.add InvalidatedCallback jetzt automatisch ausgelöst, wenn sie auf einer PagingSource / DataSource registriert wurden, das bereits ungültig. Dies behebt eine Race-Bedingung, die zu einem Rückgang der Paging geführt hat. zur Entwertung und bleiben hängen, wenn eine Quelle angegeben wird, ist während des anfänglichen Ladevorgangs bereits ungültig. Außerdem entwerten Sie Callbacks werden jetzt ordnungsgemäß entfernt, nachdem sie ausgelöst wurden, wird garantiert höchstens einmal aufgerufen. (I27e69)
  • Übermitteln des Anfangswerts des Platzhalters (InitialPagedList) aus einem neu instanziierten PagedList-Stream, z.B. LivePagedListBuilder oder RxPagedListBuilder löschen zuvor geladene Daten nicht mehr.

Version 3.1.0-alpha02

1. Juli 2021

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

Neue Funktionen

  • OnPagesPresented-Listener und Flow Presenter-APIs hinzugefügt die sofort ausgelöst werden, nachdem die präsentierten Seiten in der Benutzeroberfläche aktualisiert wurden.

    Da diese Updates mit der Benutzeroberfläche synchron sind, können Sie Adaptermethoden aufrufen. wie .Snapshot und .getItemCount, um den Status nach dem Aktualisierung wurde angewendet. Beachten Sie, dass .Snapshot() explizit aufgerufen, da dies bei jeder Aktualisierung teuer sein kann.

    In folgenden Fällen können Seitenaktualisierungen erfolgen:

    • Das anfängliche Laden einer neuen Generation von PagingData ist abgeschlossen. unabhängig davon, ob die neue Generation Änderungen am präsentierten Elemente. d.h. Eine neue Generation, die das anfängliche Laden abschließt keine Aktualisierungen vorgenommen haben, weil die Liste identisch ist, lösen diesen Callback aus.
    • Eine Seite wird eingefügt, auch wenn die eingefügte Seite keine neue Elemente
    • Eine Seite wird gelöscht, auch wenn sie leer war (I272c9, b/189999634).

Fehlerkorrekturen

  • Zugriff auf PagedList.dataSource aus dem ursprünglich erstellten Wert von LivePagedList oder RxPagedList nicht mehr fälschlicherweise eine IllegalStateException (I96707)

Version 3.1.0-alpha01

2. Juni 2021

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

API-Änderungen

  • Von paging-rxjava3 bereitgestellte Kurse sind jetzt verfügbar unter androidx.paging.rxjava3-Pakets an, damit sie nicht in Konflikt mit paging-rxjava2 (Ifa7f6)

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem beim Paging manchmal „No-Op“-Unterschiede ausgelöst wurden an RecyclerView, was dazu führen kann, dass bestimmte Listener frühzeitig ändern. (IC507f, b/182510751)

Externer Beitrag

  • Dem rxjava3-Artefakt wurden verworfene 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 wurde veröffentlicht. Version 1.0.0-alpha20 enthält diese Commits.

Neue Funktionen

  • Die Funktion „Seitenerstellung“ unterstützt jetzt die Vorschau einer Liste mit fiktiven Daten. Dazu wird ein PagingData.from(fakeData) erstellt und dieses PagingData in eine MutableStateFlow eingebunden (z. B. MutableStateFlow(PagingData.from(listOf(1, 2, 3))). Wenn Sie diese Daten als Eingabe für Ihre @Preview verwenden, liefern Aufrufe von collectAsLazyPagingItems() eine Vorschau von LazyPagingItems. (I8a78d, b/194544557)

Fehlerkorrekturen

  • Im Cache gespeicherte Daten von pager.flow.cachedIn, die in LazyPagingItems erfasst wurden, sind jetzt nach der Statuswiederherstellung sofort verfügbar, ohne dass eine asynchrone Erfassung erforderlich ist. Das bedeutet, dass die im Cache gespeicherten Daten sofort nach der anfänglichen Zusammensetzung dargestellt werden können, nachdem der Status wiederhergestellt wurde. (I97a60, b/177245496)

Version 1.0.0-alpha19

3. Mai 2023

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

Unterstützung für alle Lazy-Layouts

Bisher wurden mit der Funktion „Seitenerstellung“ benutzerdefinierte items- und itemsIndexed-Erweiterungen für LazyListScope bereitgestellt. Das bedeutete, dass die Funktion „Seitenerstellung“ nicht mit anderen Layouts wie LazyVerticalGrid, HorizontalPager oder anderen benutzerdefinierten Lazy-Komponenten aus den Wear- und TV-Bibliotheken verwendet werden konnte. Die Behebung dieser Unflexibilität ist das wichtigste Update für diese Version.

Um mehr Lazy-Layouts zu unterstützen, mussten wir APIs auf einer anderen Ebene entwickeln. Statt eine benutzerdefinierte items API für jedes Lazy-Layout bereitzustellen, bietet Paging Compose jetzt etwas niedrigere Erweiterungsmethoden für LazyPagingItems in itemKey und itemContentType. Diese APIs unterstützen Sie bei der Implementierung der Parameter key und contentType in den standardmäßigen items APIs, die bereits für LazyColumn und LazyVerticalGrid vorhanden sind, sowie deren Entsprechungen in APIs wie HorizontalPager. (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 LazyColumn und LazyRow zwar ein paar Zeilen länger, aber wir sind der Meinung, dass Einheitlichkeit in allen Lazy-Layouts ein wichtiger Faktor für Nutzer ist, die die Funktion „Seitenerstellung“ verwenden. Aus diesem Grund wurden die vorhandenen Erweiterungen von LazyListScope inzwischen eingestellt. (I0c459, I92c8f, b/276989796)

API-Änderungen

  • Um die Migration zu den neuen APIs zu erleichtern, unterstützen die Erweiterungsfunktionen items und itemsIndexed in LazyListScope jetzt einen contentType-Parameter, der die Unterstützung in den neuen APIs widerspiegelt. (Ib1918, b/255283378)

Aktualisierung der Abhängigkeiten

  • Die Abhängigkeit von der Funktion „Seitenerstellung“ wurde von Compose 1.0.5 zu Compose 1.2.1 aktualisiert. (Ib1918, b/255283378)

Version 1.0.0-alpha18

8. Februar 2023

androidx.paging:paging-compose:1.0.0-alpha18 wurde ohne Änderungen freigegeben. 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 wurde veröffentlicht. Version 1.0.0-alpha17 enthält diese Commits.

Neue Funktionen

  • Unterstützung für eine benutzerdefinierte CoroutineContext beim Aufrufen von collectLazyPagingItems hinzufügen. (I7a574, b/243182795, b/233783862)

Version 1.0.0-alpha16

10. August 2022

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

Neue Funktionen

  • Paging stellt jetzt Logs über die Klasse LazyPagingItems bereit, um Debugging-Informationen bereitzustellen, die aus PagingData erfasst wurden.
  • Die Logs können mit dem adb shell-Befehl adb shell setprop log.tag.Paging [DEBUG|VERBOSE] aktiviert werden. ([b/235527159}(https://issuetracker.google.com/issues/235527159))

Fehlerkorrekturen

  • Der Fehler aufgrund des fehlenden PagingDataDiffer-Konstruktors wurde behoben, wenn paging-compose:1.0.0-alpha15 mit paging-common:3.1.1 oder einer älteren Version verwendet wurde.(b/235256201,b/239868768)

Version 1.0.0-alpha15

1. Juni 2022

androidx.paging:paging-compose:1.0.0-alpha15 wurde 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 für die anfängliche loadState eine LoadState.Loading-Aktualisierung fest. (I55043, b/224855902)

Version 1.0.0-alpha14

13. Oktober 2021

androidx.paging:paging-compose:1.0.0-alpha14 wurde 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 wurde 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).
  • Eingestellte LazyPagingItems.getAsState() wurde entfernt (Ie65e4)

Version 1.0.0-alpha12

21. Juli 2021

androidx.paging:paging-compose:1.0.0-alpha12 wurde 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 Optionsschlüsselparameter, mit dem Sie einen stabilen Schlüssel für das Element angeben können. Weitere Informationen zu Schlüsseln (I7986d)
  • Die Funktion „lazyPagingItems.getAsState(index)“ wurde verworfen. Verwende stattdessen lazyPagingItems[index]. (I086cb, b/187339372)

Version 1.0.0-alpha11

30. Juni 2021

androidx.paging:paging-compose:1.0.0-alpha11 wurde 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 wurde 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 wurde veröffentlicht. Version 1.0.0-alpha09 enthält diese Commits.

Fehlerkorrekturen

  • LazyPagingItems „itemCount“ und „Item Getter“ 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 der E-Mail-Adresse „Compose“ ab Version 1.0.0-beta07 kompatibel.

Version 1.0.0-alpha08

24. Februar 2021

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

Aktualisiert für die Einbindung in Compose 1.0.0-beta01.

Version 1.0.0-alpha07

10. Februar 2021

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

Aktualisiert für die Einbindung in Compose (Alpha12).

Version 1.0.0-alpha06

28. Januar 2021

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

Fehlerkorrekturen

Aktualisiert und abhängig von Compose 1.0.0-alpha11.

Version 1.0.0-alpha05

13. Januar 2021

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

Aktualisiert und abhängig von Compose 1.0.0-alpha10.

Version 1.0.0-alpha04

16. Dezember 2020

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

Fehlerkorrekturen

  • Die Convenience-Properties wurden aktualisiert. CombinedLoadStates.refresh, CombinedLoadStates.prepend, CombinedLoadStates.append, um nur von Loading auf NotLoading umzusteigen nachdem sowohl der Vermittler- als auch der Quelllaststatus NotLoading sind, Remote-Update wurde angewendet. (I65619)

Version 1.0.0-alpha03

2. Dezember 2020

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

  • Aktualisiert, um Compose 1.0.0-alpha08 zu entsprechen.

Version 1.0.0-alpha02

11. November 2020

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

API-Änderungen

  • Die Methoden .peek(), .snapshot(), .retry() und .refresh() wurden hinzugefügt zu LazyPagingItem-Elemente mit denselben Funktionen wie in AsyncPagingDataDiffer / PagingDataAdapter (Iddfe8, b/172041660)

Version 1.0.0-alpha01

28. Oktober 2020

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

Neue Funktionen

Das Artefakt paging-compose ermöglicht die Integration zwischen The Paging Library und Jetpack Compose. Ein einfaches Anwendungsbeispiel:

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

Version 3.0.1

Version 3.0.1

21. Juli 2021

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

Fehlerkorrekturen

  • Wenn Sie über den von LivePagedList oder RxPagedList erstellten Anfangswert auf PagedList.dataSource zugreifen, 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 wurde veröffentlicht. Version 3.0.0 enthält diese Commits.

Hauptfunktionen von Version 3.0.0

Der Großteil der API aus Paging 2.x.x wurde zugunsten der neuen Paging 3-APIs eingestellt, um die folgenden Verbesserungen zu bieten:

  • Erstklassige Unterstützung für Kotlin-Koroutinen und -Flows
  • Support bei Kündigung
  • Integrierter Ladestatus und Fehlersignale
  • 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 zu Status werden geladen

Version 3.0.0-rc01

21. April 2021

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

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem beim Paging manchmal „No-Op“-Unterschiede ausgelöst wurden an RecyclerView, was dazu führen kann, dass bestimmte Listener frühzeitig ändern. (IC507f, b/182510751)

Version 3.0.0-beta03

24. März 2021

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

Fehlerkorrekturen

  • Wir haben die Handhabung von Platzhaltern um unerwartete Sprünge in RecyclerView zu verhindern. Weitere Informationen finden Sie unter NullPaddingDiffing.md. (If1490, b/170027529, b/177338149)
  • Die verschiedenen PagedList-Builder (alter Kompatibilitätspfad) rufen DataSource.Factory.create() nicht mehr fälschlicherweise 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 wurde veröffentlicht. Version 3.0.0-beta02 enthält diese Commits.

API-Änderungen

  • Rx3-Erweiterungen werden jetzt korrekt weitergegeben @ExperimentalCoroutinesApi Opt-in erforderlich. Zuvor waren sie in der Methode @get markiert, die vom Kotlin-Compiler aufgrund von an: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)

Fehlerkorrekturen

  • Einschränkungen für die öffentliche Nutzung experimenteller APIs erzwingen (I6aa29, b/174531520)
  • Es wurde ein Fehler behoben, bei dem PagingState immer null war, wenn Remote-Aktualisierung aufgerufen.
  • Es wurde ein Fehler behoben, bei dem von PagingSource zurückgegebene leere Seiten das erneute Abrufen des Seitenabrufs verhindern konnten, um prefetchDistance auszuführen, was dazu führte, dass das Paging hängen blieb.

Version 3.0.0-beta01

10. Februar 2021

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

API-Änderungen

  • Rx2- und Rx3-Wrapper zeigen jetzt die experimentelle Annotation an, hängt davon ab. Wenn Sie die Rx-kompatiblen Wrapper in paging-rxjava2 oder paging-rxjava3 enthält, müssen Sie Nutzungen jetzt mit @OptIn(ExperimentalCoroutinesApi::class) (Ib1f9d)

Fehlerkorrekturen

  • Problem behoben: IndexOutOfBoundsException: Inconsistency detected, das manchmal bei Verwendung von DataSource-APIs der Version 2 über Kompatibilitätspfade ausgegeben wurde, wurde behoben.
  • Der isInvalid-Aufruf während der Initialisierung von DataSource, wenn er über Kompatibilitätspfade verwendet wurde, wird jetzt korrekt bei "fetchDispatcher" statt im Hauptthread gestartet. Damit wird ein IllegalStateException behoben, der auf den Datenbankzugriff auf den Hauptthread zurückzuführen ist, wenn die PagingSource-Implementierung von Raum verwendet wird.

Version 3.0.0-alpha13

27. Januar 2021

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

API-Änderungen

  • Die Implementierung von PagingSource.getRefreshKey ist nicht mehr optional, nun eine abstrakte Funktion ohne Standardimplementierung. Nutzer, die migriert werden, können entweder weiterhin die Standardeinstellung zurückgeben -Implementierung, die einfach null zurückgibt, aber getRefreshKey() Es sollte eine echte Implementierung geben, die einen Schlüssel basierend auf dem Aktuelle Scrollposition, mit der das Paging weiter geladen werden kann über PagingState.anchorPosition zentriert um den Darstellungsbereich, wenn möglich. (I4339a)
  • InvalidatingPagingSourceFactory ist jetzt eine finale Klasse (Ia3b0a)
  • Konfiguration des Terminaltrennzeichens (Kopf-/Fußzeile) zulassen mit einem zusätzlichen optionalen SeparatorType-Parameter. Die beiden Optionen sind: <ph type="x-smartling-placeholder">
      </ph>
    • FULLY_COMPLETE: bestehendes Verhalten; auf PagingSource und RemoteMediator, um „endOfPaginationReached“ zu kennzeichnen, bevor das Terminal hinzugefügt wird als Trennzeichen. Wird "RemoteMediator" nicht verwendet, lautet der Wert von remote "loadState". ignoriert. Dies ist vor allem dann sinnvoll, wenn Sie Trennzeichen, wenn der Abschnitt vollständig geladen ist, einschließlich Abrufen aus Remote-Quelle, z.B. Netzwerk.
    • SOURCE_COMPLETE – nur auf das Markieren von PagingSource warten endOfPaginationReached, auch wenn RemoteMediator verwendet wird. Dadurch können Sie Kopf- und Fußzeilen werden synchron mit den ersten sodass Nutzer nicht scrollen müssen, um zum als Trennzeichen. (Ibe993, b/174700218)

Fehlerkorrekturen

  • Ein seltenes Speicherleck wurde behoben, das auftritt, wenn eine PagingSource werden ungültig gemacht, bevor PageFetcher überhaupt mit dem Laden aus dem Dienst beginnen kann. (I9606b, b/174625633)

Version 3.0.0-alpha12

13. Januar 2021

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

API-Änderungen

  • InvalidatingPagingSourceFactory ist keine abstrakte Klasse mehr. da es noch keine abstrakten Methoden gab. (I4a8c4)
  • Es wurde eine Überladung von .cachedIn() hinzugefügt, die ViewModel akzeptiert. anstelle von Lifecycle oder CoroutineScope für Java-Nutzer. (I97d81, b/175332619)
  • Erlauben Sie Java-Aufrufern die Verwendung von PagingData-Transformationsvorgängen in asynchron, indem der Operator „Executor into Transformation“ akzeptiert wird Argumente. Alle Transformationsoperatoren „-Sync“ haben das Suffix „-Sync“. entfernt. Nutzer von Kotlin Coroutine müssen dann Durch Aufrufen der Erweiterungsfunktion, die stattdessen einen Blockierblock akzeptiert Alle PagingData-Transformationsoperatoren wurden in Erweiterungen verschoben der statischen PagingDataTransforms-Klasse. Java-Nutzende müssen können sie über statische Hilfsfunktionen aufgerufen werden, z.B. PagingDataTransforms.map(pagingData, transform) Für Nutzer von Kotlin ist die Syntax dieselbe, aber Sie müssen den . (If6885, b/172895919)

Fehlerkorrekturen

  • Es wurde ein Fehler 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 wurde veröffentlicht. Version 3.0.0-alpha11 enthält diese Commits.

Neue Funktionen

  • Die Unterstützung gespeicherter Status wurde für die folgenden grundlegenden Anwendungsfälle hinzugefügt (insbesondere bei geschichteten Quellen ist noch nicht fertig): <ph type="x-smartling-placeholder">
      </ph>
    • Der Ablauf wird im Cache gespeichert und die Anwendung nicht beendet (z.B. wird der Ablauf in einem Ansichtsmodell im Cache gespeichert und die Aktivität wird während der Verarbeitung neu erstellt)
    • Paging-Quelle gezählt, Platzhalter sind aktiviert und das Layout nicht versetzt.

API-Änderungen

  • PagingSource.getRefreshKey() ist jetzt eine stabile API (I22f6f, b/173530980).
  • PagingSource.invalidate ist keine offene Funktion mehr. Wenn Sie Sie über die Entwertung benachrichtigt werden müssen, rufen Sie registerUnzulässige Callback-Methode überschreiben, anstatt die Entwertung außer Kraft zu setzen. (I628d9, b/173029013, b/137971356)
  • Pager verfügt jetzt über einen einzelnen experimentellen Konstruktor neben seiner regelmäßige Konstruktoren zu erstellen, anstatt experimentelle APIs in ein Verzeichnis nicht experimentelle öffentliche API über die Opt-in-Anmerkung. (I9dc61, b/174531520)
  • Die Convenience-Properties wurden aktualisiert. CombinedLoadStates.refresh, CombinedLoadStates.prepend, CombinedLoadStates.append, um nur von Loading auf NotLoading umzusteigen nachdem sowohl der Vermittler- als auch der Quelllaststatus NotLoading sind, Remote-Update wurde angewendet. (I65619)
  • LoadParams.pageSize wurde entfernt (es war bereits eingestellt). Es wird empfohlen, in Ihrer PagingSource LoadParams.loadSize zu verwenden.

    LoadParams.loadSize ist immer gleich PagingConfig.pageSize außer beim Aufruf des anfänglichen Ladevorgangs, bei dem er dem Aufruf PagingConfig.initialLoadSize

    Wenn Sie Ihre Paging2 DataSource ohne einen Pager oder PagedList, pageSize stimmt möglicherweise nicht mit PagingConfig.pageSize überein, wenn Sie legen auch initialLoadSize fest. Wenn es für Ihr Unternehmen wichtig ist, sollten Sie stattdessen einen Pager/PagedList verwenden, der intern die richtige PageSize für Ihre DataSource-Lademethoden. (I98ac7, b/149157296)

Fehlerkorrekturen

  • Absturz aufgrund von IllegalStateException in folgenden Fällen behoben: mit Trennzeichen mit festgelegtem PagingConfig.maxSize. (I0ed33, b/174787528)
  • Es wurde ein Fehler behoben, bei dem der Ladestatus für VORAB / APPEND nicht angezeigt wurde. Sofort auf NotLoading(endOfPaginationReached = true) aktualisieren nach dem anfänglichen Laden, wenn RemoteMediator festgelegt wurde (I8cf5a)
  • Es wurde ein Fehler behoben, bei dem von präsentierenden APIs wie .snapshot(), .peek() usw. die vorherige (veraltete) Liste in ListUpdateCallback-Updates zurückgegeben wurde.
  • Es wurde ein Fehler behoben, durch den Trennzeichen mit Operatoren keine Kopf- oder Fußzeilen hinzufügten, wenn sie mit RemoteMediator verwendet wurden.
  • Es wurde ein Fehler behoben, bei dem LoadState-Aktualisierungen von NotLoading für RemoteMediator im Ladestatus hängen blieben.
  • Es wurde ein Fehler behoben, bei dem die Paging2.0-Kompatibilitäts-API .asPagingSourceFactory() dazu führen konnte, dass das DataSource-Element als Sicherung auf dem falschen CoroutineDispatcher-Wert initialisiert wurde. Dadurch werden ein Absturz und mögliche ANR-Fehler 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 wurde veröffentlicht. Version 3.0.0-alpha10 enthält diese Commits.

API-Änderungen

  • Die verworfenen APIs dataRefreshFlow und dataRefreshListener wurden entfernt da sie bei Aktualisierungen von loadStateFlow / Listener redundant sind. Für zu migrieren, lautet das Äquivalent zu "loadStateFlow":

    loadStateFlow.distinctUntilChangedBy { it.refresh }
        .filter { it.refresh is NotLoading }
    

    (Ib5570, b/173530908)

Fehlerkorrekturen

  • endOfPaginationReached für RemoteMediator REFRESH jetzt werden korrekt an LoadState-Updates weitergegeben und verhindert Remote-APPEND und PREPEND vom Auslösen entfernt. (I94a3f, b/155290248)
  • Präsentieren einer leeren Liste, entweder aufgrund einer leeren Anfangsseite oder Starke Filter verhindern nicht mehr, dass Paging PREPEND ausgelöst wird. oder APPEND geladen wird. (I3e702, b/168169730)
  • getRefreshKey wurde nicht aufgerufen. der nachfolgenden Generationen von PagingSource, wenn die Entwertung schnell erfolgt. (I45460, b/170027530)

Externer Beitrag

  • Eine neue abstrakte Klasse InvalidatingPagingSourceFactory wurde hinzugefügt. mit einer .invalidate() API, die die Entwertung an alle PagingSources weiterleitet die sie ausgibt. Vielen Dank an @claraf3. (Ie71fc, b/160716447)

Bekannte Probleme

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

Version 3.0.0-alpha09

11. November 2020

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

API-Änderungen

  • dataRefreshFlow / Listener-Methoden mit einem ersetzt die Klausel. (I6e2dd)

Fehlerkorrekturen

  • Problem behoben, bei dem IllegalArgumentException ausgegeben wurde, wenn Trennzeichen mit RemoteMediator verwendet wurden und eine Entwertung 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 wurde veröffentlicht. Version 3.0.0-alpha08 enthält diese Commits.

API-Änderungen

  • Die Kotlin-/Java-Varianten von DataSource.InvalidatedCallback wurden kombiniert, indem SAM-Conversions in Kotlin über funktionale (in Kotlin 1.4 verfügbar). Dadurch wird auch ein Fehler behoben, bei dem Die Kotlin-Variante von "Entwertung von Callbacks" wurde nach der Transformation nicht aufgerufen. von .map oder .mapByPage (I1f244, b/165313046)

Fehlerkorrekturen

  • Die Interaktion des Seitentyps mit ViewPager wurde erheblich verbessert. Insbesondere wird durch Paging kein RemoteMediator#load-Aufruf mehr abgebrochen, weil eine Seite ungültig geworden ist. Außerdem wird erst dann eine Anfrage zum Anfügen/Voranstellen des Ladevorgangs gesendet, wenn REFRESH erforderlich ist, bis die REFRESH-Anfrage erfolgreich abgeschlossen wurde. (I6390b, b/162252536)
  • API-Lint-Prüfung für MissingGetterMatchingBuilder ist für Androidx aktiviert (I4bbea, b/138602561).
  • Es wurde ein Fehler behoben, durch den .withLoadState* ConcatAdapter-Hilfsprogrammen Absturz aufgrund der Benachrichtigung von RecyclerView aus dem Hintergrundthread (I18bb5, b/170988309)
  • Es wurde ein Fehler behoben, bei dem das Laden einer sehr kleinen, nicht leeren Seite manchmal verhindert, dass der Prefetch Ladevorgänge korrekt auslöste.Iffda3 b/169259468

Version 3.0.0-alpha07

1. Oktober 2020

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

API-Änderungen

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

Fehlerkorrekturen

  • Behebung des Fehlers "IndexOutOfBounds", der in RemoteMediator aufgrund einer Race-Bedingung. (I00b7f, b/165821814)
  • Es wurde eine Race-Bedingung in DataSource -> behoben. PagingSource-Konvertierung, die dazu führen könnte, dass die resultierende PagingSource Entwertungssignale von DataSource ignoriert.
  • Es wurde ein Problem in der Seitenabruflogik behoben, bei dem neue Generationen von PagingSource manchmal nicht erfasst wurden, bis PagingDataAdapter.refresh() aufgerufen wurde.
  • Es wurde ein Problem behoben, durch das die Scrollposition manchmal verloren ging, wenn eine DataSource, die in Verbindung mit RemoteMediator in eine PagingSource (wie die von Room erzeugte) konvertiert wurde, 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 wurde veröffentlicht. Version 3.0.0-alpha06 enthält diese Commits.

API-Änderungen

  • UnsupportedOperationException mit klareren Botschaften rund um fehlende Unterstützung für stabile IDs wird nun gemeldet, PagingDataAdapter.setHasStableIds wird aufgerufen. (Ib3890, b/158801427)

Fehlerkorrekturen

  • Mit insertSeparators werden keine leeren Seiten mehr herausgefiltert, Vorabrufen können vom Vortragenden auch dann eingehalten werden, 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 wurde veröffentlicht. Version 3.0.0-alpha05 enthält diese Commits.

Fehlerkorrekturen

  • Beim Paging werden Seiten jetzt korrekt vorab abgerufen, auch wenn die dargestellten Daten stark gefiltert sind
  • Wenn LoadResult.Error für einen wiederholten Ladevorgang zurückgegeben wird, löst beim Elementzugriff nicht mehr fälschlicherweise ein neuer Versuch aus

Externer Beitrag

  • Danke an Clara F für die Hilfe bei der Bereinigung einiger Tests! (549612)

Version 3.0.0-alpha04

5. August 2020

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

API-Änderungen

  • peek() API wurde AsyncPagingDataDiffer und PagingDataAdapter, um den präsentierten Datenzugriff ohne Triggerseite zuzulassen geladen wird. (I38898, b/159104197)
  • snapshot()-API zu PagingDataAdapter hinzugefügt und AsyncPagingDataDiffer, um das Abrufen der präsentierten Elemente zu ermöglichen, den Seitenabruf ausgelöst. (I566b6, b/159104197)
  • PagingData.from(List<T>)-Konstruktor hinzugefügt, um zuzulassen Sie präsentieren statische Listen, die mit dem PagingData-Fluss zum Anzeigen statischer Listen in bestimmten Zuständen, z.B. vor oder einfach zum Testen von Transformationen. (Id134d)
  • dataRefresh Flow / Listener APIs in der ursprünglichen Form einstellen Der Status der dargestellten Elemente soll unter REFRESH verfügbar gemacht werden. Durch Verbesserungen des „loadState Flow“- und der Listener-Callback-Timings und der „itemCount“-Eigenschaft ist dieser Vorgang redundant (Ia19f3).
  • RxJava3-Kompatibilitäts-Wrapper für PagingSource und RemoteMediator hinzugefügt (I49ef3, b/161480176)

Fehlerkorrekturen

  • PositionalDataSource in PagingSource umgewandelt über toPagingSourceFactory-Hilfsprogramm, einschließlich PagingSource, das vom Chatroom generiert wurde kennzeichnen sich jetzt korrekt, um das Springen zu unterstützen. (I3e84c, b/162161201)
  • Es wurde ein Fehler behoben, bei dem die synchrone Variante von "submitData" verwendet wurde. führt manchmal zu einem Rennen mit ClosedSendChannelException (I4d702, b/160192222)

Externer Beitrag

  • Vielen Dank an Zac Sweers für das Hinzufügen von RxJava3-Kompatibilitäts-Wrappern im Namen von Slack! (I49ef3, b/161480176)

Version 3.0.0-alpha03

22. Juli 2020

androidx.paging:paging-*:3.0.0-alpha03 wurde 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() vereinfachen sollte (I8bf15).
  • DataSource-Kotlin-Zuordnungsfunktionsvarianten aus Java ausgeblendet, um Unklarheiten zwischen Original- und Kotlin-Varianten gelöst werden. (If7b23, b/161150011)
  • Redundante APIs, die Kotlin-Nutzern den Komfort dienen sollen, als @JvmSynthetic (I56ae5) gekennzeichnet.
  • Überlastungen für den Konstruktor von LoadResult.Page hinzugefügt wodurch der Standardwert für „itemBefore“ und „itemsAfter“ auf COUNT_UNDEFINED (I47849) festgelegt wird
  • Bestehende PagingData-Operatoren akzeptieren Unterbrechungsmethoden jetzt sowie die neuen Funktionen „mapSync“, „FlatMapSync“ und „filterSync“, für Java-Nutzende. Die bestehenden Transformationsmethoden wurden wurden zu den Erweiterungsfunktionen verschoben, sodass Kotlin-Nutzer diese jetzt importieren müssen. (I34239, b/159983232)

Fehlerkorrekturen

  • Raum- und Positionaldatenquellen-Plagingquellen werden jetzt ein vorangestelltes Trennzeichen als Teil der ersten Seite anzuzeigen, damit der Nutzer ohne scrollen zu müssen. (I6f747, b/160257628)
  • Zugriff auf Element über Platzhalter Laden von PagingSource richtig auslösen, bis eine Seite zurückgegeben wird, die den angeforderten Index erfüllt nach der Transformation durch PagingData.filter() (I95625, b/158763195)
  • Fehler behoben, bei dem manchmal nach PagingSource gibt einen Fehler zurück, der PagingDataAdapter.retry() verhindern könnte durch einen Wiederholungsversuch. (I1084f, b/160194384)
  • Es wurde ein Problem behoben, durch das der Zugriff auf ein Element nach dem Verschieben einer Seite möglicherweise Es werden keine Seiten geladen, obwohl der Elementzugriff innerhalb von „prefetchDistance“ erfolgte (Ie95ae, b/160038730).
  • Durch Festlegen von PagingConfig.maxSize werden keine Platzhalter mehr aktiviert nach einem Drop-Ereignis (I2be29, b/159667766)

Version 3.0.0-alpha02

24. Juni 2020

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

API-Änderungen

  • Zusätzliche Überlastungen für den Konstruktor von PagingConfig mit allgemeinen Standardwerten (I39c50, b/158576040)
  • Überlastungen für Konstruktoren von PagingDataAdapter und AsyncPagingDataDiffer mit allgemeinen Standardwerten (Ie91f5)
  • Die Adapter-APIs dataRefreshFlow und dataRefreshListener übergeben Sie jetzt einen booleschen Wert, um zu signalisieren, ob PagingData leer ist (I6e37e, b/159054196).
  • RxJava und Guava APIs für RemoteMediator hinzugefügt: RxRemoteMediator und ListenableFutureRemoteMediator
  • PagingState wurde um Hilfsfunktionen für den allgemeinen Elementzugriff ergänzt, z. B. isEmpty() und firstItemOrNull() (I3b5b6, b/158892717).

Fehlerkorrekturen

  • Pager prüft jetzt die Wiederverwendung von PagingSource in der Factory, um die versehentliche Wiederverwendung ungültiger PagingSources zu verhindern, was einen unklaren Fehler verursachte (I99809, b/158486430).
  • Fehler von RemoteMediator REFRESH verhindern nicht mehr das Laden von PagingSource (I38b1b, b/158892717).
  • Die nicht sperrende Version von submitData verursacht keinen Absturz mehr aufgrund der gleichzeitigen Erfassung auf mehreren PagingData-Elementen, wenn wird nach der ausgesetzten Version von submitData aufgerufen. (I26358, b/158048877)
  • Problem behoben: "Daten können nicht zweimal vom Pager abgerufen werden" Ausnahme, die nach der Konfigurationsänderung auftreten könnte (I58bcc, b/158784811)

Version 3.0.0-alpha01

10. Juni 2020

androidx.paging:paging-*:3.0.0-alpha01 wurde 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 von Version 3.0

Bekannte Probleme

  • Javadocs für Paging 3 sind 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 wurde veröffentlicht. Version 2.1.2 enthält diese Commits gegenüber 2.1.0.

Fehlerkorrekturen

  • Fehlerkorrektur für IndexOutOfBoundsException in seltenen Fällen, wenn eine Position während der Entwertung konvertiert wurde.

Release-Problem

  • Paging-Version 2.1.1 wurde aus einem falsch konfigurierten Zweig falsch veröffentlicht und stellt teilweise implementierte APIs und Funktionen bereit, die in einer zukünftigen Version verfügbar sind.

  • Paging 2.1.2 enthält die Korrektur der Lastzentrierung, die ursprünglich in 2.1.1 veröffentlicht wurde, aber diesmal korrekt auf Version 2.1.0 gesetzt wurde. Es wird dringend empfohlen, ein Upgrade auf diese Version durchzuführen, wenn Sie derzeit Version 2.1.1 verwenden.

Version 2.1.1

Version 2.1.1

18. Dezember 2019

androidx.paging:paging-*:2.1.1 wurde veröffentlicht. Version 2.1.1 enthält diese Commits.

Fehlerkorrekturen

  • Zusammenhängende anfängliche Ladevorgänge aus PositionalDataSources sind jetzt auf den letzten Zugriff zentriert, wenn Platzhalter deaktiviert sind

Version 2.1.0

Version 2.1.0

25. Januar 2019

Paging 2.1.0 wurde ohne Änderungen gegenüber 2.1.0-rc01 freigegeben.

Version 2.1.0-rc01

6. Dezember 2018

Paging 2.1.0-rc01 wurde ohne Änderungen gegenüber 2.1.0-beta01 freigegeben.

Version 2.1.0-beta01

1. November 2018

Paging 2.1.0-beta01 wurde ohne Änderungen gegenüber 2.1.0-alpha01 freigegeben.

Version 2.1.0-alpha01

12. Oktober 2018

Die Paging-2.1.0-alpha01 enthält zwei wichtige Neuerungen: das Entfernen von Seiten und KTX-Erweiterungsbibliotheken für jedes Artefakt sowie mehrere andere API-Änderungen und Fehlerkorrekturen.

API-Änderungen

  • PagedList.Config.Builder.setMaxSize() zur Begrenzung der Anzahl der geladenen Elemente im Arbeitsspeicher hinzugefügt.
  • 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 prüfen, ob „PagedList“ ausgetauscht wird. b/111698609
  • PagedListAdapter.onCurrentListChanged() Variante wurde hinzugefügt, die die alte und die neue Liste übergibt. Die vorherige Variante wurde eingestellt.
  • Es wurden PagedListAdapter/AsyncPagedListDiffer.submitList()-Varianten hinzugefügt, die einen zusätzlichen Callback verwenden, der nach dem Differenzieren ausgelöst wird, wenn die Paged-Liste angezeigt wird. Auf diese Weise können Sie einen PagedList-Austausch mit anderen Aktualisierungen der Benutzeroberfläche synchronisieren. b/73781068
  • PagedList.getLoadedCount() wurde hinzugefügt, damit du weißt, wie viele Elemente sich im Arbeitsspeicher befinden. Der Rückgabewert ist immer gleich .size(), wenn Platzhalter deaktiviert sind.

Fehlerkorrekturen

  • Es wurde eine Race-Bedingung behoben, die auftrat, wenn Listen unterschiedlich wiederverwendet werden b/111591017.
  • PagedList.loadAround() gibt jetzt IndexOutOfBoundsException aus, wenn der Index ungültig ist. Zuvor konnte sie mit einer unklaren anderen Ausnahme abstürzen.
  • Problem behoben, bei dem eine extrem kleine anfängliche Ladegröße zusammen mit unveränderten Daten dazu führte, dass kein weiteres Laden von b/113122599 erfolgte.

Version 2.0.0

Version 2.0.0

1. Oktober 2018

Paging 2.0.0 wurde mit einer einzigen Fehlerkorrektur veröffentlicht.

Fehlerkorrekturen

  • Ein Absturz wurde behoben, der bei sehr schnellem Scrollen unter Verwendung von PositionalDataSource und Platzhaltern b/114635383 auftreten konnte.

Version 2.0.0-beta01

2. Juli 2018

Fehlerkorrekturen

  • Problem behoben, bei dem Inhalte in einigen vorangestellten Fällen nicht mehr angezeigt wurden (Platzhalter deaktiviert, PositionalDataSource) b/80149146
  • (Bereits in 1.0.1 veröffentlicht) Abstürze, bei denen PagedListAdapter und AsyncPagedListDiffer keine Verschiebungsereignisse signalisierten, wurden behoben. b/110711937

Abhängigkeiten vor AndroidX

Für die folgenden Versionen der Paging-Funktion vor AndroidX sind die folgenden Abhängigkeiten eingeschlossen:

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

Paging 1.0.1 wurde mit einer einzigen Fehlerkorrektur in runtime veröffentlicht. Aus Gründen der Stabilität empfehlen wir dringend, 1.0.1 zu verwenden. Das Paging von RxJava2 1.0.1 wurde ebenfalls veröffentlicht und ist identisch mit 1.0.0-rc1.

Fehlerkorrekturen

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

RxJava2 Version 1.0.0

RxJava2-Version 1.0.0-rc1

16. Mai 2018

Das Paging von RxJava2 1.0.0-rc1 wird auf den Releasekandidaten umgestellt, ohne dass sich gegenüber dem ursprünglichen Zustand Änderungen ergeben haben Alpha.

Version 1.0.0

Version 1.0.0-rc1

19. April 2018 Versionskandidaten für Seitenumbruch

Es sind keine weiteren bekannten Probleme oder neuen Funktionen geplant für den Paging 1.0.0-Release. Führen Sie ein Upgrade Ihrer Projekte durch, um 1.0.0-rc1 zu verwenden und hilf uns bei den Kampftests, damit wir einen steinharten 1.0.0 versenden können.

In diesem Release gibt es keine Änderungen. Er ist mit 1.0.0-beta1 identisch.

Version 1.0.0-beta1

5. April 2018

Paging ist für kurze Zeit in der Betaphase, bevor der Kandidaten freigegeben wird. Wir planen keine weiteren API-Änderungen für Paging 1.0 und die Messlatte für API-Änderungen sind sehr hoch.

Alpha RxJava2-Unterstützung für Paging wird als separates optionales Modul veröffentlicht (android.arch.paging:rxjava2:1.0.0-alpha1) und wird vorübergehend separat versioniert, bis sich dies stabilisiert.

Diese neue Bibliothek bietet eine RxJava2-Alternative zu LivePagedListBuilder, mit der Sie Observable und Flowable mit Scheduler statt Executor:

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 Verdeutlichung der Rolle von Executors in Buildern:

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

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

  • PagedList.mCallbacks Mitglied ist jetzt privat.

Fehlerkorrekturen

  • LivePagedListBuilder löst den anfänglichen PagedList-Ladevorgang für den angegebenen Executor aus statt des Arch Components IO-Thread-Pools.

  • Das Verhalten bei der Entwertung in internen DataSource-Wrappern (zur Implementierung von DataSource.map, sowie durch Platzhalter deaktiviertes PositionalDataSource Laden) b/77237534

Version 1.0.0-alpha7

21. März 2018

Paging 1.0.0-alpha7 wird zusammen mit den Lebenszyklen 1.1.1 veröffentlicht. Da die Paginierung von Alpha7 von der oben genannten Verschiebung der Function-Klasse abhängt, müssen Sie die lifecycle:runtime-Abhängigkeit auf android.arch.lifecycle:runtime:1.1.1 aktualisieren.

Paging alpha7 wird voraussichtlich als letzte Version verfügbar sein, bevor die Funktion zur Paging-Funktion in der Betaversion verfügbar ist.

API-Änderungen

  • DataSource.LoadParams-Objekte haben jetzt einen öffentlichen Konstruktor und DataSource.LoadCallback-Objekte sind jetzt abstrakt. Dies ermöglicht das Wrapping eines DataSource-Objekts oder das direkte Testen eines DataSource-Objekts mit einem fiktiven Callback. b/72600421
  • Mapper für DataSource und DataSource.Factory <ph type="x-smartling-placeholder">
      </ph>
    • Mit map(Function<IN,OUT>) können Sie Ergebnisse, die von einem DataSource geladen wurden, transformieren, zusammenfassen oder dekorieren.
    • mapByPage(<List<IN>,List<OUT>>) aktiviert dasselbe für die Batchverarbeitung (z.B. wenn aus SQL geladene Elemente zusätzlich eine separate Datenbank abfragen müssen, was im Batch möglich ist).
  • PagedList#getDataSource() wurde als praktische Methode hinzugefügt b/72611341
  • Alle verworfenen Klassen wurden aus der API entfernt, einschließlich der Überreste des Pakets recyclerview.extensions und des LivePagedListProvider.
  • DataSource.Factory wird von einer Schnittstelle in eine abstrakte Klasse geändert, um Kartenfunktionen zu aktivieren.

Fehlerkorrekturen

  • Die Builder wurden zu endgültig geändert. b/70848565
  • Die Implementierung des Raums DataSource wurde jetzt korrigiert, um Anfragen an mehrere Tabellen zu verarbeiten. Diese Korrektur ist in Raum 1.1.0-beta1 enthalten, siehe oben.
  • Es wurde ein Fehler behoben, bei dem BoundaryCallback.onItemAtEndLoaded für PositionalDataSource nicht aufgerufen wurde, wenn Platzhalter aktiviert und ist die Gesamtgröße genau ein Vielfaches der Seitengröße.

Version 1.0.0-alpha5

22. Januar 2018

Fehlerkorrekturen

  • Fehler beim Laden von Seiten bei deaktivierten Platzhaltern beheben b/70573345
  • Zusätzliches Logging zum Aufspüren des IllegalArgumentException-Fehlers b/70360195 (und spekulative Korrektur im Raum)
  • Fehlerkorrekturen für den Javadoc-Beispielcode b/70411933 und b/71467637