Seitenumbruch

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

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

Artefakt Stabile Version Releasekandidat Beta-Ausgabe Alpharelease
Paging* 3.2.1 - 3.3.0-beta01 -
Paging-Compose 3.2.1 - 3.3.0-beta01 -
Diese Mediathek wurde zuletzt am 3. April 2024 aktualisiert

Abhängigkeiten deklarieren

Zum Hinzufügen einer Abhängigkeit von Paging müssen Sie Ihrem Projekt das Maven-Repository von Google hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.

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

Groovig

dependencies {
  def paging_version = "3.2.1"

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

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

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

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

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

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

Kotlin

dependencies {
  val paging_version = "3.2.1"

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

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

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

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

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

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

Informationen zur Verwendung von Kotlin-Erweiterungen finden Sie in der ktx-Dokumentation.

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

Feedback

Dein Feedback hilft uns, Jetpack zu verbessern. Lassen Sie uns wissen, wenn Sie neue Probleme entdecken oder Ideen zur Verbesserung dieser Bibliothek haben. Sehen Sie sich die vorhandenen Probleme in dieser Bibliothek an, bevor Sie eine neue erstellen. Durch Klicken auf die Stern-Schaltfläche können Sie zu einem vorhandenen Problem abstimmen.

Neues Problem erstellen

Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.

Version 3.3

Version 3.3.0-beta01

3. April 2024

androidx.paging:paging-*:3.3.0-beta01 wurde ohne wichtige Änderungen veröffentlicht. Version 3.3.0-beta01 enthält diese Commits.

Version 3.3.0-alpha05

20. März 2024

androidx.paging:paging-*:3.3.0-alpha05 wird freigegeben. Version 3.3.0-alpha05 enthält diese Commits.

API-Änderungen

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

Version 3.3.0-alpha04

6. März 2024

androidx.paging:paging-*:3.3.0-alpha04 wird freigegeben. Version 3.3.0-alpha04 enthält diese Commits.

Fehlerkorrekturen

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

Version 3.3.0-alpha03

7. Februar 2024

androidx.paging:paging-*:3.3.0-alpha03 wird freigegeben. Version 3.3.0-alpha03 enthält diese Commits.

Neue Funktionen

  • PagingDataPresenter ist jetzt ein öffentlicher Kurs. Plattformübergreifende Präsentierende können jetzt auf PagingDataPresenter aufbauen, anstatt interne Paging APIs oder die AsyncPagingDataDiffer von paging-runtime zu benötigen. (Id1f74, b/315214786)
  • Neue Hilfsmethoden LoadStates und CombinedLoadStates hinzugefügt, um zu prüfen, ob sich LoadStates im Status „Fehler“ oder „NotLoading“ befindet. Außerdem wurde eine neue API hinzugefügt, die auf einem LoadStateFlow wartet, bis sich eine Last im Status NotLoading oder Fehler befindet. (Id6c67)

Verhaltensänderung

  • PagingData.empty() sendet jetzt standardmäßig NotLoading-Zustände, sofern keine benutzerdefinierten LoadStates an seinen Konstruktor übergeben werden. Dies weicht von dem bestehenden Verhalten ab, bei dem LoadStates nicht ausgelöst wird, wenn es an PagingDataAdapter gesendet wird, oder Ladestatus ausgelöst werden, wenn es als LazyPagingItems erfasst wird. Wenn es als LazyPagingItems erfasst wird, wird jetzt auch direkt nach der ersten Zusammensetzung eine leere Liste angezeigt. (I4d11d, b/301833847)

Version 3.3.0-alpha02

20. September 2023

androidx.paging:paging-*:3.3.0-alpha02 wird freigegeben. Version 3.3.0-alpha02 enthält diese Commits.

Kotlin-Kompatibilität mit mehreren Plattformen

Paging liefert jetzt Artefakte, die mit Kotlin Multiplatform kompatibel sind, was zu einem großen Teil der vorgelagerten Arbeit aus dem Multiplatform-Paging-Projekt von CashApp zu verdanken ist. Auf diese Weise können wir Divergenz zwischen zwei Repositories vermeiden und für Kompatibilität sorgen.

  • paging-common hat alle Paging 3 APIs zu common verschoben und ist jetzt neben Android auch mit JVM und iOS kompatibel.
  • paging-testing hat seinen Code in common verschoben und ist jetzt neben Android auch mit JVM und iOS kompatibel.
  • paging-compose hat seinen Code nach common verschoben und versendet 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 Logger-Schnittstelle, die nur für den internen Gebrauch vorgesehen 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 hat nur die Artefakte *-jvm und *-android. Verwenden Sie für Varianten von macOS, iOS und Linux 3.3.0-alpha02.

Version 3.2

Version 3.2.1

6. September 2023

androidx.paging:paging-*:3.2.1 wird freigegeben. Version 3.2.1 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem die asSnapshot() API des Paging Testing-Artefakts beim Übergeben eines mit PagingData.from(List) erstellten Ablaufs aufhängte, da asSnapshot() (im Gegensatz zur PagingData.from(List, LoadStates)-Überlastung) keine Informationen zum Abschluss des Ladevorgangs hatte. Diese Problemumgehung funktioniert nur für vervollständigbare Abläufe (z.B. flowOf(PagingData.from(...))). Für nicht vervollständigende Abläufe (z.B. MutableStateFlow verwendet die PagingData.from-Überlastung, die LoadStates bereitstellt. (I502c3)
  • Für die Funktion „Auslagerung“ wird jetzt intern AndroidUiDispatcher.Main verwendet, um sicherzustellen, dass neue Daten im selben Frame verfügbar sind, in dem der Ladevorgang abgeschlossen ist. (Ia55af)

Version 3.2.0

26. Juli 2023

androidx.paging:paging-*:3.2.0 wird freigegeben. Version 3.2.0 enthält diese Commits.

Wichtige Änderungen seit Version 3.1.0

  • Paging Compose erreichte API-Stabilität und wurde mit dem Rest von Paging wieder zusammengeführt. Die Version entspricht jetzt allen anderen Paging-Elementen. Zu den Änderungen seit Version 3.1.0 gehören:
    • Unterstützung für die Vorschau einer Liste gefälschter Daten durch Erstellen eines PagingData.from(fakeData) und Verpacken dieses PagingData in eine MutableStateFlow (z.B. MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Übergeben Sie diesen Ablauf an @Preview zusammensetzbare Daten als Empfänger für collectAsLazyPagingItems(), um eine Vorschau anzuzeigen.
    • Unterstützung für alle Lazy-Layouts wie LazyVerticalGrid und HorizontalPager sowie für benutzerdefinierte Lazy-Komponenten aus Wear- und TV-Bibliotheken. Dies wurde durch die neuen LazyPagingItems-Erweiterungsmethoden itemKey und itemContentType auf niedrigerer Ebene erreicht, mit denen du die Parameter key und contentType in die items-Standard-APIs, die bereits für LazyColumn, LazyVerticalGrid sowie ihre Entsprechungen in APIs wie HorizontalPager, implementieren können.
    • items(lazyPagingItems) und itemsIndexed(lazyPagingItems), die nur LazyListScope unterstützen, wurden eingestellt.
  • Neues paging-testing-Artefakt, das APIs zum Testen der einzelnen Schichten Ihrer App und deren isolierte Integration mit Paging bereitstellt. Sie enthält beispielsweise
    • TestPager-Klasse, mit der Sie das Verhalten Ihrer eigenen benutzerdefinierten PagingSource-Implementierung unabhängig vom Pager und der echten Benutzeroberfläche validieren können.
    • asPagingSourceFactory APIs zum Transformieren eines Flow<List<Value>> oder eines statischen List<Value> in eine PagingSourceFactory, die 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> umwandelt. Mit dem asSnapshot lambda können Sie die Benutzeroberfläche Ihrer App über APIs wie scrollTo oder appendScrollWhile nachahmen, um jederzeit prüfen zu können, ob der Snapshot der Daten in den Seitendaten korrekt ist.
  • Es wurden Standardprotokolle hinzugefügt, um Informationen zur Fehlerbehebung für das Paging auf zwei Ebenen bereitzustellen: VERBOSE und DEBUG. Die Logs können über den 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 der Funktion "Compose".
  • Es wurden Konstruktoren für PagingDataAdapter und AsyncPagingDataDiffer hinzugefügt, die CoroutineContext anstelle von CoroutineDispatcher akzeptieren.
  • Es wurde eine neue PagingSourceFactory-funktionale Schnittstelle hinzugefügt, die eine explizitere API-Oberfläche als die vorherigen Lambdas () -> PagingSource bietet. Diese Factory kann zum Instanziieren eines Pager verwendet werden.

Version 3.2.0-rc01

21. Juni 2023

androidx.paging:paging-*:3.2.0-rc01 wird freigegeben. Version 3.2.0-rc01 enthält diese Commits.

Externer Beitrag

  • Vielen Dank, Veyndan, für deinen Beitrag zur Umstellung von Paging von den Besonderheiten von Android/JVM. (#553, #554, #555 und #559)

Version 3.2.0-beta01

7. Juni 2023

androidx.paging:paging-*:3.2.0-beta01 wird freigegeben. Version 3.2.0-beta01 enthält diese Commits.

Paging und Schreiben

  • Die Funktion zum Erstellen von Seiten hat offiziell die API-Stabilität erreicht. Daher wurde die Version von 1.0.0-alpha20 aktualisiert, sodass sie jetzt mit der Version aller anderen Paging-Artefakte übereinstimmt.

API-Änderungen

Version 3.2.0-alpha06

24. Mai 2023

androidx.paging:paging-*:3.2.0-alpha06 wird freigegeben. Version 3.2.0-alpha06 enthält diese Commits.

Neue Funktionen

  • Es wurde eine neue PagingSourceFactory-Funktionsschnittstelle hinzugefügt, die eine explizitere API-Oberfläche als die vorhandenen () -> PagingSource-Lambdas bietet. Diese Factory kann zum Instanziieren eines Pager verwendet werden. (I33165, b/280655188)
  • Neue paging-testing API von List<Value>.asPagingSourceFactory() wurde hinzugefügt, um ein PagingSourceFactory abzurufen, das nur aus einer unveränderlichen Liste von Daten geladen wird. Die vorhandene Erweiterung unter Flow<List<Value>> sollte weiterhin zum Testen mit statischen Daten mehrerer Generationen verwendet werden. (Id34d1, b/280655188)

API-Änderungen

  • Alle öffentlichen APIs in Pagingtests sind jetzt mit @VisibleForTesting annotiert, um sicherzustellen, dass diese APIs nur in Tests verwendet werden. I7db6e.
  • Für die asSnapshot API muss 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 der Reihenfolge der echten Pager-Konstruktorparameter entsprechen (I6185a)
  • Die Verwendung des Lambda-Typs () -> PagingSource<Key, Value> zum Typ PagingSourceFactory<Key, Value> wurde für Paging-Tests migriert. (I4a950, b/280655188)

Änderungen des Verhaltens

  • Der Haupt-Dispatcher ist zum Ausführen von asSnapshot-Auslagerungstests nicht mehr erforderlich. Wenn Sie ihn festlegen, werden keine Änderungen am Testverhalten mehr vorgenommen. (Ie56ea)

Version 3.2.0-alpha05

3. Mai 2023

androidx.paging:paging-*:3.2.0-alpha05 wird freigegeben. Version 3.2.0-alpha05 enthält diese Commits.

API-Änderungen

  • Die Paging Testing API von asSnapshot ist jetzt standardmäßig für ihren loadOperations-Parameter eine leere Lambda-Funktion eingestellt. Dadurch kann asSnapshot aufgerufen werden, ohne dass Ladevorgänge übergeben werden müssen, um die Daten aus dem anfänglichen Aktualisierungsladevorgang abzurufen. (Ied354, b/277233770)

Verbesserungen der Dokumentation

  • Die Dokumentation zu asPagingSourceFactory() wurde aktualisiert, um klarzustellen, dass es sich um eine Erweiterungsmethode für eine Flow handelt, die eine wiederverwendbare Factory zum Generieren von PagingSource-Instanzen zurückgibt. (I5ff4f, I705b5)
  • Die Dokumentation zum Konstruktor LoadResult.Page wurde aktualisiert, um zu verdeutlichen, dass itemsBefore und itemsAfter überschrieben werden müssen, um das Springen zu unterstützen. (Ied354)

Externe Unterstützung

Version 3.2.0-alpha04

8. Februar 2023

androidx.paging:paging-*:3.2.0-alpha04 wird freigegeben. Version 3.2.0-alpha04 enthält diese Commits.

Paging-Tests

  • Das Artefakt paging-testing enthält jetzt eine asPagingSourceFactory-Methode zum Erstellen einer pagingSourceFactory aus einer Flow<List<Value>>, die an einen Pager übergeben werden soll. Jede List<Value>>, die vom Ablauf ausgegeben wird, stellt eine Generierung von seitenbasierten Daten dar. Dies erleichtert Paging-Tests beispielsweise für PagingData-Transformationen, indem eine Datenquelle simuliert wird, aus der der Pager Daten erfassen soll. (I6f230, b/235528239)
  • Das Artefakt paging-testing wurde mit neuen APIs erweitert, die geeignet sind, um die Richtigkeit der in Flow<PagingData<T>> enthaltenen Daten zu prüfen. Dies kann beispielsweise verwendet werden, um die Ausgabe eines Flow<PagingData<T>> aus Ihrer ViewModel-Ebene zu bestätigen.

    Dazu wird die Kotlin-Erweiterung asSnapshot für Flow<PagingData<Value>> verwendet, die den Flow<PagingData<Value>> in eine direkte List<Value> umwandelt. Mit der Lambda-Funktion asSnapshot können Sie die Benutzeroberfläche Ihrer App über APIs wie scrollTo oder appendScrollWhile auf wiederholbare und konsistente Weise nachahmen, sodass Sie jederzeit prüfen können, ob der Snapshot der Daten in Ihrem Datensatz korrekt ist.

    // Create your ViewModel instance
    val viewModel = …
    // Get the Flow of PagingData from the ViewModel
    val data< Flow<PagingData<String>> = viewModel.data
    val snapshot: List<String> = data.asSnapshot {
      // Each operation inside the lambda waits for the data to settle before continuing
      scrollTo(index = 50)
    
      // While you can’t view the items within the asSnapshot call,
      // you can continuously scroll in a direction while some condition is true
      // i.e., in this case until you hit a placeholder item
      appendScrollWhile {  item: String -> item != “Header 1” }
    }
    // With the asSnapshot complete, you can now verify that the snapshot
    // has the expected values
    

    asSnapshot ist 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, Ib29b9Ib29b9, Ic18b9/Ic15b9, Ic15b9, Ic15b9, Ic177123)

API-Änderungen

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

Version 3.2.0-alpha03

24. Oktober 2022

androidx.paging:paging-*:3.2.0-alpha03 wird freigegeben. Version 3.2.0-alpha03 enthält diese Commits.

Paging-Tests

Dieser Release enthält ein neues Artefakt: paging-testing. Dieses Artefakt stellt APIs zum Testen der einzelnen Schichten Ihrer App und deren Integration in die Paginierung isoliert bereit.

Der erste Release enthält beispielsweise eine TestPager-Klasse, mit der Sie das Verhalten Ihrer eigenen benutzerdefinierten PagingSource-Implementierung unabhängig von der Pager und der echten Benutzeroberfläche validieren können, die Sie normalerweise zur Simulation der End-to-End-Paging-Integration benötigen würden.

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

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

API-Änderungen

  • Ermöglicht eine bequeme Iteration über LoadResult.Page.data bis LoadResult.Page.iterator(). Dadurch kann indirekt die flatten-Methode der Kotlin-Standardbibliothek genutzt werden, wenn ein List<LoadResult.Page> wie z. B. mit dem pages-Attribut von PagingState angegeben wird, das an die PagingSource.getRefreshKey-Methode übergeben wird. (Ie0718)

Version 3.2.0-alpha02

10. August 2022

androidx.paging:paging-*:3.2.0-alpha02 wird freigegeben. Version 3.2.0-alpha02 enthält diese Commits.

Neue Funktionen

  • Beim Paging werden jetzt Logs über die Klassen AsyncPagingDataDiffer oder PagingDataAdapter bereitgestellt, um mit PagingData erfasste Informationen zur Fehlerbehebung verfügbar zu machen.
  • Die Logs können über den adb shell-Befehl adb shell setprop log.tag.Paging [DEBUG|VERBOSE].(b/235527159) aktiviert werden.

Fehlerkorrekturen

  • Der fehlende PagingDataDiffer-Konstruktorfehler bei Verwendung von paging-common:3.2.0-alpha01 mit Laufzeit-paging-runtime:3.1.1 oder älter wurde behoben.(b/235256201)

Version 3.2.0-alpha01

1. Juni 2022

androidx.paging:paging-*:3.2.0-alpha01 wird freigegeben. Version 3.2.0-alpha01 enthält diese Commits.

API-Änderungen

  • Es wurden Konstruktoren für PagingDataAdapter und AsyncPagingDataDiffer hinzugefügt, die CoroutineContext anstelle von CoroutineDispatcher akzeptieren. (Idc878)
  • Standardmäßig wirken sich PagingData.from() und PagingData.empty() nicht mehr auf CombinedLoadStates für den Vortragenden aus. Eine neue Überlastung, die die Übergabe von sourceLoadStates und remoteLoadStates an diese Konstruktoren ermöglicht, wurde hinzugefügt, um das bestehende Verhalten bei der Einstellung von LoadStates als vollständiges Terminal (d.h. NotLoading(endOfPaginationReached = false)) mit der Option, bei Bedarf auch Remote-Status einzuschließen. Wenn LoadStates nicht übergeben werden, wird die vorherige CombinedLoadStates auf der Präsentationsseite beibehalten, wenn sie die statische PagingData empfängt. (Ic3ce5, b/205344028)

Fehlerkorrekturen

  • Das Ergebnis von PagingSource.getRefreshKey() hat jetzt die richtige Priorität gegenüber initialKey, wenn es null zurückgeben würde, aber ein initialKey ungleich null festgelegt wurde. (Ic9542, b/230391606)

Externer Beitrag

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

Version 3.1

Version 3.1.1

9. März 2022

androidx.paging:paging-*:3.1.1 wird freigegeben. Version 3.1.1 enthält diese Commits.

Fehlerkorrekturen

  • LoadState.NotLoading-Zwischenereignisse zwischen Generationen entfernt, die von .cachedIn() falsch eingefügt wurden. Mit dieser Änderung ist es viel einfacher, auf LoadState-Änderungen zu reagieren, da redundante LoadState.NotLoading-Ereignisse entfernt werden, die zwischen dem Wiederholen fehlgeschlagener Ladevorgängen, beim Aktualisieren oder während der Entwertung aufgetreten sind.

Version 3.1.0

17. November 2021

androidx.paging:paging-*:3.1.0 wird freigegeben. Version 3.1.0 enthält diese Commits.

Wichtige Änderungen seit Version 3.0.0

  • Flow<PagingData>.observable und Flow<PagingData>.flowable APIs sind nicht mehr experimentell
  • Verhaltensänderungen bei LoadState:
    • endOfPaginationReached ist jetzt für LoadType.REFRESH sowohl für PagingSource als auch für RemoteMediator immer false
    • LoadStates aus dem Paging wartet nun auf gültige Werte von PagingSource und RemoteMediator, bevor es nachgelagert wird. Neue PagingData-Generationen 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 in den Presenter-APIs senden nicht mehr redundant eine anfängliche CombinedLoadStates, die immer die Vermittlerstatus auf null gesetzt hat
  • Frühere Generationen werden jetzt fokussiert bei der Entwertung / neuen Generationen gelöscht. Es sollte nicht mehr erforderlich sein, um .collectLatest in Flow<PagingData> zu verwenden, wird aber weiterhin empfohlen.
  • PagingSource.LoadResult.Invalid wurde als neuer Rückgabetyp aus PagingSource.load hinzugefügt. Dadurch werden alle ausstehenden oder zukünftigen Ladeanfragen an dieses PagingSource-Objekt verworfen und ungültig. Dieser Rückgabetyp dient der Verarbeitung potenziell ungültiger oder veralteter Daten, die von der Datenbank oder dem Netzwerk zurückgegeben werden können.
  • Präsentations-APIs .onPagesPresented und .addOnPagesUpdatedListener wurden hinzugefügt, die synchron ausgelöst werden, wenn Seiten in der Benutzeroberfläche angezeigt werden. Seitenaktualisierungen können in folgenden Fällen erfolgen:
    • Das anfängliche Laden einer neuen Generation von PagingData ist abgeschlossen, unabhängig davon, ob die neue Generation Änderungen an den bereitgestellten Elementen enthält. Eine neue Generation, die den ersten Ladevorgang ohne Aktualisierungen abschließt, weil die Liste genau gleich ist, löst diesen Callback aus.
    • Eine Seite wird eingefügt, auch wenn sie keine neuen Elemente enthält.
    • Eine Seite wird entfernt, auch wenn sie leer war.

Version 3.1.0-rc01

3. November 2021

androidx.paging:paging-*:3.1.0-rc01 wird freigegeben. Version 3.1.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde eine Race-Bedingung und ein Speicherleck in .cachedIn() behoben, bei dem mehrere Ladeereignisse von nachgelagerten Paging-Vorgängen gesendet wurden, während keine Beobachter vorhanden waren, oder wenn ein Beobachter zu neuen PagingData wechselte. (Ib682e)

Version 3.1.0-beta01

13. Oktober 2021

androidx.paging:paging-*:3.1.0-beta01 wird freigegeben. Version 3.1.0-beta01 enthält diese Commits.

Fehlerkorrekturen

  • Viele schnelle Elementzugriffe haben dazu geführt, dass sie bei der Berücksichtigung in „prefetchDistance“ nicht berücksichtigt wurden, was dazu führte, dass der Seitenaufbau verzögert wurde. Dieses Problem wurde behoben. Dies ist insbesondere dann ein Problem, wenn viele Elemente gleichzeitig in einer Reihenfolge angeordnet sind, die das Laden in Bezug auf die Scrollrichtung des Nutzers priorisiert. Diese Elementzugriffe werden jetzt gepuffert und synchron priorisiert, um zu verhindern, dass sie gelöscht werden. (aosp/1833273)

Version 3.1.0-alpha04

29. September 2021

androidx.paging:paging-*:3.1.0-alpha04 wird freigegeben. Version 3.1.0-alpha04 enthält diese Commits.

API-Änderungen

  • Die APIs Flow<PagingData>.observable und Flow<PagingData>.flowable befinden sich nicht mehr in der Testphase. (Ie0bdd)

Fehlerkorrekturen

  • Bei LoadStates ist endOfPaginationReached für LoadType.REFRESH jetzt immer false. Bisher war es für endOfPaginationReached möglich, für RemoteMediator REFRESH als true zu verwenden, nicht aber für PagingSource. Dieses Verhalten ist jetzt konsolidiert, sodass immer false zurückgegeben wird, da es niemals sinnvoll ist, REFRESH als Terminal zu verwenden. Es ist jetzt als Teil des API-Vertrags in LoadStates dokumentiert. Wenn Sie entscheiden, ob die Paginierung beendet wird, sollten Sie dies immer in Bezug auf die Richtung APPEND oder PREPEND tun. (I047b6)
  • LoadStates aus Paging warten jetzt auf gültige Werte von PagingSource und RemoteMediator, bevor sie zwischen den Generierungen nachgelagert werden. Dadurch wird verhindert, dass neue PagingData-Generationen in Kombinierter Ladezustand "NotLoading" senden, wenn die Funktion bereits geladen wurde. Neue Generationen von PagingData beginnen jetzt immer korrekt mit "Laden für den Aktualisierungsstatus", anstatt in einigen Fällen fälschlicherweise auf NotLoading zurückgesetzt zu werden.

    Die Löschung vorheriger Generationen erfolgt nun bewusst bei Entwertung/neuen Generationen. Es sollte nicht mehr erforderlich sein, .collectlatest für Flow<PagingData> zu verwenden, wird aber weiterhin dringend empfohlen (I0b2b5, b/177351336, b/195028524).

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

    1. Die Mediator-Status werden bei Verwendung von RemoteMediator immer ausgefüllt.
    2. Wenn Sie einen neuen LoadState-Listener oder einen neuen Collector unter .loadStateFlow registrieren, wird der aktuelle Wert nicht mehr sofort ausgegeben, wenn kein echter CombinedLoadStates von PagingData empfangen wurde. Dies kann passieren, wenn ein Collector oder Listener gestartet wird, bevor PagingData gesendet wurde. (I1a748)

Version 3.1.0-alpha03

21. Juli 2021

androidx.paging:paging-*:3.1.0-alpha03 wird freigegeben. Version 3.1.0-alpha03 enthält diese Commits.

API-Änderungen

  • Der dritte LoadResult-Rückgabetyp LoadResult.Ungültig wird PagingSource hinzugefügt. Wenn eine PagingSource.load "LoadResult.Ungültig" zurückgibt, werden die geladenen Daten beim Paging verworfen und die PagingSource ungültig. Dieser Rückgabetyp dient der Verarbeitung potenziell ungültiger oder veralteter Daten, die von der Datenbank oder dem Netzwerk zurückgegeben werden können.

    Wenn beispielsweise in die zugrunde liegende Datenbank geschrieben wird, die PagingSource jedoch keine zeitliche Entwertung vornimmt, können inkonsistente Ergebnisse zurückgegeben werden, falls ihre Implementierung von der Unveränderlichkeit des zugrunde liegenden Datasets abhängt, aus dem sie geladen wird (z.B. LIMIT OFFSET-Stil-Datenbankimplementierungen). In diesem Szenario empfiehlt es sich, nach dem Laden auf Entwertung zu prüfen und LoadResult.Ungültige zurückzugeben. Dadurch werden alle ausstehenden oder zukünftigen Ladeanfragen an diese PagingSource verworfen und entwertet.

    Dieser Rückgabetyp wird auch von der Paging2 API unterstützt, die LivePagedList oder RxPagedList nutzt. Wenn Sie eine PagingSource mit den PagedList APIs von Paging2 verwenden, wird die PagedList sofort getrennt, wodurch weitere Versuche, Daten in diese PagedList zu laden, gestoppt werden und die Entwertung der PagingSource ausgelöst wird.

    LoadResult ist eine versiegelte Klasse. Das bedeutet, dass es sich um eine quellinkompatible Änderung handelt, sodass Anwendungsfälle, bei denen „PagingSource.load“-Ergebnisse direkt verwendet werden, „LoadResult.Ungültig“ zur Kompilierungszeit verarbeiten müssen. Beispielsweise müssen Kotlin-Nutzer, die den Rückgabetyp vollständig prüfen, eine Prüfung auf „Ungültiger Typ“ hinzufügen. (Id6bd3, b/191806126, b/192013267)

Fehlerkorrekturen

  • Rückrufe zur Entwertung, die über PagingSource.register InvalidatedCallback oder DataSource.add InvalidatedCallback hinzugefügt wurden, werden jetzt automatisch ausgelöst, wenn sie in einer bereits ungültigen PagingSource / DataSource registriert wurden. Dadurch wird eine Race-Bedingung behoben, bei der beim Paging Entwertungssignale gelöscht wurden und beim Bereitstellen einer Quelle, die beim ersten Laden bereits ungültig war, hängen bleibt. Außerdem werden entwertete Callbacks nach dem Auslösen jetzt korrekt entfernt, da sie garantiert höchstens einmal aufgerufen werden. (I27e69)
  • Wenn Sie den Anfangswert des Platzhalters (InitialPagedList) aus einem neu instanziierten PagedList-Stream einreichen, z.B. Mit LivePagedListBuilder oder RxPagedListBuilder werden zuvor geladene Daten nicht mehr gelöscht.

Version 3.1.0-alpha02

1. Juli 2021

androidx.paging:paging-*:3.1.0-alpha02 wird freigegeben. Version 3.1.0-alpha02 enthält diese Commits.

Neue Funktionen

  • Die Listener- und Flow Presenter-APIs onPagesPresented werden ausgelöst, sobald die präsentierten Seiten in der Benutzeroberfläche aktualisiert wurden.

    Da diese Aktualisierungen mit der UI synchron sind, können Sie Adaptermethoden wie „.Snapshot“ oder „.getItemCount“ aufrufen, um den Status nach der Aktualisierung zu überprüfen. Beachten Sie, dass „.snapshot()“ weiterhin explizit aufgerufen werden muss, da dies bei jeder Aktualisierung teuer sein kann.

    Seitenaktualisierungen können in folgenden Fällen erfolgen:

    • Das anfängliche Laden einer neuen Generation von PagingData ist abgeschlossen, unabhängig davon, ob die neue Generation Änderungen an den präsentierten Elementen enthält. Eine neue Generation, die den anfänglichen Ladevorgang ohne Aktualisierungen abschließt, weil die Liste genau gleich ist, löst diesen Callback aus.
    • Eine Seite wird eingefügt, auch wenn die eingefügte Seite keine neuen Elemente enthält.
    • Eine Seite wurde entfernt, auch wenn sie leer war (I272c9, b/189999634).

Fehlerkorrekturen

  • Wenn Sie über den von LivePagedList oder RxPagedList generierten Anfangswert auf PagedList.dataSource zugreifen, wird nicht mehr fälschlicherweise eine IllegalStateException (I96707) ausgelöst.

Version 3.1.0-alpha01

2. Juni 2021

androidx.paging:paging-*:3.1.0-alpha01 wird freigegeben. Version 3.1.0-alpha01 enthält diese Commits.

API-Änderungen

  • Von paging-rxjava3 bereitgestellte Klassen sind jetzt unter dem Paket androidx.paging.rxjava3 verfügbar, sodass sie nicht mit paging-rxjava2 (Ifa7f6) in Konflikt stehen

Fehlerkorrekturen

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

Externer Beitrag

  • Dem rxjava3-Artefakt (Id1ce2, b/182497591) wurden verworfene PagedList-Compat APIs hinzugefügt.

Paging Compose Version 1.0.0

Version 1.0.0-alpha20

24. Mai 2023

androidx.paging:paging-compose:1.0.0-alpha20 wird freigegeben. Version 1.0.0-alpha20 enthält diese Commits.

Neue Funktionen

  • Mit der Funktion für die Seitenerstellung können Sie jetzt eine Vorschau einer Liste gefälschter Daten anzeigen lassen. Dazu erstellen Sie ein PagingData.from(fakeData) und setzen dieses PagingData in eine MutableStateFlow ein (z. B. MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Wenn Sie diese Daten als Eingabe in Ihre @Preview verwenden, erhalten Sie durch Aufrufe von collectAsLazyPagingItems() eine Vorschau von LazyPagingItems. (I8a78d, b/194544557)

Fehlerkorrekturen

  • Im Cache gespeicherte Daten von pager.flow.cachedIn, die in LazyPagingItems erfasst wurden, stehen jetzt nach der Statuswiederherstellung sofort zur Verfügung, ohne dass eine asynchrone Erfassung erforderlich ist. Das bedeutet, dass die im Cache gespeicherten Daten sofort nach der Wiederherstellung des Status angezeigt werden können. (I97a60, b/177245496)

Version 1.0.0-alpha19

3. Mai 2023

androidx.paging:paging-compose:1.0.0-alpha19 wird freigegeben. Version 1.0.0-alpha19 enthält diese Commits.

Unterstützung aller Lazy Layouts

Bisher wurden beim Erstellen von Seiten für LazyListScope benutzerdefinierte items- und itemsIndexed-Erweiterungen bereitgestellt. Das bedeutete, dass du diese Funktion nicht mit anderen Lazy-Layouts wie LazyVerticalGrid, HorizontalPager oder anderen benutzerdefinierten Lazy-Komponenten aus den Wear- und TV-Bibliotheken verwenden konnte. Die Behebung dieser Inflexibilität ist das wichtigste Update für diese Version.

Um mehr Lazy Layouts zu unterstützen, mussten wir APIs auf einer anderen Ebene entwickeln. Statt für jedes Lazy Layout eine benutzerdefinierte items API bereitzustellen, bietet die Funktion „Seite verfassen“ jetzt etwas niedrigere Ebene für Erweiterungsmethoden auf LazyPagingItems in itemKey und itemContentType. Diese APIs helfen Ihnen bei der Implementierung der key- und contentType-Parameter in den standardmäßigen items-APIs, die bereits für LazyColumn und LazyVerticalGrid sowie deren Entsprechungen in APIs wie HorizontalPager vorhanden sind. (Ifa13b, Ib04f0, b/259385813)

Das bedeutet, dass die Unterstützung von LazyVerticalGrid so aussehen würde:

// This part is unchanged
val lazyPagingItems = pager.collectAsLazyPagingItems()

LazyVerticalGrid(columns = GridCells.Fixed(2)) {
  // Here we use the standard items API
  items(
    count = lazyPagingItems.itemCount,
    // Here we use the new itemKey extension on LazyPagingItems to
    // handle placeholders automatically, ensuring you only need to provide
    // keys for real items
    key = lazyPagingItems.itemKey { it.uniqueId },
    // Similarly, itemContentType lets you set a custom content type for each item
    contentType = lazyPagingItems.itemContentType { "contentType" }
  ) { index ->
    // As the standard items call provides only the index, we get the item
    // directly from our lazyPagingItems
    val item = lazyPagingItems[index]
    PagingItem(item = item)
  }
}

Weitere Beispiele zur Verwendung der neuen APIs finden Sie in unseren Beispielen.

Durch diese Änderungen werden die LazyColumn- und LazyRow-Beispiele zwar um einige Zeilen länger, aber wir waren der Meinung, dass die Einheitlichkeit in allen faulen Layouts ein wichtiger Faktor für diejenigen ist, die die Funktion zum Erstellen von Seiten in Zukunft verwenden. Aus diesem Grund wurden die vorhandenen Erweiterungen von LazyListScope eingestellt. (I0c459, I92c8f, b/276989796)

API-Änderungen

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

Aktualisierungen von Abhängigkeiten

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

Version 1.0.0-alpha18

8. Februar 2023

androidx.paging:paging-compose:1.0.0-alpha18 wird ohne Änderungen veröffentlicht. Version 1.0.0-alpha18 enthält diese Commits.

Version 1.0.0-alpha17

24. Oktober 2022

androidx.paging:paging-compose:1.0.0-alpha17 wird freigegeben. Version 1.0.0-alpha17 enthält diese Commits.

Neue Funktionen

  • Unterstützung für einen benutzerdefinierten CoroutineContext beim Aufrufen 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 wird freigegeben. Version 1.0.0-alpha16 enthält diese Commits.

Neue Funktionen

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

Fehlerkorrekturen

  • Der fehlende PagingDataDiffer-Konstruktorfehler 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 freigegeben. 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

  • Bei LazyPagingItems wird die anfängliche loadState jetzt auf LoadState.Loading aktualisiert. (I55043, b/224855902)

Version 1.0.0-alpha14

13. Oktober 2021

androidx.paging:paging-compose:1.0.0-alpha14 wird freigegeben. Version 1.0.0-alpha14 enthält diese Commits.

Version 1.0.0-alpha13

29. September 2021

androidx.paging:paging-compose:1.0.0-alpha13 wird freigegeben. Version 1.0.0-alpha13 enthält diese Commits.

API-Änderungen

  • Die Funktion LazyPagingItems.snapshot() wurde durch das Attribut LazyPagingItems.itemSnapshotList (Ie2da8) ersetzt
  • Eingestelltes LazyPagingItems.getAsState() wurde entfernt (Ie65e4)

Version 1.0.0-alpha12

21. Juli 2021

androidx.paging:paging-compose:1.0.0-alpha12 wird freigegeben. Version 1.0.0-alpha12 enthält diese Commits.

API-Änderungen

  • items(lazyPagingItems) 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 wird freigegeben. Version 1.0.0-alpha11 enthält diese Commits.

Version 1.0.0-alpha10

2. Juni 2021

androidx.paging:paging-compose:1.0.0-alpha10 wird freigegeben. Version 1.0.0-alpha10 enthält diese Commits.

Version 1.0.0-alpha09

18. Mai 2021

androidx.paging:paging-compose:1.0.0-alpha09 wird freigegeben. Version 1.0.0-alpha09 enthält diese Commits.

Fehlerkorrekturen

  • „itemCount“ und „item getter“ von LazyPagingItems sind jetzt beobachtbar, was die Verwendung mit LazyVerticalGrid ermöglicht (Ie2446, b/171872064, b/168285687).

Kompatibilität der Funktion „Compose“

  • androidx.paging:paging-compose:1.0.0-alpha09 ist nur mit dem Tool „Compose“ ab Version 1.0.0-beta07 kompatibel.

Version 1.0.0-alpha08

24. Februar 2021

androidx.paging:paging-compose:1.0.0-alpha08 wird freigegeben. Version 1.0.0-alpha08 enthält diese Commits.

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

Version 1.0.0-alpha07

10. Februar 2021

androidx.paging:paging-compose:1.0.0-alpha07 wird freigegeben. Version 1.0.0-alpha07 enthält diese Commits.

Für die Einbindung in Compose alpha12 aktualisiert.

Version 1.0.0-alpha06

28. Januar 2021

androidx.paging:paging-compose:1.0.0-alpha06 wird freigegeben. Version 1.0.0-alpha06 enthält diese Commits.

Fehlerkorrekturen

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

Version 1.0.0-alpha05

13. Januar 2021

androidx.paging:paging-compose:1.0.0-alpha05 wird freigegeben. Version 1.0.0-alpha05 enthält diese Commits.

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

Version 1.0.0-alpha04

16. Dezember 2020

androidx.paging:paging-compose:1.0.0-alpha04 wird freigegeben. Version 1.0.0-alpha04 enthält diese Commits.

Fehlerkorrekturen

  • Die Convenience-Attribute CombinedLoadStates.refresh, CombinedLoadStates.prepend und CombinedLoadStates.append wurden aktualisiert, sodass sie nur von Loading auf NotLoading übergehen, nachdem sowohl der Vermittler- als auch der Quellladestatus NotLoading lautet, damit das Remote-Update angewendet wurde. (I65619)

Version 1.0.0-alpha03

2. Dezember 2020

androidx.paging:paging-compose:1.0.0-alpha03 wird freigegeben. Version 1.0.0-alpha03 enthält diese Commits.

  • Aktualisiert für Compose 1.0.0-alpha08.

Version 1.0.0-alpha02

11. November 2020

androidx.paging:paging-compose:1.0.0-alpha02 wird freigegeben. Version 1.0.0-alpha02 enthält diese Commits.

API-Änderungen

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

Version 1.0.0-alpha01

28. Oktober 2020

androidx.paging:paging-compose:1.0.0-alpha01 wird freigegeben. Version 1.0.0-alpha01 enthält diese Commits.

Neue Funktionen

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

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

Version 3.0.1

Version 3.0.1

21. Juli 2021

androidx.paging:paging-*:3.0.1 wird freigegeben. Version 3.0.1 enthält diese Commits.

Fehlerkorrekturen

  • Wenn Sie über den von LivePagedList oder RxPagedList generierten Anfangswert auf PagedList.dataSource zugreifen, wird nicht mehr fälschlicherweise eine IllegalStateException (I96707) ausgelöst.

Version 3.0.0

Version 3.0.0

5. Mai 2021

androidx.paging:paging-*:3.0.0 wird freigegeben. Version 3.0.0 enthält diese Commits.

Hauptfunktionen von Version 3.0.0

Der Großteil der vorhandenen API aus Paging 2.x.x wurde eingestellt und durch die neuen Paging 3 APIs ersetzt, sodass die folgenden Verbesserungen berücksichtigt werden:

  • Erstklassiger Support für Kotlin-Koroutinen und -Ablauf
  • Unterstützung bei Kündigung
  • Integrierter Ladestatus und Fehlersignale
  • Funktion zum Wiederholen und Aktualisieren
  • Alle drei DataSource-Unterklassen wurden zu einer einheitlichen PagingSource-Klasse zusammengefasst.
  • Benutzerdefinierte Seitentransformationen, einschließlich einer integrierten zum Hinzufügen von Trennzeichen
  • Kopf- und Fußzeilen für Status werden geladen

Version 3.0.0-rc01

21. April 2021

androidx.paging:paging-*:3.0.0-rc01 wird freigegeben. Version 3.0.0-rc01 enthält diese Commits.

Fehlerkorrekturen

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

Version 3.0.0-beta03

24. März 2021

androidx.paging:paging-*:3.0.0-beta03 wird freigegeben. Version 3.0.0-beta03 enthält diese Commits.

Fehlerkorrekturen

  • Wir haben die Verarbeitung von Platzhaltern beim Neuladen von Listen überarbeitet, um unerwartete Sprünge in RecyclerView zu vermeiden. Weitere Informationen finden Sie unter NullPaddingDiffing.md. (If1490, b/170027529, b/177338149)
  • Die verschiedenen PagedList-Builder (alter Kompatibilitätspfad) rufen DataSource.Factory.create() im Hauptthread nicht mehr fälschlicherweise synchron auf, wenn .build() aufgerufen wird. (b/182798948)

Version 3.0.0-beta02

10. März 2021

androidx.paging:paging-*:3.0.0-beta02 wird freigegeben. Version 3.0.0-beta02 enthält diese Commits.

API-Änderungen

  • Rx3-Erweiterungen werden jetzt korrekt weitergegeben. @ExperimentalCoroutinesApi Aktivierungsanforderung. Zuvor wurden sie mit der Methode @get gekennzeichnet, die vom Kotlin-Compiler ignoriert wird. Gründe dafür: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)

Fehlerkorrekturen

  • Einschränkungen für die öffentliche Nutzung experimenteller APIs erzwingen (I6aa29, b/174531520)
  • Es wurde ein Fehler behoben, der dazu führte, dass PagingState immer null war, wenn Remote-Aktualisierung aufgerufen wurde.
  • Ein Fehler wurde behoben, bei dem leere Seiten, die von PagingSource zurückgegeben wurden, verhindern konnten, dass Paging erneut abgerufen wurde, um prefetchDistance zu erfüllen, wodurch das Paging hängen geblieben ist.

Version 3.0.0-beta01

10. Februar 2021

androidx.paging:paging-*:3.0.0-beta01 wird freigegeben. Version 3.0.0-beta01 enthält diese Commits.

API-Änderungen

  • Die Rx2- und Rx3-Wrapper stellen jetzt die experimentelle Annotation bereit, von der sie abhängt. Wenn Sie die Rx-Compat-Wrapper in paging-rxjava2 oder Paging-rxjava3 verwenden, müssen Sie die Verwendungen jetzt mit @OptIn(ExperimentalCoroutinesApi::class) (Ib1f9d) annotieren.

Fehlerkorrekturen

  • Es wurde behoben, dass IndexOutOfBoundsException: Inconsistency detected manchmal ausgegeben wurde, wenn DataSource-APIs der Version 2 über Kompatibilitätspfade verwendet wurden.
  • Der isInvalid-Aufruf während der Initialisierung von DataSource wird bei Verwendung über Kompatibilitätspfade jetzt korrekt bei "fetchDispatcher" und nicht im Hauptthread gestartet. Dadurch wird ein IllegalStateException aufgrund des Datenbankzugriffs auf den Hauptthread behoben, wenn die PagingSource-Implementierung von Room verwendet wird.

Version 3.0.0-alpha13

27. Januar 2021

androidx.paging:paging-*:3.0.0-alpha13 wird freigegeben. Version 3.0.0-alpha13 enthält diese Commits.

API-Änderungen

  • Die Implementierung von PagingSource.getRefreshKey ist nicht mehr optional. Es handelt sich jetzt um eine abstrakte Funktion ohne Standardimplementierung. Migrierende Nutzer können entweder weiterhin die Standardimplementierung zurückgeben, die einfach null zurückgibt. getRefreshKey() sollte jedoch eine echte Implementierung haben, die einen Schlüssel basierend auf der aktuellen Scrollposition des Nutzers zurückgibt. So kann das Paging nach Möglichkeit weiter in der Mitte des Darstellungsbereichs über PagingState.anchorPosition geladen werden. (I4339a)
  • InvalidatingPagingSourceFactory ist jetzt ein Abschlusskurs (Ia3b0a)
  • Konfiguration des Terminaltrennzeichens (Kopf-/Fußzeile) mit einem zusätzlichen optionalen Parameter „SeparatorType“ zulassen. Dafür gibt es zwei Optionen:
    • FULLY_COMPLETE – Vorhandenes Verhalten. Warten Sie, bis sowohl PagingSource als auch RemoteMediator endOfPaginationReached markiert hat, bevor Sie Terminaltrennzeichen hinzufügen. Wenn RemoteMediator nicht verwendet wird, wird RemoteloadState ignoriert. Dies ist vor allem nützlich, wenn Sie Trennzeichen für Abschnitte nur dann anzeigen möchten, wenn der Abschnitt vollständig geladen ist, einschließlich des Abrufs aus einer Remote-Quelle, z.B. dem Netzwerk.
    • SOURCE_COMPLETE: Es wird nur gewartet, bis PagingSource endOfPaginationReached markiert, auch wenn RemoteMediator verwendet wird. Dadurch können Kopf- und Fußzeilen synchron mit dem anfänglichen Ladevorgang angezeigt werden, sodass Nutzer nicht scrollen müssen, um Terminaltrennzeichen zu sehen. (Ibe993, b/174700218)

Fehlerkorrekturen

  • Ein seltenes Speicherleck wurde behoben, das auftrat, wenn eine PagingSource entwertet wurde, bevor PageFetcher überhaupt mit dem Laden beginnen konnte. (I9606b, b/174625633)

Version 3.0.0-alpha12

13. Januar 2021

androidx.paging:paging-*:3.0.0-alpha12 wird freigegeben. Version 3.0.0-alpha12 enthält diese Commits.

API-Änderungen

  • InvalidatingPagingSourceFactory ist keine abstrakte Klasse mehr, da sie nie abstrakte Methoden hatte. (I4a8c4)
  • Eine Überlastung von „.cachedIn()“ wurde hinzugefügt, die ViewModel anstelle von Lifecycle oder CoroutineScope für Java-Nutzer akzeptiert. (I97d81, b/175332619)
  • Erlauben Sie Java-Aufrufern, PagingData-Transformationsvorgänge auf asynchrone Weise zu verwenden, indem sie einen Executor in Transformationsoperatorargumente akzeptieren. Bei allen „-Sync“-Transformationsoperatoren wurde das „-Sync“-Suffix entfernt. Nutzer von Kotlin-Coroutinen müssen die Erweiterung durch Aufrufen der Erweiterungsfunktion eindeutig machen, die stattdessen einen Sperren-Block akzeptiert. Alle PagingData-Transformationsoperatoren wurden in Erweiterungen unter der statischen PagingDataTransforms-Klasse verschoben. Java-Nutzer müssen sie über statische Hilfsprogramme aufrufen, PagingDataTransforms.map(pagingData, transform) Für Kotlin-Nutzer ist die Syntax dieselbe, aber Sie müssen die Funktion importieren. (If6885, b/172895919)

Fehlerkorrekturen

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

Version 3.0.0-alpha11

16. Dezember 2020

androidx.paging:paging-*:3.0.0-alpha11 wird freigegeben. Version 3.0.0-alpha11 enthält diese Commits.

Neue Funktionen

  • Die Unterstützung für den gespeicherten Status wurde für die folgenden grundlegenden Anwendungsfälle hinzugefügt (die vollständige Unterstützung, insbesondere beim mehrschichtigen Quellfall ist noch in Arbeit):
    • Ablauf wird im Cache gespeichert und die Anwendung wird nicht beendet (z.B. wird der Ablauf in einem Ansichtsmodell im Cache gespeichert und die Aktivität wird während des Vorgangs neu erstellt)
    • wird gezählt, Platzhalter sind aktiviert und das Layout ist nicht versetzt.

API-Änderungen

  • PagingSource.getRefreshKey() ist jetzt die stabile API (I22f6f, b/173530980)
  • PagingSource.invalidate ist keine offene Funktion mehr. Wenn Sie benachrichtigt werden müssen, wenn die Entwertung erfolgt, sollten Sie die Methode „register InvalidatedCallback“ aufrufen, anstatt „Entwertung“ zu überschreiben. (I628d9, b/173029013, b/137971356)
  • Pager hat jetzt neben den regulären Konstruktoren einen einzelnen experimentellen Konstruktor, anstatt experimentelle APIs über die Opt-in-Annotation an eine nicht experimentelle öffentliche API weiterzugeben. (I9dc61, b/174531520)
  • Die Convenience-Attribute CombinedLoadStates.refresh, CombinedLoadStates.prepend und CombinedLoadStates.append wurden aktualisiert, sodass sie nur von Loading auf NotLoading übergehen, nachdem sowohl der Vermittler- als auch der Quellladestatus NotLoading lautet, damit das Remote-Update angewendet wurde. (I65619)
  • LoadParams.pageSize wurde entfernt (bereits eingestellt). Es wird empfohlen, LoadParams.loadSize in Ihrer PagingSource zu verwenden.

    LoadParams.loadSize ist immer gleich PagingConfig.pageSize, mit Ausnahme des anfänglichen Ladeaufrufs, bei dem er dem PagingConfig.initialLoadSize entspricht.

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

Fehlerkorrekturen

  • Ein Absturz aufgrund von IllegalStateException bei der Verwendung von Trennzeichen mit Einstellung von PagingConfig.maxSize wurde behoben. (I0ed33, b/174787528)
  • Es wurde ein Fehler behoben, bei dem der Ladestatus für PREPEND / APPEND nicht sofort nach dem anfänglichen Laden auf NotLoading(endOfPaginationReached = true) aktualisiert wurde, wenn RemoteMediator festgelegt war (I8cf5a).
  • Es wurde ein Fehler behoben, bei dem APIs auf Vortragsseite, wie z. B. .snapshot(), .peek() usw., die vorherige (veraltete) Liste in ListUpdateCallback-Updates zurückgeben.
  • Es wurde ein Fehler behoben, bei dem Trennzeichenoperatoren keine Kopf- oder Fußzeilen hinzufügten, wenn sie mit RemoteMediator verwendet wurden
  • Es wurde ein Fehler behoben, bei dem LoadState-Updates zu NotLoading für RemoteMediator im Ladestatus hängen geblieben sind.
  • Es wurde ein Fehler behoben, bei dem die Paging2.0-Kompatibilitäts-API, .asPagingSourceFactory(), dazu führen konnte, dass die unterstützende DataSource mit dem falschen CoroutineDispatcher initialisiert wurde. Dadurch werden ein Absturz und mögliche ANR-Fälle behoben, insbesondere wenn die aktuelle Room-Implementierung von PagingSource diesen Kompatibilitätspfad verwendet.

Version 3.0.0-alpha10

2. Dezember 2020

androidx.paging:paging-*:3.0.0-alpha10 wird freigegeben. Version 3.0.0-alpha10 enthält diese Commits.

API-Änderungen

  • Die verworfenen APIs dataRefreshFlow und dataRefreshListener wurden entfernt, da sie durch LoadStateFlow-/Listener-Updates redundant sind. Für Migrationen lautet die Entsprechung „loadStateFlow“:

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

    (Ib5570, b/173530908)

Fehlerkorrekturen

  • endOfPaginationReached für RemoteMediator REFRESH wird jetzt korrekt an LoadState-Updates weitergegeben und verhindert, dass Remote-APPEND und PREPEND ausgelöst werden. (I94a3f, b/155290248)
  • Wenn eine leere Liste angezeigt wird, entweder aufgrund einer leeren ersten Seite oder wegen intensiver Filterung, verhindert das nicht mehr, dass das Paging PREPEND- oder APPEND-Ladevorgänge startet. (I3e702, b/168169730)
  • Ein Problem wurde behoben, bei dem getRefreshKey nicht für nachfolgende Generationen von PagingSource aufgerufen wurde, wenn Entwertungen schnell auftreten. (I45460, b/170027530)

Externer Beitrag

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

Bekannte Probleme

  • Kopf- und Fußzeilen der .insertSeparators()-Transformation werden möglicherweise nicht sofort angezeigt, wenn RemoteMediator b/172254056 verwendet wird.
  • Die Verwendung von RemoteMediator kann dazu führen, dass Remote-LoadState hängen bleibt, wenn die Entwertung abgeschlossen wird 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 wird freigegeben. Version 3.0.0-alpha09 enthält diese Commits.

API-Änderungen

  • Die Methoden "dataRefreshFlow" und "Listener" werden mit einer "replaceWith"-Klausel vollständig verworfen. (I6e2dd)

Fehlerkorrekturen

  • Ein Fehler wurde behoben, bei dem IllegalArgumentException ausgegeben wurde, wenn Trennzeichen mit RemoteMediator verwendet wurden und eine Entwertung ausgelöst wurde, während ein Remote-Ladevorgang ausgelöst wurde, der „endOfPagination“ zurückgeben würde (I3a260).

Version 3.0.0-alpha08

28. Oktober 2020

androidx.paging:paging-*:3.0.0-alpha08 wird freigegeben. Version 3.0.0-alpha08 enthält diese Commits.

API-Änderungen

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

Fehlerkorrekturen

  • Die Interaktion von Paging mit ViewPager wurde erheblich verbessert. Insbesondere wird durch das Paging ein RemoteMediator#load-Aufruf nicht mehr aufgrund einer Seitenentwertung abgebrochen. Außerdem wird keine Anfrage zum Anfügen/Voranstellen des Ladevorgangs mehr gestellt, wenn REFRESH erforderlich ist, bis die REFRESH-Anfrage erfolgreich abgeschlossen wurde. (I6390b, b/162252536)
  • Die API-Lint-Prüfung für MissingGetterMatchingBuilder ist für Androidx aktiviert (I4bbea, b/138602561).
  • Es wurde ein Fehler behoben, bei dem .withLoadState* ConcatAdapter-Hilfsprogramme aufgrund einer Benachrichtigung von RecyclerView über den Hintergrundthread abgestürzt sind (I18bb5, b/170988309).
  • Es wurde ein Fehler behoben, bei dem das Laden einer sehr kleinen, nicht leeren Seite manchmal verhinderte, dass der Prefetch-Ladevorgang korrekt ausgelöst wurde.Iffda3 b/169259468

Version 3.0.0-alpha07

1. Oktober 2020

androidx.paging:paging-*:3.0.0-alpha07 wird freigegeben. Version 3.0.0-alpha07 enthält diese Commits.

API-Änderungen

  • Async PagingData Guava-basierte Operatoren akzeptieren jetzt einen Executor als Parameter zur Steuerung des Ausführungskontexts. (Id4372)

Fehlerkorrekturen

  • Die IndexOutOfBounds-Ausnahme wurde behoben, die aufgrund einer Race-Bedingung in RemoteMediator ausgelöst wurde. (I00b7f, b/165821814)
  • Es wurde eine Race-Bedingung bei der Konvertierung von DataSource -> PagingSource behoben, die dazu führen konnte, dass die resultierende PagingSource Ungültigkeitssignale aus DataSource ignorierte.
  • Es wurde ein Problem in der Seitenabruflogik behoben, bei dem neue PagingSource-Generationen erst dann erfasst wurden, wenn PagingDataAdapter.refresh() aufgerufen wurde.
  • Ein Problem wurde behoben, durch das die Scrollposition manchmal verloren ging, wenn eine Datenquelle in Verbindung mit RemoteMediator in eine PagingSource (z. B. die von Room erzeugte Datenquelle) konvertiert wurde.

Externer Beitrag

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

Version 3.0.0-alpha06

2. September 2020

androidx.paging:paging-*:3.0.0-alpha06 wird freigegeben. Version 3.0.0-alpha06 enthält diese Commits.

API-Änderungen

  • UnsupportedOperationException mit klarerer Benachrichtigung über fehlende Unterstützung stabiler IDs wird jetzt bei jedem PagingDataAdapter.setHasStableIds-Aufruf ausgegeben. (Ib3890, b/158801427)

Fehlerkorrekturen

  • insertSeparators filtert leere Seiten nicht mehr heraus, sodass der Prefetch-Abstand vom Vortragenden auch dann berücksichtigt werden kann, wenn viele leere Seiten eingefügt werden. (I9cff6, b/162538908)

Version 3.0.0-alpha05

19. August 2020

androidx.paging:paging-*:3.0.0-alpha05 wird freigegeben. Version 3.0.0-alpha05 enthält diese Commits.

Fehlerkorrekturen

  • Beim Paging werden Seiten jetzt korrekt vorab abgerufen, selbst wenn die dargestellten Daten stark gefiltert sind.
  • Die Rückgabe von LoadResult.Error bei einem wiederholten Ladevorgang führt nicht mehr dazu, dass der Elementzugriff fälschlicherweise einen erneuten Versuch ausgelöst hat

Externer Beitrag

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

Version 3.0.0-alpha04

5. August 2020

androidx.paging:paging-*:3.0.0-alpha04 wird freigegeben. Version 3.0.0-alpha04 enthält diese Commits.

API-Änderungen

  • AsyncPagingDataDiffer und PagingDataAdapter wurde die peek() API hinzugefügt, um den Zugriff auf präsentierte Daten ohne Triggerseitenaufbau zu ermöglichen. (I38898, b/159104197)
  • PagingDataAdapter und AsyncPagingDataDiffer wurde eine snapshot() API hinzugefügt, mit der die präsentierten Elemente abgerufen werden können, ohne dass ein Seitenabruf ausgelöst wird. (I566b6, b/159104197)
  • Ein PagingData.from(List<T>)-Konstruktor wurde hinzugefügt, um die Darstellung statischer Listen zu ermöglichen. Diese können mit dem gesamten PagingData-Ablauf kombiniert werden, um statische Listen in bestimmten Status anzuzeigen, z. B. vor Abschluss des ersten REFRESH-Vorgangs oder einfach zum Testen von Transformationen. (Id134d)
  • „dataRefresh Flow“-/Listener-APIs werden eingestellt, da sie den Status der präsentierten Elemente bei REFRESH darstellen sollen. Dank der Verbesserungen bei „loadState Flow“-/„Listener-Callback-Zeit“ und der „itemCount“-Eigenschaft ist sie jedoch redundant (Ia19f3).
  • RxJava3-Kompatibilitäts-Wrapper für PagingSource und RemoteMediator hinzugefügt (I49ef3, b/161480176)

Fehlerkorrekturen

  • PositionalDataSource, die über den toPagingSourceFactory-Hilfsprogramm in PagingSource konvertiert wurden, einschließlich PagingSource, die von Room generiert wurden, markiert sich jetzt korrekt, um das Springen zu unterstützen. (I3e84c, b/162161201)
  • Es wurde ein Fehler behoben, bei dem die synchrone Variante von „submitData“ manchmal zu einem Rennen führte, das einen ClosedSendChannelException verursachte (I4d702, b/160192222).

Externer Beitrag

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

Version 3.0.0-alpha03

22. Juli 2020

androidx.paging:paging-*:3.0.0-alpha03 wird freigegeben. Version 3.0.0-alpha03 enthält diese Commits.

API-Änderungen

  • Der Konstruktor für PagingState ist jetzt öffentlich, was das Testen von Implementierungen von getRefreshKey() vereinfachen sollte (I8bf15).
  • kotlin-Kartenfunktionsvarianten von DataSource aus Java wurden ausgeblendet, um Ambiguität zwischen Original- und Kotlin-Varianten zu beseitigen. (If7b23, b/161150011)
  • Redundante APIs, die für Kotlin-Nutzer gedacht sind, wurden mit @JvmSynthetic (I56ae5) gekennzeichnet.
  • Überlastungen für den Konstruktor „LoadResult.Page“, der für „itemsBefore“ und „itemAfter“ den Wert COUNT_UNDEFINED (I47849) festlegt, wurden hinzugefügt.
  • Mit den bestehenden PagingData-Operatoren können Sperrmethoden jetzt akzeptiert werden. Außerdem wurden für Java-Nutzer neue nicht aufhängende Operatoren vom Typ „mapSync“, „FlatMapSync“ und „filterSync“ eingeführt. Die vorhandenen Transformationsmethoden wurden in Erweiterungsfunktionen verschoben, sodass Kotlin-Nutzer sie jetzt importieren müssen. (I34239, b/159983232)

Fehlerkorrekturen

  • In den PagingSources „Room“ und „PositionalDataSource“ wird jetzt auf der ersten Seite ein vorangestelltes Trennzeichen angezeigt, sodass der Nutzer nicht scrollen muss, um es einzublenden. (I6f747, b/160257628)
  • Elementzugriffe auf Platzhalter lösen jetzt das Laden von PagingSource korrekt aus, bis eine Seite zurückgegeben wird, die den angeforderten Index erfüllt, nachdem sie durch PagingData.filter() transformiert wurde (I95625, b/158763195).
  • Es wurde ein Fehler behoben, bei dem beim Scrollen nach „PagingSource“ ein Fehler zurückgegeben wurde, wodurch die Wiederholung von PagingDataAdapter.retry() verhindert wurde. (I1084f, b/160194384)
  • Es wurde ein Problem behoben, bei dem beim Zugriff auf Elemente nach dem Löschen einer Seite Seiten möglicherweise nicht geladen werden, obwohl der Elementzugriff innerhalb von „prefetchDistance“ erfolgte (Ie95ae, b/160038730)
  • Durch das Festlegen von PagingConfig.maxSize werden Platzhalter nach einem Drop-Ereignis nicht mehr aktiviert (I2be29, b/159667766).

Version 3.0.0-alpha02

24. Juni 2020

androidx.paging:paging-*:3.0.0-alpha02 wird freigegeben. Version 3.0.0-alpha02 enthält diese Commits.

API-Änderungen

  • Für den Konstruktor von PagingConfig wurden Überlastungen mit allgemeinen Standardwerten hinzugefügt (I39c50, b/158576040).
  • Zusätzliche Überlastungen für Konstruktoren von PagingDataAdapter und AsyncPagingDataDiffer mit allgemeinen Standardwerten (Ie91f5)
  • Die Adapter-APIs dataRefreshFlow und dataRefreshListener übergeben jetzt einen booleschen Wert, um zu signalisieren, ob ein PagingData leer ist (I6e37e, b/159054196).
  • RxJava und Guava APIs für RemoteMediator wurden hinzugefügt – RxRemoteMediator und ListenableFutureRemoteMediator
  • PagingState wurden Hilfsprogramme für den allgemeinen Zugriff auf Elemente wie isEmpty() und firstItemOrNull() hinzugefügt (I3b5b6, b/158892717).

Fehlerkorrekturen

  • Pager prüft jetzt auf die Wiederverwendung von PagingSource in der Fabrik, um eine versehentliche Wiederverwendung von ungültigen PagingSources zu verhindern, die zu einem unklaren Fehler geführt hat (I99809, b/158486430).
  • Fehler von RemoteMediator REFRESH verhindern nicht mehr das Laden von PagingSource (I38b1b, b/158892717).
  • Die nicht gesperrte Version von submitData verursacht keinen Absturz mehr aufgrund der gleichzeitigen Erfassung auf mehreren PagingData, wenn sie nach der anhaltenden Version von submitData aufgerufen wird. (I26358, b/158048877)
  • Behebung der Ausnahme „Nicht zweimal vom Pager nicht möglich“, die nach einer Konfigurationsänderung auftreten konnte (I58bcc, b/158784811)

Version 3.0.0-alpha01

10. Juni 2020

androidx.paging:paging-*:3.0.0-alpha01 wird freigegeben. Version 3.0.0-alpha01 enthält diese Commits.

Die Paging Library wurde auf Version 3.0 aktualisiert, um verschiedene wichtige neue Funktionen zu ermöglichen.

Neue Funktionen in Version 3.0

Bekannte Probleme

  • Paging 3 Javadocs ist noch nicht verfügbar. Verwenden Sie in der Zwischenzeit die oben verlinkten Leitfäden oder die Kotlin-Dokumentation. (b/158614050)

Version 2.1.2

Version 2.1.2

18. März 2020

androidx.paging:paging:2.1.2 wird freigegeben. Version 2.1.2 enthält diese Commits gegenüber Version 2.1.0.

Fehlerkorrekturen

  • In seltenen Fällen beim Konvertieren einer Position während der Entwertung wurde ein Fehler für IndexOutOfBoundsException behoben.

Release-Problem

  • Die Auslagerungsversion 2.1.1 wurde in einem falsch konfigurierten Zweig fälschlicherweise freigegeben, wodurch teilweise implementierte APIs und Funktionen verfügbar gemacht werden, die in einem zukünftigen Release geplant sind.

  • Die Paginierung 2.1.2 enthält die fokussierte Korrektur, die ursprünglich in 2.1.1 veröffentlicht wurde, aber dieses Mal korrekt über dem Release 2.1.0 ausgewählt wurde. Es wird dringend empfohlen, ein Upgrade auf diese Version durchzuführen, wenn Sie derzeit Version 2.1.1 verwenden.

Version 2.1.1

Version 2.1.1

18. Dezember 2019

androidx.paging:paging-*:2.1.1 wird freigegeben. Version 2.1.1 enthält diese Commits.

Fehlerkorrekturen

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

Version 2.1.0

Version 2.1.0

25. Januar 2019

Die Paginierung 2.1.0 wird ohne Änderungen gegenüber 2.1.0-rc01 freigegeben.

Version 2.1.0-rc01

6. Dezember 2018

Die Paginierung 2.1.0-rc01 wird ohne Änderungen gegenüber 2.1.0-beta01 freigegeben.

Version 2.1.0-beta01

1. November 2018

Die Paginierung 2.1.0-beta01 wird ohne Änderungen gegenüber 2.1.0-alpha01 freigegeben.

Version 2.1.0-alpha01

12. Oktober 2018

Die Paginierung „2.1.0-alpha01“ wurde im Wesentlichen in zweierlei Hinsicht ergänzt – das Entfernen von Seiten und KTX-Erweiterungsbibliotheken für jedes Artefakt – sowie mehrere weitere API-Änderungen und Fehlerkorrekturen.

API-Änderungen

  • PagedList.Config.Builder.setMaxSize() zur Begrenzung der Anzahl der im Speicher geladenen Elemente wurde hinzugefügt.
  • androidx.paging.Config() wurde als Kotlin-Alternative fü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() wurden als Kotlin-Alternativen für RxPagedListBuilder hinzugefügt.
  • AsyncPagedListDiffer.addPagedListListener() zum Anhören hinzugefügt, wenn PagedList ausgetauscht wird. b/111698609
  • PagedListAdapter.onCurrentListChanged() Variante wurde hinzugefügt, die die alte und neue Liste übergibt. Die vorherige Variante wurde eingestellt.
  • Es wurden PagedListAdapter/AsyncPagedListDiffer.submitList() Varianten hinzugefügt, die einen zusätzlichen Callback verwenden, der ausgelöst wird, wenn die Auslagerungsliste nach dem Unterschied angezeigt wird. So können Sie einen PagedList-Austausch mit anderen UI-Updates synchronisieren. b/73781068
  • PagedList.getLoadedCount() wurde hinzugefügt, um Sie darüber zu informieren, wie viele Elemente sich im Arbeitsspeicher befinden. Beachten Sie, dass der Rückgabewert immer .size() ist, wenn Platzhalter deaktiviert sind.

Fehlerkorrekturen

  • Eine Race-Bedingung bei der Wiederverwendung von Listen wurde behoben b/111591017
  • PagedList.loadAround() gibt jetzt IndexOutOfBoundsException aus, wenn der Index ungültig ist. Zuvor konnte es mit einer unklaren anderen Ausnahme abstürzen.
  • Ein Fall wurde behoben, bei dem eine extrem kleine anfängliche Ladegröße zusammen mit unveränderten Daten dazu führte, dass b/113122599 nicht mehr geladen wurde.

Version 2.0.0

Version 2.0.0

1. Oktober 2018

Die Paginierung 2.0.0 wurde mit einem einzelnen Fehler behoben.

Fehlerkorrekturen

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

Version 2.0.0-beta01

2. Juli 2018

Fehlerkorrekturen

  • Problem behoben, bei dem Inhalte in einigen vorangehenden Fällen nicht mehr angezeigt wurden (Platzhalter deaktiviert, PositionalDataSource) b/80149146
  • (Bereits in 1.0.1 veröffentlicht) Behebung von Abstürzen, bei denen PagedListAdapter und AsyncPagedListDiffer Verschiebungsereignisse nicht signalisieren konnten. b/110711937

Abhängigkeiten vor AndroidX

Beziehen Sie für die folgenden Vorversionen von Paging die folgenden Abhängigkeiten ein:

dependencies {
    def paging_version = "1.0.0"

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

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

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

Version 1.0.1

Version 1.0.1

26. Juni 2018

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

Fehlerkorrekturen

  • Es wurden Abstürze behoben, bei denen PagedListAdapter und AsyncPagedListDiffer Verschiebungsereignisse nicht signalisieren konnten. b/110711937

RxJava2 Version 1.0.0

RxJava2 Version 1.0.0-rc1

16. Mai 2018

Das Paging in RxJava2 1.0.0-rc1 wird zum Releasekandidat ohne Änderungen im Vergleich zur ursprünglichen Alphaversion verschoben.

Version 1.0.0

Version 1.0.0-rc1

19. April 2018 Kandidaten für das Paging Release

Es gibt keine weiteren bekannten Probleme oder neuen Funktionen, die für den Paging-1.0.0-Release geplant sind. Aktualisiere deine Projekte auf 1.0.0-rc1 und hilf uns dabei, Tests durchzuführen, damit wir eine solide 1.0.0 liefern können.

In diesem Release wurden keine Änderungen vorgenommen. Er entspricht der 1.0.0-beta1.

Version 1.0.0-beta1

5. April 2018

Das Paging befindet sich für kurze Zeit in der Betaphase, bevor es zur Freigabe eines Kandidaten läuft. Wir planen keine weiteren API-Änderungen für Paging 1.0 und die Anforderungen an API-Änderungen sind sehr hoch.

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

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

Kotlin

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

Java

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

Neue Funktionen

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

API-Änderungen

  • API-Änderungen, um die Rolle von Executors in Buildern zu verdeutlichen:

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

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

  • Der Status von PagedList.mCallbacks Mitglied wurde als privat gekennzeichnet.

Fehlerkorrekturen

  • LivePagedListBuilder löst den ersten PagedList-Ladevorgang im angegebenen Executor anstelle des E/A-Thread-Pools von Arch-Komponenten aus.

  • Behebung des Verhaltens bei der Entwertung in internen DataSource-Wrappern (wird verwendet, um DataSource.map sowie das Laden von PositionalDataSource ohne Platzhalter zu implementieren) b/77237534

Version 1.0.0-alpha7

21. März 2018

Die Paginierung 1.0.0-alpha7 wird zusammen mit den Lebenszyklen 1.1.1 freigegeben. Da das Auslagerungs-Alpha7 von der Verschiebung der oben erwähnten Function-Klasse abhängt, müssen Sie die lifecycle:runtime-Abhängigkeit auf android.arch.lifecycle:runtime:1.1.1 aktualisieren.

Die Paginierung alpha7 ist voraussichtlich die letzte Veröffentlichung vor der Betaversion der Paginierung.

API-Änderungen

  • DataSource.LoadParams-Objekte haben jetzt einen öffentlichen Konstruktor und DataSource.LoadCallback-Objekte sind jetzt abstrakt. So können Sie einen DataSource umschließen oder ein DataSource direkt mit einem simulierten Callback testen. b/72600421
  • Mapper für DataSource und DataSource.Factory
    • Mit map(Function<IN,OUT>) können Sie Ergebnisse, die von einem DataSource geladen wurden, transformieren, zusammenfassen oder gestalten.
    • mapByPage(<List<IN>,List<OUT>>) ermöglicht dasselbe für die Batchverarbeitung (z.B. wenn aus SQL geladene Elemente zusätzlich eine separate Datenbank abfragen müssen, was als Batch ausgeführt werden kann).
  • PagedList#getDataSource() wird als praktische Methode hinzugefügt: b/72611341
  • Alle verworfenen Klassen wurden aus der API entfernt, einschließlich der Reste des recyclerview.extensions-Pakets und der LivePagedListProvider.
  • DataSource.Factory wird von einer Schnittstelle in eine abstrakte Klasse geändert, um Kartenfunktionen zu aktivieren.

Fehlerkorrekturen

  • Die Builder wurden in endgültig geändert. b/70848565
  • Die Implementierung von Room DataSource wurde korrigiert, sodass Abfragen mit mehreren Tabellen verarbeitet werden können. Diese Fehlerkorrektur ist in Room 1.1.0-beta1 enthalten (siehe oben).
  • Es wurde ein Fehler behoben, bei dem BoundaryCallback.onItemAtEndLoaded für PositionalDataSource nicht aufgerufen wurde, wenn Platzhalter aktiviert sind und die Gesamtgröße ein exaktes Vielfaches der Seitengröße ist.

Version 1.0.0-alpha5

22. Januar 2018

Fehlerkorrekturen

  • Probleme mit dem Laden von Seiten bei deaktivierten Platzhaltern beheben b/70573345
  • Zusätzliches Logging zum Aufspüren des Fehlers vom Typ „geschuldet“ b/70360195 (und spekulative raumseitige Korrektur)
  • Fehlerbehebungen für Javadoc-Beispielcode b/70411933, b/71467637