Paging

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

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

Artefakt Stabile Release Releasekandidat Beta-Release Alpha-Release
paging-* 3.5.3 - - -
paging-compose 3.5.3 - - -
Diese Bibliothek wurde zuletzt am 12. Oktober 2026 aktualisiert.

Abhängigkeiten deklarieren

Wenn Sie eine Abhängigkeit von Paging hinzufügen möchten, müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Google-Repository bei Maven.

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

Groovy

dependencies {
  def paging_version = "3.5.3"

  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.5.3"
}

Kotlin

dependencies {
  val paging_version = "3.5.3"

  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.5.3")
}

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

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

Feedback

Ihr Feedback hilft uns, Jetpack zu verbessern. Wenn Sie neue Probleme entdecken oder Ideen zur Verbesserung dieser Bibliothek haben, lassen Sie es uns wissen. Bevor Sie ein neues Problem erstellen, sollten Sie sich jedoch die bereits gemeldeten Probleme in dieser Bibliothek ansehen. Wenn Sie sich einer Problemmeldung anschließen möchten, klicken Sie auf den Button mit dem Stern.

Neues Problem melden

Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.

Version 3.5

Version 3.5.3

12. Oktober 2026

androidx.paging:paging-*:3.5.3 ist veröffentlicht. Version 3.5.3 enthält diese Commits.

Diverse Fehlerkorrekturen

  • ItemSnapshotListFlow löst nicht mehr IllegalArgumentException aus, wenn ein RemoteMediator das Ende der Paginierung in einer der beiden Richtungen erreicht hat und ein Header oder Footer in ein Terminal-Trennzeichen umgewandelt wird. (I821c7, b/566336825)
  • Wenn die Anzahl der geladenen Seiten PagingConfig.maxSize überschreitet, wird sie nicht auf unter zwei Seiten reduziert, damit der Darstellungsbereich richtig mit Daten gefüllt wird. (I037a0, b/565835910)

Externer Beitrag

Vielen Dank an Igor für die Einreichung der Fehlerkorrektur b/565835910

Version 3.5.2

7. Oktober 2026

androidx.paging:paging-*:3.5.2 ist veröffentlicht. Version 3.5.2 enthält diese Commits.

Diverse Fehlerkorrekturen

  • Bei Pager.append()-Aufrufen, die vor dem Abschluss der ersten Aktualisierung erfolgen, wird nicht mehr der Fehler NoSuchElementException ausgegeben. Der Aufruf zum Anhängen wird nicht ausgeführt. (Ide387, b/556780796)

Version 3.5.1

12. August 2026

androidx.paging:paging-*:3.5.1 ist veröffentlicht. Version 3.5.1 enthält diese Commits.

Diverse Fehlerkorrekturen

  • Es wurde ein Fehler behoben, durch den PagingSource.getRefreshKey einen falschen anchorPosition-Wert bereitgestellt hat, der zu groß war, wenn eine Seite mit Trennzeichen aktualisiert wurde, während in Platzhalter gescrollt wurde. (I475f0, b/516565503)

Version 3.5.0

6. Mai 2026

androidx.paging:paging-*:3.5.0 ist veröffentlicht. Version 3.5.0 enthält diese Commits.

Wichtige Änderungen seit Version 3.4.0:

  • Operator Flow<PagingData>.asItemSnapshotListFlow hinzugefügt, um Flow<PagingData> in Flow<ItemSnapshotList> zu konvertieren. Das bedeutet, dass auf geladene Daten jetzt außerhalb der UI-Ebene zugegriffen werden kann. So können Sie Flow<ItemSnapshotList> mit anderen Datenquellen kombinieren, ausgelagerte Daten lokal zwischenspeichern und ändern oder ausgelagerte Daten als Teil eines UI-Zustands verfügbar machen.

  • Die Erweiterungsfunktionen Pager.append und Pager.prepend wurden hinzugefügt, um manuell weitere Daten zu laden, ohne scrollen zu müssen.

  • Die Erweiterungsfunktionen Pager.refresh und Paging.retry wurden hinzugefügt, um Ladefehler bei Verwendung der asItemSnapshotListFlow API zu beheben.

Version 3.5.0-rc01

22. April 2026

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

Keine Änderungen

  • Im Vergleich zu Version 3.5.0-beta01 gibt es keine nennenswerten Änderungen.

Version 3.5.0-beta01

8. April 2026

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

API-Änderungen

  • Die Flow<PagingData>.asState API wurde in Flow<PagingData>.asItemSnapshotListFlow umbenannt. (I0dc11, b/496548025)

Version 3.5.0-alpha01

11. März 2026

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

Neue Funktionen

  • Das paging-common-Artefakt enthält jetzt den neuen asState-Flow-Operator für Flow<PagingData>, um es in ein Flow<ItemSnapshotList> zu konvertieren. Dadurch werden Funktionen wie die folgenden freigeschaltet:

    • „Flow of ItemSnapshotList“ mit anderen Datenquellen kombinieren
    • Flow mit mehreren Erfassern ohne cachedIn teilen
    • Ausgelagerte Daten lokal im Cache speichern
    • Ausgelagerte Daten im Arbeitsspeicher ändern
    • Seitenweise Daten als Teil eines UI-Status verfügbar machen
    // In your ViewModel
    val pager = Pager(pagingConfig, pagingSourceFactory)
    val pagerFlow = pager.flow.asState()
    
    // alterantively convert the flow to a SharedFlow
    val pagerFlow = pager.flow.asState().stateIn()
    
    // In presenter layer
    val snapshotFlow = viewModel.pagerFlow.collectAsStateWithLifecycle(initialList)
    val snapshot = itemsFlow.value
    
    LazyColumn {
    items(items = snapshot.items) { ... }
    }
    
  • Das paging-common-Artefakt hat außerdem die APIs Pager.append und Pager.prepend hinzugefügt, um Ladevorgänge an beiden Enden der geladenen Elemente manuell auszulösen.

    • In Kombination mit paging-runtime oder paging-compose bietet dies eine Alternative zum Laden weiterer Daten, ohne scrollen zu müssen.
    • In Kombination mit der neuen asState API ist dies die einzige Möglichkeit, mehr Daten zu laden.
    LazyColumn {
    item {
           /**
           * Load more items when users scroll near the top of loaded items.
           */
           LaunchedEffect(viewModel) { viewModel.prepend() }
        }
    items(snapshot.items) { item -> Text("Item: $item") }
    item {
            /**
            * Load more items when users scroll near the bottom of loaded items.
            */
          LaunchedEffect(viewModel) { viewModel.append() }
      }
    }
    
  • Pager.refresh und Pager.retry wurden hinzugefügt, um Ladefehler bei Verwendung der asState API zu beheben. In diesem Dokument finden Sie weitere Beispiele für die Verwendung der neuen APIs. (I1e1e9, If3c87, Idbd48, Id1e1d, I816fe)

Version 3.4

Version 3.4.2

11. März 2026

androidx.paging:paging-*:3.4.2 ist veröffentlicht. Version 3.4.2 enthält diese Commits.

Keine Änderungen

  • In dieser Version gibt es keine API- oder Verhaltensänderungen gegenüber Version 3.4.1.

Version 3.4.1

11. Februar 2026

androidx.paging:paging-*:3.4.1 ist veröffentlicht. Version 3.4.1 enthält diese Commits.

Abhängigkeitsupdate

  • Die Guava-Abhängigkeit von paging-guava wurde von Version 31.1 auf 32.0.1 aktualisiert.

Version 3.4.0

28. Januar 2026

androidx.paging:paging-*:3.4.0 ist veröffentlicht. Version 3.4.0 enthält diese Commits.

Wichtige Änderungen seit 3.3.0:

  • paging-common, paging-testing und paging-compose wurden weitere KMP-Ziele hinzugefügt. Insgesamt werden jetzt JVM(Android und Desktop), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) und Web (JavaScript, WasmJS) unterstützt.
  • paging-common, paging-testing und paging-compose unterstützen macosX64, iosX64, watchosX64 und tvosX64 nicht mehr, da Jetbrains die macosX64-Ziele eingestellt hat.
  • Es wurde eine neue PagingState API closestItemAroundPosition hinzugefügt, um das geladene Element abzurufen, das der Zielposition am nächsten ist und dem Eingabeprädikat entspricht. Damit können elementbasierte Aktualisierungsschlüssel generiert werden, wenn das ideale verankerbare Element in der Nähe, aber nicht an der genauen Zielposition ist.

Version 3.4.0-rc01

14. Januar 2026

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

Neue Funktionen

Version 3.4.0-beta01

17. Dezember 2025

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

Diverse Fehlerkorrekturen

  • Race-Condition zwischen RecyclerView- und Refresh-Ladevorgängen behoben, die zu IndexOutOfBoundsException in RecyclerView geführt hat. Unterbrochene UI-Aktualisierungen aufgrund von kontinuierlichen Refresh-Ladevorgängen können dazu führen, dass der Paging-Status nicht mehr mit RecyclerView synchronisiert ist. Dies wird behoben, indem das Paging auf den Zustand vor der Aktualisierung zurückgesetzt wird, wenn eine Aktualisierung unterbrochen wird (z.B. durch einen nachfolgenden Refresh-Ladevorgang). (I771b0, b/409809768)

Version 3.4.0-alpha04

10. September 2025

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

API-Änderungen

  • Es wurde eine neue PagingState API closestItemAroundPosition hinzugefügt, um das geladene Element abzurufen, das der Zielposition am nächsten ist und dem Eingabeprädikat entspricht. Damit können elementbasierte Aktualisierungsschlüssel generiert werden, wenn das ideale verankerbare Element in der Nähe, aber nicht genau an der Zielposition ist. (I96e5c, b/440187139)

Version 3.4.0-alpha03

27. August 2025

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

Neue Funktionen

  • In „paging-common“ wurde „Desktop“ als neues Kotlin Multiplatform-Ziel (KMP) hinzugefügt. Insgesamt werden jetzt JVM(Android und Desktop), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) und Web (JavaScript, WasmJS) unterstützt. (Id2483, b/436884811)
  • In „paging-testing“ wurden neue Kotlin Multiplatform-Ziele (KMP) hinzugefügt. Insgesamt werden jetzt JVM(Android und Desktop), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) und Web (JavaScript, WasmJS) unterstützt. (I0c543, b/435014650)
  • Paging-compose wurden neue Kotlin Multiplatform-Ziele (KMP) hinzugefügt. Insgesamt werden jetzt JVM(Android und Desktop), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) und Web (JavaScript, WasmJS) unterstützt. (I70d44, b/436884801)

API-Änderungen

Version 3.4.0-alpha02

30. Juli 2025

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

API-Änderungen

  • Mit PagingData.from können jetzt placeholdersBefore und placeholdersAfter festgelegt werden. Beim Scrollen durch diese Platzhalter werden keine Anzeigen geladen. (I06983)

Version 3.4.0-alpha01

2. Juli 2025

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

Neue Funktionen

Fehlerkorrekturen

  • Android-Unittests, die Paging 3.3 oder höher verwenden, lösen keine Fehler mehr von PagingLogger aus (Ia9400, b/331684448)
  • Fehler behoben, bei dem RecyclerView IndexOutOfBoundsException auslöst, wenn der Nutzer beim Aktualisieren von RecyclerView scrollt (Id1f16, b/381024738)
  • Ein Fehler wurde behoben, durch den beim Aktualisieren während des Scrollens keine weiteren Seiten geladen werden konnten. (I60ca5, b/352586078)
  • Ein Absturz beim Scrollen während der Aktualisierung von Paging-Elementen wurde behoben. (I8c65a, b/347649763)

Version 3.3

Version 3.3.6

12. Februar 2025

androidx.paging:paging-*:3.3.6 ist veröffentlicht. Version 3.3.6 enthält diese Commits.

Diverse Fehlerkorrekturen

  • Signale zum Aktualisieren und Wiederholen, die während einer ersten Aktualisierung gesendet werden, werden jetzt gespeichert und automatisch noch einmal gesendet, sobald der Paging-Presenter bereit ist.

Externer Beitrag

  • Vielen Dank an Eva für das Einreichen der Fehlerkorrektur (#754)

Version 3.3.5

11. Dezember 2024

androidx.paging:paging-*:3.3.5 ist veröffentlicht. Version 3.3.5 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Fehler behoben, bei dem RecyclerView beim Scrollen durch den Nutzer während der Aktualisierung von RecyclerView den Fehler IndexOutOfBoundsException auslöste. (Id1f16, b/381024738)

Version 3.3.4

13. November 2024

androidx.paging:paging-*:3.3.4 ist veröffentlicht. Version 3.3.4 enthält diese Commits.

Diverse Fehlerkorrekturen

  • Bei Android-Unittests, in denen Paging 3.3 oder höher verwendet wird, wird kein Fehler wie Method isLoggable in android.util.Log not mocked mehr ausgegeben. (Ia9400, b/331684448)

Version 3.3.2

7. August 2024

androidx.paging:paging-*:3.3.2 ist veröffentlicht. Version 3.3.2 enthält diese Commits.

Neue Funktionen

  • paging-common und paging-testing haben neue Kotlin-Multiplatform-Ziele hinzugefügt: watchos, tvos und linuxArm64 (90c9768), (53e0eca)

Version 3.3.1

24. Juli 2024

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

Diverse Fehlerkorrekturen

  • Ein Problem wurde behoben, durch das mit AsyncPagingDataDiffer oder darauf basierenden APIs wie PagingDataAdapter, die mit RecyclerView verwendet werden, keine weiteren Ladevorgänge ausgelöst werden konnten, wenn die zugrunde liegende Datenquelle beim Scrollen aktualisiert wurde. (I60ca5, b/352586078)
  • Ein Absturz wurde behoben, der auftritt, wenn Elemente aus der zugrunde liegenden Datenquelle entfernt werden, während mit einem PagingDataAdapter oder AsyncPagingDataDiffer in einem RecyclerView gescrollt wird. (I8c65a, b/347649763)

Version 3.3.0

14. Mai 2024

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

Wichtige Änderungen seit Version 3.2.0

  • PagingDataPresenter ist jetzt eine öffentliche Klasse. Multiplattform-Präsentatoren können jetzt auf PagingDataPresenter basieren, anstatt interne Paging APIs oder AsyncPagingDataDiffer von paging-runtime zu erfordern.
  • In hasError und isIdle wurden die neuen Hilfsmethoden LoadStates und CombinedLoadStates hinzugefügt, um zu prüfen, ob LoadStates den Status „Error“ oder „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 den Fehlerstatus erreicht hat.
  • PagingData.empty() sendet jetzt standardmäßig NotLoading-Zustände, sofern keine benutzerdefinierten LoadStates an den Konstruktor übergeben werden. Das unterscheidet sich vom bisherigen Verhalten, bei dem LoadStates nicht gesendet wird, wenn es an ein PagingDataAdapter gesendet wird, oder Ladestatus gesendet werden, wenn es als LazyPagingItems erfasst wird. Wenn sie als LazyPagingItems erfasst wird, wird jetzt auch sofort nach der ersten Erstellung eine leere Liste angezeigt.

Kompatibilität mit Kotlin Multiplatform

Paging bietet jetzt Artefakte, die mit Kotlin Multiplatform kompatibel sind. Das ist vor allem der Arbeit am multiplatform-paging-Projekt von CashApp zu verdanken.

  • paging-common hat alle Paging 3-APIs zu common verschoben und ist jetzt zusätzlich zu Android auch mit JVM und iOS kompatibel.
  • paging-testing hat seinen Code nach common verschoben und ist jetzt neben Android auch mit JVM und iOS kompatibel.
  • paging-compose hat seinen Code nach common verschoben und liefert ein Android-Artefakt, das der Multiplattform-Unterstützung von androidx.compose entspricht.
  • paging-runtime, paging-guava, paging-rxjava2 und paging-rxjava3 bleiben nur für Android verfügbar.

Version 3.3.0-rc01

1. Mai 2024

androidx.paging:paging-*:3.3.0-rc01 wird ohne Änderungen in Paging 3.3.0-beta01 veröffentlicht. Version 3.3.0-rc01 enthält diese Commits.

Version 3.3.0-beta01

3. April 2024

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

Version 3.3.0-alpha05

20. März 2024

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

API-Änderungen

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

Version 3.3.0-alpha04

6. März 2024

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

Diverse Fehlerkorrekturen

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

Version 3.3.0-alpha03

7. Februar 2024

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

Neue Funktionen

  • PagingDataPresenter ist jetzt eine öffentliche Klasse. Multiplattform-Presenter können jetzt auf PagingDataPresenter basieren, anstatt interne Paging APIs oder AsyncPagingDataDiffer von paging-runtime zu erfordern. (Id1f74, b/315214786)
  • Es wurden neue Hilfsmethoden LoadStates und CombinedLoadStates hinzugefügt, um zu prüfen, ob sich LoadStates im Status „Error“ (Fehler) oder NotLoading befindet. Außerdem wurde eine neue API hinzugefügt, die auf einen LoadStateFlow wartet, bis ein Ladevorgang entweder den Status NotLoading oder den Fehlerstatus erreicht hat. (Id6c67)

Verhaltensänderung

  • PagingData.empty() sendet jetzt standardmäßig NotLoading-Zustände, sofern keine benutzerdefinierten LoadStates an den Konstruktor übergeben werden. Dies weicht vom bisherigen Verhalten ab, bei dem LoadStates nicht gesendet wird, wenn es an ein PagingDataAdapter gesendet wird, oder bei dem Ladestatus gesendet werden, wenn es als LazyPagingItems erfasst wird. Wenn sie als LazyPagingItems erfasst werden, wird jetzt auch sofort nach der ersten Erstellung eine leere Liste angezeigt. (I4d11d, b/301833847)

Version 3.3.0-alpha02

20. September 2023

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

Kompatibilität mit Kotlin Multiplatform

Paging liefert jetzt Artefakte, die mit Kotlin Multiplatform kompatibel sind. Das ist vor allem der Upstream-Arbeit des multiplatform-paging-Projekts von CashApp zu verdanken. So können wir Abweichungen zwischen zwei Repositories vermeiden und sie kompatibel halten.

  • paging-common hat alle Paging 3 APIs nach common verschoben und ist jetzt neben Android auch mit JVM und iOS kompatibel.
  • paging-testing hat seinen Code nach common verschoben und ist jetzt neben Android auch mit JVM und iOS kompatibel.
  • paging-compose hat seinen Code nach common verschoben und liefert ein Android-Artefakt, das der Multiplattform-Unterstützung von androidx.compose entspricht.
  • paging-runtime, paging-guava, paging-rxjava2 und paging-rxjava3 bleiben nur für Android verfügbar.

API-Änderungen

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

Externer Beitrag

Version 3.3.0-alpha01

20. September 2023

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

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem die asSnapshot() API des Paging-Testartefakts hängen blieb, wenn ein mit PagingData.from(List) erstellter Flow übergeben wurde, da asSnapshot() keine Informationen darüber hatte, wann das Laden abgeschlossen war (im Gegensatz zur PagingData.from(List, LoadStates)-Überladung). Dieser Workaround funktioniert nur für abschließbare Flows (z.B. flowOf(PagingData.from(...))). Verwenden Sie für nicht abschließbare Flows (z.B. MutableStateFlow) die PagingData.from-Überladung, die LoadStates bereitstellt. (I502c3)
  • Paging Compose verwendet jetzt intern AndroidUiDispatcher.Main, damit neue Daten im selben Frame verfügbar sind, in dem das Laden abgeschlossen wird. (Ia55af)

Version 3.2.0

26. Juli 2023

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

Wichtige Änderungen seit Version 3.1.0

  • Paging Compose hat die API-Stabilität erreicht und wurde wieder in den Rest von Paging zusammengeführt. Die Version entspricht jetzt allen anderen Paging-Artefakten. Änderungen seit Version 3.1.0:
    • Unterstützung für die Vorschau einer Liste mit gefälschten Daten durch Erstellen eines PagingData.from(fakeData) und Umschließen dieses PagingData in einem MutableStateFlow (z.B. MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Übergeben Sie diesen Ablauf als Empfänger für collectAsLazyPagingItems() an @Preview-Composables, um eine Vorschau zu erstellen.
    • Unterstützung für alle Lazy-Layouts wie LazyVerticalGrid und HorizontalPager sowie benutzerdefinierte Lazy-Komponenten aus Wear- und TV-Bibliotheken. Dies wurde durch neue LazyPagingItems-Erweiterungsmethoden auf niedrigerer Ebene itemKey und itemContentType erreicht. So können Sie die Parameter key und contentType in den Standard-items-APIs implementieren, die bereits für LazyColumn, LazyVerticalGrid sowie deren Entsprechungen in APIs wie HorizontalPager vorhanden sind.
    • items(lazyPagingItems) und itemsIndexed(lazyPagingItems), die nur LazyListScope unterstützen, wurden eingestellt.
  • Neues paging-testing-Artefakt mit APIs, die für Unittests der einzelnen Ebenen Ihrer App und ihrer Integration mit Paging in Isolation entwickelt wurden. Dazu gehören beispielsweise:
    • TestPager-Klasse, mit der Sie das Verhalten Ihrer eigenen benutzerdefinierten PagingSource-Implementierung unabhängig vom Pager und der tatsächlichen Benutzeroberfläche validieren können.
    • ​​asPagingSourceFactory-APIs, um entweder einen Flow<List<Value>> oder einen statischen List<Value> in einen PagingSourceFactory umzuwandeln, der in Tests an einen Pager übergeben werden kann
    • asSnapshot Kotlin-Erweiterung für Flow<PagingData<Value>>, die Flow<PagingData<Value>> in eine direkte List<Value> übersetzt. Mit dem asSnapshot lambda können Sie die Benutzeroberfläche Ihrer App über APIs wie scrollTo oder appendScrollWhile nachahmen, um zu prüfen, ob der Snapshot der Daten an einem beliebigen Punkt in Ihren paginierten Daten korrekt ist.
  • Es wurden Standardlogs hinzugefügt, um Paging-Debugging-Informationen auf zwei Ebenen verfügbar zu machen: VERBOSE und DEBUG. Die Logs können mit dem Befehl adb shell setprop log.tag.Paging [DEBUG|VERBOSE] aktiviert werden. Dies gilt sowohl für das Paging mit Ansichten als auch für das Paging mit Compose.
  • Konstruktoren für PagingDataAdapter und AsyncPagingDataDiffer hinzugefügt, die CoroutineContext anstelle von CoroutineDispatcher akzeptieren.
  • Es wurde eine neue funktionale Schnittstelle PagingSourceFactory hinzugefügt, die eine explizitere API-Oberfläche als die vorherigen () -> PagingSource-Lambdas bietet. Mit dieser Factory kann ein Pager instanziiert werden.

Version 3.2.0-rc01

21. Juni 2023

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

Externer Beitrag

  • Vielen Dank an Veyndan für den Beitrag, Paging von Android-/JVM-Spezifika zu entfernen. (#553, #554, #555, #559)

Version 3.2.0-beta01

7. Juni 2023

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

Paging Compose

  • Paging Compose hat offiziell API-Stabilität erreicht. Daher wurde die Version von 1.0.0-alpha20 aktualisiert, um der Version aller anderen Paging-Artefakte zu entsprechen.

API-Änderungen

Version 3.2.0-alpha06

24. Mai 2023

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

Neue Funktionen

  • Es wurde eine neue funktionale Schnittstelle PagingSourceFactory hinzugefügt, die eine explizitere API-Oberfläche als die vorhandenen () -> PagingSource-Lambdas bietet. Mit dieser Factory kann eine Pager instanziiert werden. (I33165, b/280655188)
  • Die neue API paging-testing 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 auf Flow<List<Value>> sollte weiterhin für Tests mit mehreren Generationen statischer Daten verwendet werden. (Id34d1, b/280655188)

API-Änderungen

  • Alle öffentlichen APIs in „paging-testing“ sind jetzt mit @VisibleForTesting annotiert, um sicherzustellen, dass diese APIs nur in Tests verwendet werden. (I7db6e)
  • Für die asSnapshot API muss kein CoroutineScope mehr übergeben werden. Standardmäßig wird jetzt der Kontext verwendet, der vom übergeordneten Bereich übernommen wurde. (Id0a78, b/282240990)
  • Die Parameter des TestPager-Konstruktors wurden neu angeordnet, um intuitiv der Reihenfolge der echten Pager-Konstruktorparameter zu entsprechen (I6185a).
  • Die Verwendung des Lambda-Typs () -> PagingSource<Key, Value> in „paging-testing“ wurde zu Typ PagingSourceFactory<Key, Value> migriert. (I4a950, b/280655188)

Geändertes Verhalten

  • Der Haupt-Dispatcher ist nicht mehr erforderlich, um asSnapshot-Paging-Tests auszuführen. Das Festlegen dieser Einstellung hat keine Auswirkungen mehr auf das Testverhalten. (Ie56ea)

Version 3.2.0-alpha05

3. Mai 2023

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

API-Änderungen

  • In der Paging Testing API von asSnapshot wird der Parameter loadOperations jetzt standardmäßig auf ein leeres Lambda gesetzt. So kann asSnapshot aufgerufen werden, ohne dass Ladevorgänge übergeben werden müssen, um die Daten aus dem ersten Aktualisierungsladevorgang abzurufen. (Ied354, b/277233770)

Verbesserungen der Dokumentation

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

Externe Beiträge

Version 3.2.0-alpha04

8. Februar 2023

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

Paging-Tests

  • Das Artefakt paging-testing enthält jetzt die Methode asPagingSourceFactory, mit der ein pagingSourceFactory aus einem Flow<List<Value>> erstellt werden kann, das einem Pager zur Verfügung gestellt wird. Jeder vom Flow ausgegebene List<Value>> stellt eine Generierung von paginierten Daten dar. Dies erleichtert das Testen von Seitenwechseln, z. B. bei PagingData-Transformationen, indem eine Datenquelle für den Pager simuliert wird, aus der er Daten abrufen kann. (I6f230, b/235528239)
  • Das Artefakt paging-testing wurde um neue APIs erweitert, mit denen sich die in einem Flow<PagingData<T>> enthaltenen Daten überprüfen lassen. Damit kann beispielsweise die Ausgabe eines Flow<PagingData<T>> aus der ViewModel-Ebene bestätigt werden.

    Dies erfolgt über die Kotlin-Erweiterung asSnapshot für Flow<PagingData<Value>>, die Flow<PagingData<Value>> in ein direktes List<Value> übersetzt. Mit dem Lambda-Ausdruck asSnapshot können Sie die Benutzeroberfläche Ihrer App über APIs wie scrollTo oder appendScrollWhile wiederholbar und konsistent nachbilden, um zu prüfen, ob der Snapshot der Daten an einem beliebigen Punkt in Ihren paginierten Daten korrekt ist.

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

    asSnapshot ist eine suspend-Methode, die 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, Ic1238, I96def, b/235528239)

API-Änderungen

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

Version 3.2.0-alpha03

24. Oktober 2022

androidx.paging:paging-*:3.2.0-alpha03 ist 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 Unittests der einzelnen Ebenen Ihrer App und ihrer Integration in Paging entwickelt wurden.

Diese erste Version enthält beispielsweise die Klasse TestPager, mit der Sie das Verhalten Ihrer eigenen benutzerdefinierten PagingSource-Implementierung unabhängig von Pager und der echten Benutzeroberfläche validieren können, die Sie normalerweise zum Simulieren der End-to-End-Paging-Integration benötigen.

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

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

API-Änderungen

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

Version 3.2.0-alpha02

10. August 2022

androidx.paging:paging-*:3.2.0-alpha02 ist 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 aus PagingData offenzulegen.
  • Die Logs können mit dem adb shell-Befehl adb shell setprop log.tag.Paging [DEBUG|VERBOSE]. aktiviert werden(b/235527159).

Diverse Fehlerkorrekturen

  • Der Fehler, dass der PagingDataDiffer-Konstruktor fehlt, wenn paging-common:3.2.0-alpha01 mit der Laufzeit paging-runtime:3.1.1 oder älter verwendet wird, wurde behoben.(b/235256201)

Version 3.2.0-alpha01

1. Juni 2022

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

API-Änderungen

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

Diverse Fehlerkorrekturen

  • Das Ergebnis von PagingSource.getRefreshKey() wird jetzt korrekt gegenüber initialKey priorisiert, wenn es „null“ zurückgeben würde, aber ein initialKey ungleich null festgelegt wurde. (Ic9542, b/230391606)

Externer Beitrag

  • Die API :compose:ui:ui-test (updateApi) wurde aufgrund der Migration der Test-Coroutines-Bibliothek (I3366d) aktualisiert.

Version 3.1

Version 3.1.1

9. März 2022

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

Diverse Fehlerkorrekturen

  • Zwischen Generationen wurden Zwischenereignisse vom Typ LoadState.NotLoading entfernt, die fälschlicherweise von .cachedIn() eingefügt wurden. Durch diese Änderung ist es viel einfacher, auf LoadState-Änderungen zu reagieren, da redundante LoadState.NotLoading-Ereignisse entfernt werden, die zwischen fehlgeschlagenen Ladevorgängen, beim Aktualisieren oder während der Entwertung erzeugt wurden.

Version 3.1.0

17. November 2021

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

Wichtige Änderungen seit Version 3.0.0

  • Die APIs Flow<PagingData>.observable und Flow<PagingData>.flowable sind nicht mehr experimentell.
  • Verhaltensänderungen bei LoadState:
    • endOfPaginationReached ist jetzt immer false für LoadType.REFRESH für sowohl PagingSource als auch RemoteMediator
    • LoadStates aus Paging wartet jetzt auf gültige Werte von PagingSource und RemoteMediator, bevor sie nachgelagert ausgegeben werden. Neue Generationen von PagingData beginnen jetzt immer korrekt mit Loading für den Aktualisierungsstatus, anstatt in einigen Fällen fälschlicherweise auf NotLoading zurückgesetzt zu werden.
    • .loadStateFlow und .addLoadStateListener in Vortragenden-APIs senden nicht mehr redundant eine anfängliche CombinedLoadStates, bei der die Mediator-Status immer auf null gesetzt sind.
  • Die Stornierung früherer Generationen erfolgt jetzt sofort bei Ungültigkeit / neuen Generationen. Die Verwendung von .collectLatest auf Flow<PagingData> ist nicht mehr erforderlich, wird aber weiterhin empfohlen.
  • PagingSource.LoadResult.Invalid wurde als neuer Rückgabetyp von PagingSource.load hinzugefügt. Dadurch werden alle ausstehenden oder zukünftigen Ladeanfragen an diese PagingSource verworfen und ungültig gemacht. Dieser Rückgabetyp ist für die Verarbeitung potenziell ungültiger oder veralteter Daten konzipiert, die von der Datenbank oder dem Netzwerk zurückgegeben werden können.
  • Die Presenter-APIs .onPagesPresented und .addOnPagesUpdatedListener wurden hinzugefügt. Sie werden synchron ausgelöst, wenn Seiten in der Benutzeroberfläche angezeigt werden. Seitenaktualisierungen können in den folgenden Fällen erfolgen:
    • Der erste Ladevorgang einer neuen Generation von PagingData wird abgeschlossen, unabhängig davon, ob die neue Generation Änderungen an den präsentierten Elementen enthält. Beispiel: Auch wenn eine neue Generation den anfänglichen Ladevorgang ohne Aktualisierungen abschließt, weil die Liste genau dieselbe ist, wird dieser Callback ausgelöst.
    • Eine Seite wird eingefügt, auch wenn sie keine neuen Elemente enthält.
    • Eine Seite wird gelöscht, auch wenn sie leer war.

Version 3.1.0-rc01

3. November 2021

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

Diverse Fehlerkorrekturen

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

Version 3.1.0-beta01

13. Oktober 2021

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

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem viele schnelle Zugriffe auf Elemente dazu führen konnten, dass sie für die Vorabrufdistanz nicht berücksichtigt wurden, was zu Verzögerungen beim Seitenaufbau führte. Das ist besonders problematisch, wenn viele Elemente gleichzeitig in einer Reihenfolge angeordnet werden, bei der das Laden entgegen der Scrollrichtung des Nutzers priorisiert wird. Diese Artikelzugriffe werden jetzt gepuffert und synchron priorisiert, damit sie nicht verloren gehen. (aosp/1833273)

Version 3.1.0-alpha04

29. September 2021

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

API-Änderungen

  • Die APIs Flow<PagingData>.observable und Flow<PagingData>.flowable sind nicht mehr experimentell. (Ie0bdd)

Fehlerkorrekturen

  • Für LoadStates ist endOfPaginationReached jetzt immer false für LoadType.REFRESH. Bisher konnte endOfPaginationReached für RemoteMediator REFRESH den Wert true haben, aber nicht für PagingSource. Dieses Verhalten wurde jetzt konsolidiert, sodass immer false zurückgegeben wird, da REFRESH nie endgültig sein kann. 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 Richtungen APPEND oder PREPEND tun. (I047b6)
  • LoadStates aus Paging warten jetzt auf gültige Werte von PagingSource und RemoteMediator, bevor sie zwischen den Generationen downstream ausgegeben werden. Dadurch wird verhindert, dass neue Generationen von PagingData „NotLoading“ in „CombinedLoadStates.source.refresh“ senden, wenn der Status bereits „Loading“ war. Neue Generationen von PagingData beginnen jetzt immer korrekt mit „Loading“ für den Aktualisierungsstatus, anstatt in einigen Fällen fälschlicherweise zuerst auf „NotLoading“ zurückgesetzt zu werden.

    Die Stornierung früherer Generationen erfolgt jetzt sofort bei Ungültigkeit/neuen Generationen. Es sollte nicht mehr erforderlich sein, .collectLatest für Flow<PagingData> zu verwenden, obwohl dies weiterhin dringend empfohlen wird. (I0b2b5, b/177351336, b/195028524)

  • Bei .loadStateFlow- und .addLoadStateListener-Presenter-APIs wird nicht mehr redundant ein anfängliches CombinedLoadStates gesendet, bei dem die Mediator-Status immer auf null und die Quellstatus auf NotLoading(endOfPaginationReached = false) festgelegt sind. Das bedeutet Folgendes:

    1. Mediator-Status werden immer ausgefüllt, wenn Sie RemoteMediator verwenden.
    2. Wenn ein neuer loadState-Listener oder ein neuer Collector für .loadStateFlow registriert wird, wird der aktuelle Wert nicht mehr sofort ausgegeben, wenn kein echter CombinedLoadStates von PagingData empfangen wurde. Das kann passieren, wenn ein Collector oder Listener gestartet wird, bevor ein PagingData gesendet wurde. (I1a748)

Version 3.1.0-alpha03

21. Juli 2021

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

API-Änderungen

  • Ein dritter LoadResult-Rückgabetyp „LoadResult.Invalid“ wird zu PagingSource hinzugefügt. Wenn „PagingSource.load“ den Wert „LoadResult.Invalid“ zurückgibt, werden die geladenen Daten verworfen und die „PagingSource“ wird ungültig. Dieser Rückgabetyp ist für die Verarbeitung potenziell ungültiger oder veralteter Daten vorgesehen, die von der Datenbank oder dem Netzwerk zurückgegeben werden können.

    Wenn beispielsweise in die zugrunde liegende Datenbank geschrieben wird, die PagingSource aber nicht rechtzeitig ungültig wird, kann sie inkonsistente Ergebnisse zurückgeben, wenn ihre Implementierung von der Unveränderlichkeit des zugrunde liegenden Datasets abhängt, aus dem sie lädt (z.B. Datenbankimplementierungen im LIMIT OFFSET-Stil). In diesem Szenario wird empfohlen, nach dem Laden auf Ungültigkeit zu prüfen und LoadResult.Invalid zurückzugeben. Dadurch werden alle ausstehenden oder zukünftigen Ladeanfragen an diese PagingSource verworfen und die PagingSource wird ungültig.

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

    LoadResult ist eine versiegelte Klasse. Das bedeutet, dass es sich um eine quellinkompatible Änderung handelt, sodass Anwendungsfälle, die PagingSource.load-Ergebnisse direkt verwenden, LoadResult.Invalid zur Kompilierungszeit verarbeiten müssen. Kotlin-Nutzer, die „exhaustive-when“ verwenden, um den Rückgabetyp zu prüfen, müssen beispielsweise eine Prüfung auf den Typ „Invalid“ hinzufügen. (Id6bd3, b/191806126, b/192013267)

Diverse Fehlerkorrekturen

  • Ungültigkeits-Callbacks, die über PagingSource.registerInvalidatedCallback oder DataSource.addInvalidatedCallback hinzugefügt wurden, werden jetzt automatisch ausgelöst, wenn sie für eine PagingSource / DataSource registriert wurden, die bereits ungültig war. Damit wird eine Race-Bedingung behoben, die dazu geführt hat, dass Paging-Invalidierungssignale verloren gegangen sind und die Funktion hängen geblieben ist, wenn eine Quelle angegeben wurde, die bereits beim ersten Laden ungültig war. Außerdem werden ungültige Callbacks jetzt ordnungsgemäß entfernt, nachdem sie ausgelöst wurden, da sie garantiert höchstens einmal aufgerufen werden. (I27e69)
  • Wenn Sie den Platzhalter-Anfangswert (InitialPagedList) aus einem neu instanziierten PagedList-Stream, z.B. LivePagedListBuilder oder RxPagedListBuilder, senden, werden zuvor geladene Daten nicht mehr gelöscht.

Version 3.1.0-alpha02

1. Juli 2021

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

Neue Funktionen

  • Die onPagesPresented-Listener- und FlowPresenter-APIs wurden hinzugefügt. Sie werden sofort ausgelöst, nachdem die angezeigten Seiten in der Benutzeroberfläche aktualisiert wurden.

    Da diese Aktualisierungen synchron mit der Benutzeroberfläche erfolgen, können Sie Adaptermethoden wie .snapshot oder .getItemCount aufrufen, um den Status nach der Aktualisierung zu prüfen. Beachten Sie, dass .snapshot() explizit aufgerufen werden muss, da dies bei jeder Aktualisierung sehr aufwendig sein kann.

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

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

Diverse Fehlerkorrekturen

  • Beim Zugriff auf „PagedList.dataSource“ über den von „LivePagedList“ oder „RxPagedList“ erzeugten Anfangswert wird nicht mehr fälschlicherweise eine „IllegalStateException“ ausgelöst (I96707).

Version 3.1.0-alpha01

2. Juni 2021

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

API-Änderungen

  • Die von paging-rxjava3 bereitgestellten Klassen befinden sich jetzt im Paket androidx.paging.rxjava3, damit sie nicht mit paging-rxjava2 in Konflikt geraten (Ifa7f6).

Fehlerkorrekturen

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

Externer Beitrag

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

Neue Funktionen

  • Paging Compose unterstützt jetzt die Vorschau einer Liste mit gefälschten Daten. Dazu erstellen Sie ein PagingData.from(fakeData) und umschließen es PagingData mit einem MutableStateFlow (z. B. MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Wenn Sie diese Daten als Eingabe für Ihr @Preview verwenden, werden durch Aufrufe von collectAsLazyPagingItems() Vorschau-fähige LazyPagingItems bereitgestellt. (I8a78d, b/194544557)

Diverse Fehlerkorrekturen

  • Im Cache gespeicherte Daten aus pager.flow.cachedIn, die in LazyPagingItems erfasst wurden, sind jetzt sofort nach der Statuswiederherstellung verfügbar, ohne dass eine asynchrone Erfassung erforderlich ist. Das bedeutet, dass die im Cache gespeicherten Daten sofort nach der ersten Erstellung nach der Wiederherstellung des Status für die Präsentation bereit sind. (I97a60, b/177245496)

Version 1.0.0-alpha19

3. Mai 2023

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

Unterstützung für alle Lazy-Layouts

Bisher stellte Paging Compose benutzerdefinierte items- und itemsIndexed-Erweiterungen für LazyListScope bereit. Das bedeutete, dass Sie Paging Compose nicht mit anderen Lazy-Layouts wie LazyVerticalGrid, HorizontalPager oder anderen benutzerdefinierten Lazy-Komponenten verwenden konnten, die von den Wear- und TV-Bibliotheken bereitgestellt werden. Die Behebung dieser Inflexibilität ist das Hauptziel dieser Version.

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

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

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

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

Weitere Beispiele für die Verwendung dieser neuen APIs

Durch diese Änderungen werden die Beispiele für LazyColumn und LazyRow zwar einige Zeilen länger, aber wir sind der Meinung, dass die Einheitlichkeit aller Lazy-Layouts ein wichtiger Faktor für Nutzer von Paging Compose ist. Aus diesem Grund werden die vorhandenen Erweiterungen für LazyListScope nicht mehr unterstützt. (I0c459, I92c8f, b/276989796)

API-Änderungen

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

Abhängigkeitsupdates

  • Paging Compose hat seine Abhängigkeit von Compose 1.0.5 auf Compose 1.2.1 aktualisiert. (Ib1918, b/255283378)

Version 1.0.0-alpha18

8. Februar 2023

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

Version 1.0.0-alpha17

24. Oktober 2022

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

Neue Funktionen

  • Unterstützung für einen benutzerdefinierten CoroutineContext beim Anrufen von collectLazyPagingItems hinzugefügt. (I7a574, b/243182795, b/233783862)

Version 1.0.0-alpha16

10. August 2022

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

Neue Funktionen

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

Fehlerkorrekturen

  • Der Fehler „PagingDataDiffer-Konstruktor fehlt“ bei 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 ist veröffentlicht. Version 1.0.0-alpha15 enthält diese Commits.

API-Änderungen

  • Konstruktoren für PagingDataAdapter und AsyncPagingDataDiffer hinzugefügt, die CoroutineContext anstelle von CoroutineDispatcher akzeptieren. (Idc878)

Diverse Fehlerkorrekturen

  • LazyPagingItems legt jetzt für die erste loadState eine Aktualisierung von LoadState.Loading fest. (I55043, b/224855902)

Version 1.0.0-alpha14

13. Oktober 2021

androidx.paging:paging-compose:1.0.0-alpha14 ist 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 ist veröffentlicht. Version 1.0.0-alpha13 enthält diese Commits.

API-Änderungen

  • Die Funktion LazyPagingItems.snapshot() wurde durch die Property LazyPagingItems.itemSnapshotList ersetzt (Ie2da8).
  • Das verworfene LazyPagingItems.getAsState() wurde entfernt (Ie65e4)

Version 1.0.0-alpha12

21. Juli 2021

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

API-Änderungen

  • items(lazyPagingItems) und itemsIndexed(lazyPagingItems), die zum Verbinden von Paging mit LazyColumn/Row verwendet werden, akzeptieren jetzt den Parameter „option key“, mit dem Sie einen stabilen Schlüssel für das Element angeben können. Weitere Informationen zu Schlüsseln (I7986d)
  • Die Funktion lazyPagingItems.getAsState(index) wird nicht mehr unterstützt. Verwenden Sie stattdessen lazyPagingItems[index]. (I086cb, b/187339372)

Version 1.0.0-alpha11

30. Juni 2021

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

Diverse Fehlerkorrekturen

  • „itemCount“ und der Item-Getter von „LazyPagingItems“ sind jetzt beobachtbar, sodass sie auch mit „LazyVerticalGrid“ verwendet werden können (Ie2446, b/171872064, b/168285687).

Compose-Kompatibilität

  • androidx.paging:paging-compose:1.0.0-alpha09 ist nur mit Compose-Version 1.0.0-beta07 und höher kompatibel.

Version 1.0.0-alpha08

24. Februar 2021

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

Aktualisiert, um die Integration mit Compose 1.0.0-beta01 zu ermöglichen.

Version 1.0.0-alpha07

10. Februar 2021

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

Aktualisiert, um die Integration mit Compose alpha12 zu ermöglichen.

Version 1.0.0-alpha06

28. Januar 2021

androidx.paging:paging-compose:1.0.0-alpha06 ist veröffentlicht. 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 ist veröffentlicht. Version 1.0.0-alpha05 enthält diese Commits.

Abhängigkeit von Compose 1.0.0-alpha10 hinzugefügt.

Version 1.0.0-alpha04

16. Dezember 2020

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

Diverse Fehlerkorrekturen

  • Die Convenience-Eigenschaften CombinedLoadStates.refresh, CombinedLoadStates.prepend und CombinedLoadStates.append werden jetzt erst von Loading zu NotLoading geändert, wenn sowohl der Mediator- als auch der Quellladezustand NotLoading sind. So wird sichergestellt, dass das Remote-Update angewendet wurde. (I65619)

Version 1.0.0-alpha03

2. Dezember 2020

androidx.paging:paging-compose:1.0.0-alpha03 ist 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 ist veröffentlicht. Version 1.0.0-alpha02 enthält diese Commits.

API-Änderungen

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

Version 1.0.0-alpha01

28. Oktober 2020

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

Neue Funktionen

Das Artefakt paging-compose ermöglicht die Integration der Paging-Bibliothek in 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 ist veröffentlicht. Version 3.0.1 enthält diese Commits.

Diverse Fehlerkorrekturen

  • Der Zugriff auf PagedList.dataSource über den von LivePagedList oder RxPagedList erzeugten Anfangswert löst nicht mehr fälschlicherweise eine IllegalStateException aus (I96707).

Version 3.0.0

Version 3.0.0

5. Mai 2021

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

Wichtige Funktionen von 3.0.0

Die meisten vorhandenen APIs aus Paging 2.x.x wurden zugunsten der neuen Paging 3-APIs eingestellt, um die folgenden Verbesserungen zu erzielen:

  • Erstklassige Unterstützung für Kotlin-Koroutinen und Flow
  • Unterstützung bei der Kündigung
  • Integrierte Signale für Ladestatus und Fehler
  • Funktion „Wiederholen + aktualisieren“
  • Alle drei DataSource-Unterklassen wurden in einer einheitlichen PagingSource-Klasse zusammengefasst
  • Benutzerdefinierte Seitentransformationen, einschließlich einer integrierten Funktion zum Hinzufügen von Trennzeichen
  • Kopf- und Fußzeilen für den Ladestatus

Version 3.0.0-rc01

21. April 2021

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

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem Paging manchmal No-Op-Differ-Ereignisse an RecyclerView gesendet hat, 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 ist veröffentlicht. Version 3.0.0-beta03 enthält diese Commits.

Diverse Fehlerkorrekturen

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

Version 3.0.0-beta02

10. März 2021

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

API-Änderungen

  • Rx3-Erweiterungen geben jetzt die @ExperimentalCoroutinesApi-Opt-In-Anforderung korrekt weiter. Bisher wurden sie in der @get-Methode markiert, die vom Kotlin-Compiler ignoriert wird, weil: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)

Fehlerkorrekturen

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

Version 3.0.0-beta01

10. Februar 2021

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

API-Änderungen

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

Diverse Fehlerkorrekturen

  • Es wurde ein Fehler behoben, bei dem IndexOutOfBoundsException: Inconsistency detected manchmal ausgelöst wurde, wenn v2-DataSource-APIs über Kompatibilitätspfade verwendet wurden.
  • Der Aufruf von isInvalid während der Initialisierung von DataSource bei Verwendung über Kompatibilitätspfade wird jetzt korrekt auf fetchDispatcher statt im Hauptthread gestartet. Dadurch wird ein IllegalStateException behoben, der durch den Datenbankzugriff im Hauptthread bei Verwendung der PagingSource-Implementierung von Room verursacht wurde.

Version 3.0.0-alpha13

27. Januar 2021

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

API-Änderungen

  • PagingSource.getRefreshKey ist nicht mehr optional, sondern jetzt eine abstrakte Funktion ohne Standardimplementierung. Migrierende Nutzer können entweder weiterhin die Standardimplementierung zurückgeben, die einfach null zurückgibt, aber getRefreshKey() sollte eine echte Implementierung haben, die einen Schlüssel basierend auf der aktuellen Scrollposition des Nutzers zurückgibt, der es Paging ermöglicht, weiterhin zentriert um den Darstellungsbereich über PagingState.anchorPosition zu laden, wenn möglich. (I4339a)
  • InvalidatingPagingSourceFactory ist jetzt eine endgültige Klasse (Ia3b0a).
  • Konfiguration des Verhaltens des Terminaltrennzeichens (Kopf-/Fußzeile) mit einem zusätzlichen optionalen SeparatorType-Parameter zulassen. Folgende Optionen sind verfügbar:
    • FULLY_COMPLETE: Vorhandenes Verhalten; warten, bis sowohl PagingSource als auch RemoteMediator „endOfPaginationReached“ markieren, bevor Terminal-Trennzeichen hinzugefügt werden. Wenn RemoteMediator nicht verwendet wird, wird der Remote-loadState ignoriert. Das ist vor allem dann nützlich, wenn Sie Abschnittstrennzeichen nur anzeigen möchten, wenn der Abschnitt vollständig geladen ist, einschließlich des Abrufs von einer Remote-Quelle, z.B. dem Netzwerk.
    • SOURCE_COMPLETE: Es wird nur darauf gewartet, dass „PagingSource“ „endOfPaginationReached“ markiert, auch wenn „RemoteMediator“ verwendet wird. So können Kopf- und Fußzeilen synchron mit dem ersten Laden präsentiert werden. Nutzer müssen dann nicht scrollen, um die Trennzeichen des Terminals zu sehen. (Ibe993, b/174700218)

Diverse Fehlerkorrekturen

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

Version 3.0.0-alpha12

13. Januar 2021

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

API-Änderungen

  • InvalidatingPagingSourceFactory ist keine abstrakte Klasse mehr, da sie nie abstrakte Methoden hatte. (I4a8c4)
  • Für Java-Nutzer wurde eine Überladung von .cachedIn() hinzugefügt, die ViewModel anstelle von Lifecycle oder CoroutineScope akzeptiert. (I97d81, b/175332619)
  • Java-Aufrufern erlauben, PagingData-Transformationsvorgänge asynchron zu verwenden, indem ein Executor in die Argumente des Transformationsoperators aufgenommen wird. Bei allen -Sync-Transformationsoperatoren wurde das Suffix -Sync entfernt. Kotlin-Koroutinen-Nutzer müssen die Mehrdeutigkeit auflösen, indem sie stattdessen die Erweiterungsfunktion aufrufen, die einen aussetzenden Block akzeptiert. Alle PagingData-Transformationsoperatoren wurden in Erweiterungen unter der statischen PagingDataTransforms-Klasse verschoben. Java-Nutzer müssen sie über statische Helfer aufrufen, z. B. PagingDataTransforms.map(pagingData, transform). Für Kotlin-Nutzer ist die Syntax dieselbe, aber Sie müssen die Funktion importieren. (If6885, b/172895919)

Diverse 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 ist veröffentlicht. Version 3.0.0-alpha11 enthält diese Commits.

Neue Funktionen

  • Unterstützung für gespeicherten Status für die folgenden grundlegenden Anwendungsfälle hinzugefügt (die vollständige Unterstützung, insbesondere im Fall mit mehreren Quellen, ist noch in Arbeit):
    • Der Ablauf wird im Cache gespeichert und die Anwendung wird nicht beendet (z. B. wird der Ablauf in einem Ansichtsmodell im Cache gespeichert und die Aktivität wird im Prozess neu erstellt).
    • Die Paging-Quelle wird gezählt, Platzhalter sind aktiviert und das Layout ist nicht versetzt.

API-Änderungen

  • PagingSource.getRefreshKey() ist jetzt eine stabile API (I22f6f, b/173530980)
  • PagingSource.invalidate ist keine offene Funktion mehr. Wenn Sie benachrichtigt werden möchten, wenn eine Entwertung erfolgt, sollten Sie die Methode „registerInvalidatedCallback“ aufrufen, anstatt „invalidate“ zu überschreiben. (I628d9, b/173029013, b/137971356)
  • Pager hat jetzt neben den regulären Konstruktoren einen einzelnen experimentellen Konstruktor, anstatt experimentelle APIs über die Opt-in-Annotation in die nicht experimentelle öffentliche API zu übertragen. (I9dc61, b/174531520)
  • Die Convenience-Eigenschaften CombinedLoadStates.refresh, CombinedLoadStates.prepend und CombinedLoadStates.append werden jetzt erst von Loading zu NotLoading geändert, wenn sowohl der Mediator- als auch der Quellladezustand NotLoading sind. So wird sichergestellt, dass das Remote-Update angewendet wurde. (I65619)
  • „LoadParams.pageSize“ wurde entfernt (es war bereits als veraltet markiert). Es wird empfohlen, LoadParams.loadSize in der PagingSource zu verwenden.

    LoadParams.loadSize entspricht immer PagingConfig.pageSize, mit Ausnahme des Aufrufs für den ersten Ladevorgang, bei dem es PagingConfig.initialLoadSize entspricht.

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

Diverse Fehlerkorrekturen

  • Ein Absturz aufgrund von IllegalStateException bei Verwendung von Trennzeichen mit PagingConfig.maxSize wurde behoben. (I0ed33, b/174787528)
  • Es wurde ein Fehler behoben, durch den der Ladestatus für PREPEND / APPEND nicht sofort nach dem ersten Laden auf NotLoading(endOfPaginationReached = true) aktualisiert wurde, wenn RemoteMediator festgelegt war (I8cf5a).
  • Ein Fehler wurde behoben, bei dem APIs auf der Präsentatorseite wie .snapshot() und .peek() bei ListUpdateCallback-Aktualisierungen die vorherige (veraltete) Liste zurückgegeben haben.
  • Ein Fehler wurde behoben, bei dem mit dem Operator „Separator“ keine Kopf- oder Fußzeilen hinzugefügt wurden, wenn er mit „RemoteMediator“ verwendet wurde.
  • Es wurde ein Fehler behoben, bei dem LoadState-Updates auf NotLoading für RemoteMediator im Status Loading hängen blieben.
  • Es wurde ein Fehler behoben, durch den die Paging2.0-Kompatibilitäts-API .asPagingSourceFactory() dazu führen konnte, dass die zugrunde liegende DataSource auf dem falschen CoroutineDispatcher initialisiert wurde. Dadurch werden ein Absturz und mögliche ANR-Fälle behoben, insbesondere bei Verwendung der aktuellen Implementierung von PagingSource in Room, die diesen Kompatibilitätspfad verwendet.

Version 3.0.0-alpha10

2. Dezember 2020

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

API-Änderungen

  • Die eingestellten APIs dataRefreshFlow und dataRefreshListener wurden entfernt, da sie mit loadStateFlow- und Listener-Updates redundant sind. Für die Migration ist das Äquivalent zu „loadStateFlow“:

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

    (Ib5570, b/173530908)

Diverse 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, weil die erste Seite leer ist oder stark gefiltert wurde, wird das Paging nicht mehr daran gehindert, PREPEND- oder APPEND-Ladevorgänge zu starten. (I3e702, b/168169730)
  • Ein Problem wurde behoben, bei dem getRefreshKey bei nachfolgenden Generationen von PagingSource nicht aufgerufen wird, wenn schnell ungültig gemacht wird. (I45460, b/170027530)

Externer Beitrag

  • Eine 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 aus der .insertSeparators()-Transformation werden bei Verwendung von RemoteMediator möglicherweise nicht sofort angezeigt b/172254056
  • Die Verwendung von RemoteMediator kann dazu führen, dass Remote-LoadState hängen bleibt, wenn die Entwertung und PagingSource.load(LoadParams.Refresh(...)) abgeschlossen sind, bevor RemoteMediator.load() zurückgegeben wird. b/173717820

Version 3.0.0-alpha09

11. November 2020

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

API-Änderungen

  • dataRefreshFlow-/Listener-Methoden vollständig mit einer replaceWith-Klausel einstellen. (I6e2dd)

Diverse Fehlerkorrekturen

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

API-Änderungen

  • Die Kotlin-/Java-Varianten von DataSource.InvalidatedCallback wurden kombiniert, indem SAM-Konvertierungen in Kotlin über das funktionale Interface aktiviert wurden (verfügbar in Kotlin 1.4). Außerdem wurde ein Fehler behoben, bei dem die Kotlin-Variante von „invalidate“-Callbacks nach der Transformation durch .map oder .mapByPage nicht aufgerufen wurde. (I1f244, b/165313046)

Diverse Fehlerkorrekturen

  • Die Interaktion von Paging mit ViewPager wurde erheblich verbessert. Insbesondere wird durch Paging ein RemoteMediator#load-Aufruf nicht mehr aufgrund einer Seitenungültigkeit abgebrochen. Außerdem wird keine Anfrage zum Anhängen/Voranstellen von Daten mehr gesendet, 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).
  • Ein Fehler wurde behoben, bei dem .withLoadState*-ConcatAdapter-Hilfsprogramme aufgrund einer Benachrichtigung von RecyclerView aus dem Hintergrundthread abstürzten (I18bb5, b/170988309).
  • Ein Fehler wurde behoben, bei dem das Laden einer sehr kleinen, nicht leeren Seite manchmal verhinderte, dass Prefetch-Vorgänge richtig ausgelöst wurden.Iffda3 b/169259468

Version 3.0.0-alpha07

1. Oktober 2020

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

API-Änderungen

  • Asynchrone PagingData-Operatoren, die auf Guava basieren, akzeptieren jetzt einen Executor als Parameter, um den Ausführungskontext zu steuern. (Id4372)

Diverse Fehlerkorrekturen

  • Es wurde eine IndexOutOfBounds-Ausnahme behoben, die in RemoteMediator aufgrund einer Race-Bedingung ausgelöst wurde. (I00b7f, b/165821814)
  • Eine Race-Bedingung bei der Konvertierung von DataSource in PagingSource wurde behoben, die dazu führen konnte, dass die resultierende PagingSource die Entwertungssignale von DataSource ignoriert.
  • Es wurde ein Problem in der Logik zum Abrufen von Seiten behoben, das manchmal dazu führte, dass neue Generationen von PagingSource erst nach dem Aufruf von PagingDataAdapter.refresh() abgerufen wurden.
  • Ein Problem wurde behoben, durch das die Scrollposition manchmal verloren ging, wenn eine in eine PagingSource umgewandelte DataSource (z. B. die von Room erstellte) in Verbindung mit RemoteMediator verwendet wurde.

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 ist veröffentlicht. Version 3.0.0-alpha06 enthält diese Commits.

API-Änderungen

  • UnsupportedOperationException mit einer klareren Meldung, dass stabile IDs nicht unterstützt werden, wird jetzt immer ausgegeben, wenn PagingDataAdapter.setHasStableIds aufgerufen wird. (Ib3890, b/158801427)

Fehlerkorrekturen

  • Mit „insertSeparators“ werden leere Seiten nicht mehr herausgefiltert. Der Abstand für das Vorabrufen wird vom Präsentator auch dann berücksichtigt, wenn viele leere Seiten eingefügt werden. (I9cff6, b/162538908)

Version 3.0.0-alpha05

19. August 2020

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

Fehlerkorrekturen

  • Beim Paging werden Seiten jetzt korrekt vorab abgerufen, auch wenn die präsentierten Daten stark gefiltert sind.
  • Wenn LoadResult.Error an einen wiederholten Ladevorgang zurückgegeben wird, werden Elementzugriffe nicht mehr fälschlicherweise neu ausgelöst.

Externer Beitrag

  • Vielen Dank an Clara F für die Hilfe beim Bereinigen einiger Tests. (549612)

Version 3.0.0-alpha04

5. August 2020

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

API-Änderungen

  • Die peek() API wurde zu AsyncPagingDataDiffer und PagingDataAdapter hinzugefügt, um den Zugriff auf präsentierte Daten ohne das Laden von Triggerseiten zu ermöglichen. (I38898, b/159104197)
  • Die snapshot() API wurde PagingDataAdapter und AsyncPagingDataDiffer hinzugefügt, damit die präsentierten Elemente abgerufen werden können, ohne dass ein Seitenabruf ausgelöst wird. (I566b6, b/159104197)
  • Es wurde ein PagingData.from(List<T>)-Konstruktor hinzugefügt, mit dem statische Listen präsentiert werden können. Diese können mit dem allgemeinen PagingData-Ablauf kombiniert werden, um statische Listen in bestimmten Status anzuzeigen, z. B. bevor der erste REFRESH abgeschlossen ist oder einfach zum Testen von Transformationen. (Id134d)
  • Die APIs für den dataRefresh-Flow / -Listener werden eingestellt, da sie den Status der präsentierten Elemente bei REFRESH offenlegen sollten. Durch Verbesserungen beim Timing des loadState-Flow / -Listener-Callbacks und der itemCount-Eigenschaft sind sie jedoch überflüssig. (Ia19f3)
  • RxJava3-Kompatibilitäts-Wrapper für PagingSource und RemoteMediator hinzugefügt (I49ef3, b/161480176)

Fehlerkorrekturen

  • PositionalDataSource wurde über die toPagingSourceFactory-Hilfsfunktion in PagingSource konvertiert. PagingSource, das von Room generiert wurde, wird jetzt korrekt markiert, um das Springen zu unterstützen. (I3e84c, b/162161201)
  • Es wurde ein Fehler behoben, bei dem die Verwendung der synchronen Variante von „submitData“ manchmal zu einer Race-Bedingung führte, die eine ClosedSendChannelException verursachte (I4d702, b/160192222).

Externer Beitrag

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

Version 3.0.0-alpha03

22. Juli 2020

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

API-Änderungen

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

Diverse Fehlerkorrekturen

  • Bei Room- und PositionalDataSource-PagingSources wird jetzt ein führendes Trennzeichen als Teil der ersten Seite angezeigt, sodass der Nutzer nicht scrollen muss, um es zu sehen. (I6f747, b/160257628)
  • Der Zugriff auf Elemente in Platzhaltern löst jetzt PagingSource-Ladevorgänge aus, bis eine Seite zurückgegeben wird, die den angeforderten Index erfüllt, nachdem sie von PagingData.filter() transformiert wurde (I95625, b/158763195).
  • Fehler behoben, bei dem das Scrollen nach dem Zurückgeben eines Fehlers durch PagingSource manchmal verhindern konnte, dass PagingDataAdapter.retry() den Vorgang wiederholt. (I1084f, b/160194384)
  • Behebt ein Problem, bei dem Elementzugriffe nach dem Löschen einer Seite möglicherweise keine Seiten laden, obwohl der Elementzugriff innerhalb von prefetchDistance lag (Ie95ae, b/160038730)
  • Wenn „PagingConfig.maxSize“ festgelegt wird, 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 ist veröffentlicht. Version 3.0.0-alpha02 enthält diese Commits.

API-Änderungen

  • Überladungen für den Konstruktor von PagingConfig mit gängigen Standardwerten hinzugefügt (I39c50, b/158576040)
  • Überladungen für Konstruktoren von PagingDataAdapter und AsyncPagingDataDiffer mit allgemeinen Standardwerten hinzugefügt (Ie91f5)
  • Die Adapter-APIs dataRefreshFlow und dataRefreshListener übergeben jetzt einen booleschen Wert, um anzugeben, ob ein PagingData leer ist (I6e37e, b/159054196).
  • RxJava- und Guava-APIs für RemoteMediator hinzugefügt: RxRemoteMediator und ListenableFutureRemoteMediator
  • Der PagingState wurden Hilfsprogramme für den allgemeinen Elementzugriff wie isEmpty() und firstItemOrNull() hinzugefügt. (I3b5b6, b/158892717)

Diverse Fehlerkorrekturen

  • Pager prüft jetzt in der Factory auf die Wiederverwendung von PagingSource, um eine versehentliche Wiederverwendung ungültiger PagingSources zu verhindern, die einen unklaren Fehler (I99809, b/158486430) verursacht haben.
  • Fehler bei RemoteMediator REFRESH verhindern nicht mehr das Laden von PagingSource (I38b1b, b/158892717)
  • Die nicht-suspendierende Version von submitData verursacht keinen Absturz mehr, wenn sie nach der suspendierenden Version von submitData aufgerufen wird und gleichzeitig mehrere PagingData erfasst werden. (I26358, b/158048877)
  • Die Ausnahme „cannot collect twice from pager“ (kann nicht zweimal vom Pager erfassen), die nach einer Konfigurationsänderung auftreten konnte, wurde behoben (I58bcc, b/158784811).

Version 3.0.0-alpha01

10. Juni 2020

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

Die Paging-Bibliothek wurde auf Version 3.0 aktualisiert, um mehrere wichtige neue Funktionen zu ermöglichen.

Neue Funktionen in Version 3.0

Bekannte Probleme

  • Paging 3-JavaDocs sind 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 ist veröffentlicht. Version 2.1.2 enthält diese Commits im Vergleich zu 2.1.0.

Diverse Fehlerkorrekturen

  • Problem mit IndexOutOfBoundsException behoben, das in seltenen Fällen beim Konvertieren einer Position während der Entwertung auftrat.

Release-Problem

  • Die Paging-Version 2.1.1 wurde fälschlicherweise über einen falsch konfigurierten Branch veröffentlicht. Dadurch wurden teilweise implementierte APIs und Funktionen verfügbar gemacht, die für eine zukünftige Version geplant sind.

  • Die Paging-Version 2.1.2 enthält den Load-Centering-Fix, der ursprünglich in Version 2.1.1 veröffentlicht wurde. Dieses Mal wurde er jedoch korrekt auf der Version 2.1.0 zusammengeführt. Wenn Sie derzeit Version 2.1.1 verwenden, wird dringend empfohlen, ein Upgrade auf diese Version durchzuführen.

Version 2.1.1

Version 2.1.1

18. Dezember 2019

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

Diverse Fehlerkorrekturen

  • Zusammenhängende anfängliche Ladevorgänge von 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 veröffentlicht.

Version 2.1.0-rc01

6. Dezember 2018

Paging 2.1.0-rc01 wurde ohne Änderungen gegenüber 2.1.0-beta01 veröffentlicht.

Version 2.1.0-beta01

1. November 2018

Paging 2.1.0-beta01 wurde ohne Änderungen gegenüber 2.1.0-alpha01 veröffentlicht.

Version 2.1.0-alpha01

12. Oktober 2018

Die Paging-Bibliothek 2.1.0-alpha01 bietet zwei wichtige Neuerungen: das Löschen von Seiten und KTX-Erweiterungsbibliotheken für jedes Artefakt. Außerdem gibt es mehrere API-Änderungen und Fehlerkorrekturen.

API-Änderungen

  • PagedList.Config.Builder.setMaxSize() wurde hinzugefügt, um die Anzahl der geladenen Elemente im Arbeitsspeicher zu begrenzen.
  • androidx.paging.Config() wurde als Kotlin-Alternative für PagedList.Config.Builder hinzugefügt.
  • androidx.paging.PagedList() wurde als Kotlin-Alternative für PagedList.Builder hinzugefügt
  • DataSourceFactory.toLiveData() wurde als Kotlin-Alternative für LivePagedListBuilder hinzugefügt
  • DataSourceFactory.toObservable() und toFlowable() wurden als Kotlin-Alternativen für RxPagedListBuilder hinzugefügt.
  • AsyncPagedListDiffer.addPagedListListener() wurde hinzugefügt, um zu überwachen, wann „PagedList“ ausgetauscht wird. b/111698609
  • PagedListAdapter.onCurrentListChanged()-Variante hinzugefügt, die die alte und die neue Liste übergibt. Die vorherige Variante wurde verworfen.
  • Es wurden PagedListAdapter/AsyncPagedListDiffer.submitList()-Varianten hinzugefügt, die einen zusätzlichen Callback verwenden, der ausgelöst wird, wenn die PagedList nach dem Abgleich angezeigt wird. Dadurch können Sie einen PagedList-Austausch mit anderen UI-Updates synchronisieren. b/73781068
  • PagedList.getLoadedCount() hinzugefügt, um dich darüber zu informieren, wie viele Elemente sich im Speicher befinden. Der Rückgabewert ist immer gleich .size(), wenn Platzhalter deaktiviert sind.

Diverse Fehlerkorrekturen

  • Race-Bedingung beim Diffing behoben, wenn Listen wiederverwendet werden b/111591017
  • PagedList.loadAround() gibt jetzt IndexOutOfBoundsException aus, wenn der Index ungültig ist. Zuvor konnte die App mit einer unklaren anderen Ausnahme abstürzen.
  • Es wurde ein Problem behoben, bei dem eine extrem kleine anfängliche Ladegröße zusammen mit unveränderten Daten dazu führte, dass keine weiteren Daten geladen wurden. b/113122599

Version 2.0.0

Version 2.0.0

1. Oktober 2018

Paging 2.0.0 wurde mit einer einzelnen Fehlerkorrektur veröffentlicht.

Diverse Fehlerkorrekturen

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

Version 2.0.0-beta01

2. Juli 2018

Fehlerkorrekturen

  • In einigen Fällen, in denen Inhalte vorangestellt wurden, verschwanden diese (Platzhalter deaktiviert, PositionalDataSource) b/80149146
  • (Bereits in 1.0.1 veröffentlicht) Es wurden Abstürze behoben, bei denen PagedListAdapter und AsyncPagedListDiffer keine Bewegungsereignisse signalisiert haben. b/110711937

Abhängigkeiten vor AndroidX

Fügen Sie für die folgenden Pre-AndroidX-Versionen von Paging diese Abhängigkeiten hinzu:

dependencies {
    def paging_version = "1.0.0"

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

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

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

Version 1.0.1

Version 1.0.1

26. Juni 2018

Die Paginierung 1.0.1 wird mit einem einzelnen Fehlerkorrektur in runtime veröffentlicht. Wir empfehlen dringend, 1.0.1 zu verwenden, um die Stabilität zu gewährleisten. Paging 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 keine Bewegungsereignisse signalisieren konnten. b/110711937

RxJava2-Version 1.0.0

RxJava2 Version 1.0.0-rc1

16. Mai 2018

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

Version 1.0.0

Version 1.0.0-rc1

19. April 2018 Releasekandidat für Paging

Es sind keine weiteren bekannten Probleme oder neuen Funktionen für den Paging-Release 1.0.0 geplant. Bitte aktualisieren Sie Ihre Projekte, um 1.0.0-rc1 zu verwenden, und helfen Sie uns, es zu testen, damit wir eine solide 1.0.0-Version bereitstellen können.

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

Version 1.0.0-beta1

5. April 2018

Die Paging-Funktion wird kurzzeitig in der Betaphase sein, bevor sie zum Release-Kandidaten wird. Wir planen keine weiteren API-Änderungen für Paging 1.0. Die Hürde für API-Änderungen ist sehr hoch.

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

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

Kotlin

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

Java

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

Neue Funktionen

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

API-Änderungen

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

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

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

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

Fehlerkorrekturen

  • LivePagedListBuilder löst die erste PagedList-Last auf dem angegebenen Executor aus, anstatt auf dem Threadpool für die E/A-Architekturkomponenten.

  • Das Verhalten beim Ungültigmachen in internen DataSource-Wrappern wurde korrigiert (wird zur Implementierung von DataSource.map sowie zum Laden von PositionalDataSource mit deaktivierten Platzhaltern verwendet) b/77237534

Version 1.0.0-alpha7

21. März 2018

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

Paging alpha7 ist die letzte Version vor der Beta-Phase.

API-Änderungen

  • DataSource.LoadParams-Objekte haben jetzt einen öffentlichen Konstruktor und DataSource.LoadCallback-Objekte sind jetzt abstrakt. Dadurch kann ein DataSource-Objekt umschlossen oder ein DataSource-Objekt direkt mit einem simulierten Callback getestet werden. b/72600421
  • Mappers für DataSource und DataSource.Factory
    • Mit map(Function<IN,OUT>) können Sie Ergebnisse, die von einem DataSource geladen wurden, transformieren, umschließen oder dekorieren.
    • mapByPage(<List<IN>,List<OUT>>) ermöglicht dasselbe für die Batchverarbeitung (z.B. wenn für Elemente, die aus SQL geladen werden, zusätzlich eine separate Datenbank abgefragt werden muss, kann dies als Batch erfolgen).
  • PagedList#getDataSource() wird als praktische Methode hinzugefügt. b/72611341
  • Alle veralteten Klassen wurden aus der API entfernt, einschließlich der Überreste des recyclerview.extensions-Pakets und der LivePagedListProvider.
  • DataSource.Factory wird von einer Schnittstelle in eine abstrakte Klasse geändert, um Kartenfunktionen zu ermöglichen.

Fehlerkorrekturen

  • Builder wurden in „final“ geändert. b/70848565
  • Die Implementierung von Room DataSource wurde korrigiert, um Abfragen über mehrere Tabellen zu verarbeiten. Diese Korrektur ist in Room 1.1.0-beta1 enthalten (siehe oben).
  • Ein Fehler wurde behoben, bei dem BoundaryCallback.onItemAtEndLoaded nicht für PositionalDataSource aufgerufen wurde, wenn Platzhalter aktiviert waren und die Gesamtgröße ein genaues Vielfaches der Seitengröße war.

Version 1.0.0-alpha5

22. Januar 2018

Fehlerkorrekturen

  • Fehler beim Seitenaufbau behoben, wenn Platzhalter deaktiviert sind b/70573345
  • Zusätzliches Logging zur Fehlerbehebung des IllegalArgumentException-Fehlers b/70360195 (und spekulative Korrektur auf Room-Seite)
  • Korrekturen am Javadoc-Beispielcode b/70411933, b/71467637