Paging

Biblioteka stron ułatwia stopniowe i płynne wczytywanie danych w RecyclerView aplikacji.

Ta tabela zawiera wszystkie artefakty w grupie androidx.paging.

Artefakt Wersja stabilna Wersja kandydująca Wersja Beta Wersja alfa
paging-* 3.3.4 - - -
paging-compose 3.3.4 - - -
Ostatnia aktualizacja tej biblioteki miała miejsce 13 listopada 2024 r.

Deklarowanie zależności

Aby dodać zależność od Paging, musisz dodać repozytorium Google Maven do projektu. Więcej informacji znajdziesz w repozytorium Maven firmy Google.

Dodaj zależności dla artefaktów, których potrzebujesz, w pliku build.gradle aplikacji lub modułu:

Odlotowe

dependencies {
  def paging_version = "3.3.2"

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

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

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

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

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

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

Kotlin

dependencies {
  val paging_version = "3.3.2"

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

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

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

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

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

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

Informacje o używaniu rozszerzeń Kotlina znajdziesz w dokumentacji ktx.

Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.

Opinia

Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli zauważysz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nowy problem, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz dodać swój głos do istniejącego problemu, klikając przycisk z gwiazdką.

Tworzenie nowego zgłoszenia

Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.

Wersja 3.3

Wersja 3.3.4

13 listopada 2024 r.

androidx.paging:paging-*:3.3.4 został zwolniony. Wersja 3.3.4 zawiera te komitowane zmiany.

Poprawki błędów

  • Testy jednostek Androida korzystające z Paging 3.3 lub nowszej wersji nie będą już generować błędów takich jak Method isLoggable in android.util.Log not mocked. (Ia9400, b/331684448)

Wersja 3.3.2

7 sierpnia 2024 r.

androidx.paging:paging-*:3.3.2 został zwolniony. Wersja 3.3.2 zawiera te komitowane zmiany.

Nowe funkcje

  • Do wersji paging-commonpaging-testing dodano nowe cele Kotlin Multiplatform: watchos, tvoslinuxArm64 (90c9768), (53e0eca)

Wersja 3.3.1

24 lipca 2024 r.

androidx.paging:paging-*:3.3.1 został zwolniony. Wersja 3.3.1 zawiera te komity.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że AsyncPagingDataDiffer lub interfejsy API utworzone na jego podstawie, np. PagingDataAdapter używany z RecyclerView, nie mogły wywołać kolejnych załadowań po zaktualizowaniu źródła danych podczas przewijania. (I60ca5, b/352586078)
  • Usunięto błąd powodowany usuwaniem elementów z źródła danych podczas przewijania RecyclerView za pomocą PagingDataAdapter lub AsyncPagingDataDiffer. (I8c65a, b/347649763)

Wersja 3.3.0

14 maja 2024 r.

androidx.paging:paging-*:3.3.0 został zwolniony. Wersja 3.3.0 zawiera te komity.

Ważne zmiany od wersji 3.2.0

  • Zajęcia PagingDataPresenter są teraz dostępne publicznie. Prezentacje na wielu platformach można teraz tworzyć na podstawie interfejsu PagingDataPresenter, zamiast używać wewnętrznych interfejsów API do przewijania lub interfejsu AsyncPagingDataDiffer.paging-runtime
  • Dodaliśmy nowe metody pomocnicze LoadStatesCombinedLoadStates w klasach hasErrorisIdle, aby sprawdzać, czy obiekt LoadStates jest w stanie Błąd czy NotLoading. Dodano też nową metodę rozszerzenia awaitNotLoading() w Kotlinie, która czeka, aż wczytywanie osiągnie stan NotLoading lub błąd.Flow<CombinedLoadStates>
  • PagingData.empty() domyślnie wysyła stany NotLoading, chyba że do jego konstruktora zostaną przekazane niestandardowe wartości LoadStates. Jest to inne zachowanie niż obecne, w którym nie wysyła się LoadStates, gdy jest ono przesłane do PagingDataAdapter, lub wysyła się stany wczytywania, gdy są one zebrane jako LazyPagingItems. Gdy dane są zbierane jako LazyPagingItems, pusta lista będzie wyświetlana natychmiast po początkowym skomponowaniu.

Zgodność Kotlin Multiplatform

Strona Paging teraz dostarcza elementy zgodne z Kotlin Multiplatform, głównie dzięki pracy na poziomie upstream z projektu multiplatform-paging w CashApp.

  • paging-common przeniósł wszystkie interfejsy API Paging 3 do common i jest teraz zgodny z jvm i iOS, a nie tylko z Androidem.
  • paging-testing przeniósł swój kod do common i jest teraz zgodny z jvm i iOS, a nie tylko z Androidem.
  • paging-compose przeniósł swój kod do common i wysyła artefakt Androida, który jest zgodny z obsługą wielu platform w androidx.compose.
  • paging-runtime, paging-guava, paging-rxjava2 i paging-rxjava3 pozostaną dostępne tylko na Androida.

Wersja 3.3.0-rc01

1 maja 2024 r.

androidx.paging:paging-*:3.3.0-rc01 jest wydana bez zmian w Paging 3.3.0-beta01. Wersja 3.3.0-rc01 zawiera te zatwierdzenia.

Wersja 3.3.0-beta01

3 kwietnia 2024 r.

androidx.paging:paging-*:3.3.0-beta01 jest publikowana bez istotnych zmian. Wersja 3.3.0-beta01 zawiera te komity.

Wersja 3.3.0-alpha05

20 marca 2024 r.

androidx.paging:paging-*:3.3.0-alpha05 został zwolniony. Wersja 3.3.0-alpha05 zawiera te komity.

Zmiany w interfejsie API

  • Strona z przekierowaniami używa teraz adnotacji @MainThread AndroidX dla wspólnego kodu. (I78f0d, b/327682438)

Wersja 3.3.0-alpha04

6 marca 2024 roku

androidx.paging:paging-*:3.3.0-alpha04 został zwolniony. Wersja 3.3.0-alpha04 zawiera te komisy.

Poprawki błędów

  • Naprawiono drobne błędy w dokumentacji związane z dodaniem obsługi Kotlina na wielu platformach. (aosp/2950785)

Wersja 3.3.0-alpha03

7 lutego 2024 r.

androidx.paging:paging-*:3.3.0-alpha03 został zwolniony. Wersja 3.3.0-alpha03 zawiera te commity.

Nowe funkcje

  • Zajęcia PagingDataPresenter są teraz dostępne publicznie. Prezentacje na wielu platformach można teraz tworzyć na podstawie interfejsu PagingDataPresenter, zamiast używać wewnętrznych interfejsów API do przewijania lub interfejsu AsyncPagingDataDiffer.paging-runtime (Id1f74, b/315214786)
  • Dodano nowe metody pomocnicze LoadStatesCombinedLoadStates, które sprawdzają, czy LoadStates jest w stanie Błąd czy NotLoading. Dodano też nowy interfejs API, który czeka na LoadStateFlow, dopóki wczytywanie nie osiągnie stanu NotLoading lub błędu. (Id6c67)

Zmiany w zachowaniu

  • PagingData.empty() domyślnie wysyła stany NotLoading, chyba że do jego konstruktora zostaną przekazane niestandardowe wartości LoadStates. Jest to inne zachowanie niż obecne, w którym nie wysyła się LoadStates, gdy jest ono przesłane do PagingDataAdapter, lub wysyła się stany wczytywania, gdy są one zebrane jako LazyPagingItems. Gdy dane są zbierane jako LazyPagingItems, pusta lista będzie wyświetlana natychmiast po początkowym skomponowaniu. (I4d11d, b/301833847)

Wersja 3.3.0-alpha02

20 września 2023 r.

androidx.paging:paging-*:3.3.0-alpha02 został zwolniony. Wersja 3.3.0-alpha02 zawiera te commity.

Zgodność Kotlin Multiplatform

Strona Paging teraz dostarcza elementy zgodne z Kotlin Multiplatform, głównie dzięki pracy na poziomie upstream z projektu multiplatform-paging w CashApp. Pozwoli nam to uniknąć rozbieżności między 2 repozytoriami i utrzymać ich kompatybilność.

  • paging-common przeniósł wszystkie interfejsy API Paging 3 do common i jest teraz zgodny z jvm i iOS, a nie tylko z Androidem.
  • paging-testing przeniósł swój kod do common i jest teraz zgodny z jvm i iOS, a nie tylko z Androidem.
  • paging-compose przeniósł swój kod do common i wysyła artefakt Androida, który jest zgodny z obsługą wielu platform w androidx.compose.
  • paging-runtime, paging-guava, paging-rxjava2 i paging-rxjava3 pozostaną dostępne tylko na Androida.

Zmiany w interfejsie API

  • Publiczny interfejs Logger, który był przeznaczony tylko do użytku wewnętrznego, został wycofany (I16e95, b/288623117).

Darowizna zewnętrzna

Wersja 3.3.0-alpha01

20 września 2023 r.

  • To pierwsza wieloplatformowa wersja bibliotek androidx.paging. Ta wersja zawiera tylko elementy *-jvm*-android. W przypadku wersji macOS, iOS i Linux użyj 3.3.0-alpha02.

Wersja 3.2

Wersja 3.2.1

6 września 2023 r.

androidx.paging:paging-*:3.2.1 został zwolniony. Wersja 3.2.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował zawieszanie się interfejsu API asSnapshot() artefaktu testowania strony po przekazaniu przepływu utworzonego za pomocą PagingData.from(List), ponieważ asSnapshot() nie miał żadnych informacji o zakończeniu wczytywania (w przeciwieństwie do przeciążenia PagingData.from(List, LoadStates)). To obejście działa tylko w przypadku przepływów, które można ukończyć (np. flowOf(PagingData.from(...))). W przypadku przepływów, których nie można ukończyć (np. MutableStateFlow, użyj przeciążenia PagingData.from, które zapewnia LoadStates. (I502c3)
  • Paging Compose używa teraz wewnętrznie funkcji AndroidUiDispatcher.Main, aby mieć pewność, że nowe dane będą dostępne w tym samym interwale, w którym zakończy się wczytywanie. (Ia55af)

Wersja 3.2.0

26 lipca 2023 r.

androidx.paging:paging-*:3.2.0 został zwolniony. Wersja 3.2.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 3.1.0

  • Interfejs API Paging Compose osiągnął stabilność i został scalony z resztą pakietu Paging, gdzie jego wersja jest teraz zgodna z innymi artefaktami Paging. Zmiany od wersji 3.1.0:
    • Obsługa podglądu listy fałszywych danych przez utworzenie PagingData.from(fakeData) i opakowanie tego PagingDataMutableStateFlow (np. MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Przekaż ten przepływ do komponentów @Preview jako odbiornik dla collectAsLazyPagingItems() na potrzeby podglądu.
    • Obsługa wszystkich układów opóźnionych, takich jak LazyVerticalGridHorizontalPager, a także niestandardowych komponentów opóźnionych z bibliotek Wear i TV. Udało się to dzięki nowym metodom rozszerzeń LazyPagingItems na niższym poziomie itemKeyitemContentType, które ułatwiają implementację parametrów keycontentType w standardowych interfejsach API items, które są już dostępne w przypadku LazyColumnLazyVerticalGrid, a także ich odpowiedników w interfejsach API, takich jak HorizontalPager.
    • Atrybuty items(lazyPagingItems)itemsIndexed(lazyPagingItems), które obsługują tylko LazyListScope, zostały wycofane.
  • Nowy artefakt paging-testing, który udostępnia interfejsy API przeznaczone do testowania jednostkowego każdej warstwy aplikacji i jej integracji z Pagingiem. Obejmuje ona na przykład:
    • klasę TestPager, która umożliwia sprawdzanie zachowania własnej implementacji PagingSource niezależnie od Pagera i prawdziwego interfejsu użytkownika.
    • ​​Interfejsy API asPagingSourceFactory do przekształcania obiektów Flow<List<Value>> lub statycznych List<Value> w obiekty PagingSourceFactory, które można przekazywać do Pagera w testach
    • asSnapshot Rozszerzenie Kotlina w Flow<PagingData<Value>>, które przekształca Flow<PagingData<Value>> w bezpośrednie List<Value>. asSnapshot lambda umożliwia naśladowanie interfejsu aplikacji za pomocą interfejsów API, takich jak scrollTo lub appendScrollWhile, dzięki czemu możesz w dowolnym momencie sprawdzić, czy zrzut danych jest prawidłowy.
  • Dodano dzienniki domyślne, aby udostępnić informacje debugowania na poziomie strony na 2 poziomach: VERBOSEDEBUG. Logi można włączyć za pomocą polecenia adb shell setprop log.tag.Paging [DEBUG|VERBOSE]. Dotyczy to zarówno strony z widokami, jak i strony z edytorem.
  • Dodano konstruktory PagingDataAdapterAsyncPagingDataDiffer, które przyjmują CoroutineContext zamiast CoroutineDispatcher.
  • Dodano nowy interfejs funkcyjny PagingSourceFactory, który zapewnia bardziej wyraźną powierzchnię interfejsu API niż poprzednie () -> PagingSourcefunkcje lambda. Fabryki tej można używać do tworzenia instancji Pagera.

Wersja 3.2.0-rc01

21 czerwca 2023 r.

androidx.paging:paging-*:3.2.0-rc01 został zwolniony. Wersja 3.2.0-rc01 zawiera te zatwierdzenia.

Darowizna zewnętrzna

Wersja 3.2.0-beta01

7 czerwca 2023 r.

androidx.paging:paging-*:3.2.0-beta01 został zwolniony. Wersja 3.2.0-beta01 zawiera te commity.

Strona Nowy post

  • Interfejs API Compose na stronach osiągnął oficjalnie stabilność. W związku z tym wersja została zaktualizowana z 1.0.0-alpha20 na taką, która jest zgodna z wersją wszystkich innych artefaktów strony.

Zmiany w interfejsie API

  • Z interfejsu PagingCompose usunięto wycofane interfejsy API items(LazyPagingItems)itemsIndexed(LazyPagingItems). Przykłady interfejsów API, które je zastępują, znajdziesz w informacjach o wersji Paging Compose 1.0.0-alpha20. (I9626e)

Wersja 3.2.0-alpha06

24 maja 2023 r.

androidx.paging:paging-*:3.2.0-alpha06 został zwolniony. Wersja 3.2.0-alpha06 zawiera te commity.

Nowe funkcje

  • Dodaliśmy nowy interfejs funkcyjny PagingSourceFactory, który zapewnia bardziej wyraźną powierzchnię interfejsu API niż istniejące funkcje lambda () -> PagingSource. Fabryki można używać do tworzenia instancji klasy Pager. (I33165, b/280655188)
  • Dodano nowy interfejs API paging-testing List<Value>.asPagingSourceFactory(), który umożliwia pobieranie PagingSourceFactory tylko z niezmiennej listy danych. Do testowania z wieloma generacjami danych statycznych nadal należy używać dotychczasowego rozszerzenia Flow<List<Value>>. (Id34d1, b/280655188)

Zmiany w interfejsie API

  • Wszystkie publiczne interfejsy API w testach przewijania są teraz opatrzone adnotacją @VisibleForTesting, aby zapewnić, że są one używane tylko w testach. (I7db6e)
  • Interfejs API asSnapshot nie wymaga już przekazywania parametru CoroutineScope. Teraz domyślnie używa kontekstu odziedziczonego z zakresu nadrzędnego. (Id0a78, b/282240990)
  • Zmieniono kolejność parametrów konstruktora TestPager, aby była ona intuicyjnie zgodna z kolejnością parametrów rzeczywistego konstruktora Pager (I6185a).
  • Przejście z typu lambda () -> PagingSource<Key, Value> na typ PagingSourceFactory<Key, Value> w przypadku testowania stronowania. (I4a950, b/280655188)

Zmiany w zachowaniu

  • Do wykonywania testów asSnapshot nie jest już wymagany główny moduł rozsyłający. Ustawienie go nie powoduje już żadnych zmian w zachowaniu testu. (Ie56ea)

Wersja 3.2.0-alpha05

3 maja 2023 r.

androidx.paging:paging-*:3.2.0-alpha05 został zwolniony. Wersja 3.2.0-alpha05 zawiera te commity.

Zmiany w interfejsie API

  • Interfejs API testowania stron asSnapshot ma teraz domyślnie parametr loadOperations ustawiony na pustą lambda. Umożliwia to wywołanie funkcji asSnapshot bez przekazywania żadnych operacji wczytywania w celu pobrania danych z pierwotnego wczytania odświeżenia. (Ied354, b/277233770)

Ulepszenia dokumentacji

  • Zaktualizowaliśmy dokumentację dotyczącą funkcji asPagingSourceFactory(), aby wyjaśnić, że jest to metoda rozszerzenia funkcji Flow, która zwraca fabrykę do wielokrotnego użytku do generowania instancji PagingSource. (I5ff4f, I705b5)
  • Zaktualizowaliśmy dokumentację konstruktora LoadResult.Page, aby wyjaśnić, że aby umożliwić przeskakiwanie, należy zastąpić wartości itemsBeforeitemsAfter. (Ied354)

Wkład zewnętrzny

Wersja 3.2.0-alpha04

8 lutego 2023 r.

androidx.paging:paging-*:3.2.0-alpha04 został zwolniony. Wersja 3.2.0-alpha04 zawiera te commity.

Testowanie przewijania

  • Element paging-testing zawiera teraz metodę asPagingSourceFactory, która umożliwia tworzenie obiektu pagingSourceFactory z obiektu Flow<List<Value>> i przekazywanie go do pager. Każdy element List<Value>> emitowany przez przepływ danych reprezentuje generowanie danych strony. Ułatwia to testowanie stronowania na przykład w przypadku przekształceń PagingData, ponieważ pozwala udawać źródło danych, z którego Pager ma pobierać dane. (I6f230, b/235528239)
  • Element paging-testing został rozszerzony o nowe interfejsy API, które umożliwiają sprawdzanie poprawności danych zawartych w elementach Flow<PagingData<T>>. Można go na przykład użyć do potwierdzenia danych wyjściowych funkcji Flow<PagingData<T>> z warstwy ViewModel.

    Jest to realizowane za pomocą rozszerzenia asSnapshot Kotlina w komponencie Flow<PagingData<Value>>, które przekształca Flow<PagingData<Value>> w bezpośrednie List<Value>. Lambda asSnapshot umożliwia naśladowanie interfejsu użytkownika aplikacji za pomocą interfejsów API, takich jak scrollTo lub appendScrollWhile, w sposób powtarzalny i spójny, dzięki czemu możesz w dowolnym momencie w zbiorze danych na stronach sprawdzać, czy zrzut danych jest prawidłowy.

    // 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 to metoda suspend, która powinna być wykonywana w ramach runTest. Więcej informacji znajdziesz w artykule Testowanie coroutines w Kotlinie na Androidzie. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)

Zmiany w interfejsie API

  • Wywołania interfejsu dotyczące funkcji getItempeek w funkcjach AsyncPagingDataDifferPagingDataAdapter są teraz prawidłowo oznaczone jako dostępne tylko w wątku głównym. (I699b6)
  • Usunięcie symboli zastępczych z typów ogólnych używanych przez TestPager, co ułatwia korzystanie z wyników tych metod w kodzie napisanym w języku programowania Java. (I56c42)

Wersja 3.2.0-alpha03

24 października 2022 r.

androidx.paging:paging-*:3.2.0-alpha03 został zwolniony. Wersja 3.2.0-alpha03 zawiera te commity.

Testowanie przewijania

Ta wersja zawiera nowy artefakt: paging-testing. Ten artefakt udostępnia interfejsy API przeznaczone do testowania jednostkowego poszczególnych warstw aplikacji i jej integracji z Pagingiem.

Na przykład ta pierwsza wersja zawiera klasę TestPager, która umożliwia sprawdzanie działania własnej implementacji PagingSource niezależnie od Pager i rzeczywistego interfejsu użytkownika, którego zwykle trzeba używać do symulowania kompleksowej integracji z systemem Paging.

TestPager należy uznać za fałszywy – podwójny interfejs testowy, który odzwierciedla rzeczywistą implementację Pager, a jednocześnie zapewnia uproszczony interfejs API do testowania PagingSource. Te interfejsy API to interfejsy suspend i powinny być uruchamiane w ramach runTest zgodnie z opisem w przewodniku Testowanie coroutines Kotlin na Androidzie.

Przykłady użycia tych interfejsów API można znaleźć w testach room-paging, które zostały przekształcone w celu użycia interfejsu TestPager.

Zmiany w interfejsie API

  • Umożliwia wygodne iterowanie od LoadResult.Page.data do LoadResult.Page.iterator(). Pozwala to pośrednio na użycie metody flattenstandardowej biblioteki Kotlina, gdy podano List<LoadResult.Page>, na przykład z właściwością pages obiektu PagingState, która jest przekazywana do metody PagingSource.getRefreshKey. (Ie0718)

Wersja 3.2.0-alpha02

10 sierpnia 2022 r.

androidx.paging:paging-*:3.2.0-alpha02 został zwolniony. Wersja 3.2.0-alpha02 zawiera te commity.

Nowe funkcje

  • Strona z przekierowaniami udostępnia teraz dzienniki za pomocą klas AsyncPagingDataDiffer lub PagingDataAdapter, aby udostępnić informacje debugowania zebrane z PagingData.
  • Logi można włączyć za pomocą polecenia adb shell adb shell setprop log.tag.Paging [DEBUG|VERBOSE].(b/235527159).

Poprawki błędów

  • Usunęliśmy błąd konstruktora PagingDataDiffer, który występował podczas używania paging-common:3.2.0-alpha01 z czasem wykonywania paging-runtime:3.1.1 lub starszym (b/235256201).

Wersja 3.2.0-alpha01

1 czerwca 2022 r.

androidx.paging:paging-*:3.2.0-alpha01 został zwolniony. Wersja 3.2.0-alpha01 zawiera te commity.

Zmiany w interfejsie API

  • Dodano konstruktory PagingDataAdapterAsyncPagingDataDiffer, które przyjmują CoroutineContext zamiast CoroutineDispatcher. (Idc878)
  • Domyślnie PagingData.from() i PagingData.empty() nie mają już wpływu na CombinedLoadStates po stronie prezentera. Dodano nowe przeciążenie, które umożliwia przekazywanie do tych konstruktorów wartości sourceLoadStatesremoteLoadStates, aby zachować dotychczasowe zachowanie polegające na ustawieniu LoadStates jako całkowicie terminalnej (tzn. NotLoading(endOfPaginationReached = false)) z opcją uwzględnienia w razie potrzeby także stanów zdalnych. Jeśli LoadStates nie zostaną przekazane, poprzednie CombinedLoadStates będą utrzymywane po stronie prezentera, gdy otrzyma on statyczne PagingData. (Ic3ce5, b/205344028)

Poprawki błędów

  • Wynik funkcji PagingSource.getRefreshKey() jest teraz prawidłowo priorytetyzowany nad funkcją initialKey w przypadkach, gdy zwraca ona wartość null, ale została ustawiona wartość niebędąca nullem w przypadku funkcji initialKey. (Ic9542, b/230391606)

Darowizna zewnętrzna

  • Zaktualizowano interfejs API :compose:ui:ui-test (updateApi) z powodu migracji test-coroutines-lib (I3366d).

Wersja 3.1

Wersja 3.1.1

9 marca 2022 r.

androidx.paging:paging-*:3.1.1 został zwolniony. Wersja 3.1.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Usunięto pośrednie zdarzenia LoadState.NotLoading między generacjami, które zostały nieprawidłowo wstawione przez .cachedIn(). Ta zmiana znacznie ułatwia reagowanie na zmiany w LoadState przez usuwanie zbędących zdarzeń LoadState.NotLoading, które zostały wygenerowane podczas ponownego próby wczytania po niepowodzeniu, podczas odświeżania lub unieważnienia.

Wersja 3.1.0

17 listopada 2021 r.

androidx.paging:paging-*:3.1.0 został zwolniony. Wersja 3.1.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 3.0.0

  • Interfejsy API Flow<PagingData>.observableFlow<PagingData>.flowable nie są już eksperymentalne
  • Zmiana zachowania na LoadState:
    • Wartość endOfPaginationReached jest teraz zawsze ustawiona na false w przypadku LoadType.REFRESH w przypadku zarówno PagingSource, jak i RemoteMediator
    • LoadStates z Paging teraz oczekuje na prawidłowe wartości zarówno w PagingSource, jak i RemoteMediator, zanim wyemituje dane na dalszych etapach. Nowe generacje PagingData będą teraz zawsze prawidłowo rozpoczynać się od Loading w przypadku stanu odświeżania, zamiast w niektórych przypadkach nieprawidłowo resetować się do NotLoading.
    • Interfejsy API .loadStateFlow i .addLoadStateListener dla prezenterów nie wysyłają już niepotrzebnie początkowego CombinedLoadStates, którego stan mediatora zawsze ma wartość null.
  • Anulowanie poprzednich generacji odbywa się teraz chętnie w przypadku unieważnienia lub nowych generacji. Użycie tagu .collectLatest w tagu Flow<PagingData> nie powinno być już wymagane, ale nadal zalecamy to robić.
  • Dodano PagingSource.LoadResult.Invalid jako nowy typ zwracany przez PagingSource.load, co powoduje, że funkcja paging odrzuca i unieważnia wszystkie oczekujące lub przyszłe żądania wczytania dla tego PagingSource. Ten typ zwracania danych jest przeznaczony do obsługi potencjalnie nieprawidłowych lub nieaktualnych danych, które mogą zostać zwrócone z bazy danych lub sieci.
  • Dodano interfejsy API dla prowadzących .onPagesPresented i .addOnPagesUpdatedListener, które są wywoływane synchronicznie podczas wyświetlania stron w interfejsie. Aktualizacje stron mogą mieć miejsce w tych sytuacjach:
    • Początkowe wczytanie nowej generacji PagingData jest zakończone, niezależnie od tego, czy nowa generacja zawiera jakiekolwiek zmiany w prezentowanych elementach. Nowa generacja, która zakończy wczytywanie początkowe bez żadnych zmian, ponieważ lista jest dokładnie taka sama, nadal wywoła tę funkcję.
    • Strona jest wstawiana, nawet jeśli nie zawiera żadnych nowych elementów.
    • strona jest pomijana, nawet jeśli była pusta;

Wersja 3.1.0-rc01

3 listopada 2021 r.

androidx.paging:paging-*:3.1.0-rc01 został zwolniony. Wersja 3.1.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązano problem z warunkiem wyścigu i wyciekiem pamięci w funkcji .cachedIn() w przypadkach, gdy Paging wysyłał wiele zdarzeń wczytywania, gdy nie było obserwatorów, lub między momentami, gdy obserwator przełączał się na nowe dane PagingData. (Ib682e)

Wersja 3.1.0-beta01

13 października 2021 r.

androidx.paging:paging-*:3.1.0-beta01 został zwolniony. Wersja 3.1.0-beta01 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem, w którym wiele szybkich prób dostępu do elementów mogło spowodować ich odrzucenie w ramach prefetchDistance, co powodowało zablokowanie wczytywania strony. Jest to szczególnie istotne, gdy wiele elementów jest rozmieszczonych jednocześnie w taki sposób, że priorytetem jest wczytywanie elementów w zależności od kierunku przewijania przez użytkownika. Dostęp do tych elementów jest teraz buforowany i synchronicznie priorytetyzowany, aby zapobiec ich utracie. (aosp/1833273)

Wersja 3.1.0-alpha04

29 września 2021 r.

androidx.paging:paging-*:3.1.0-alpha04 został zwolniony. Wersja 3.1.0-alpha04 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Interfejsy API Flow<PagingData>.observableFlow<PagingData>.flowable nie są już eksperymentalne. (Ie0bdd)

Poprawki błędów

  • W przypadku stanu wczytywania endOfPaginationReached jest teraz zawsze false w przypadku LoadType.REFRESH. Wcześniej wartość endOfPaginationReached mogła być true w przypadku RemoteMediator REFRESH, ale nie w przypadku PagingSource. To zachowanie jest teraz konsolidowane, aby zawsze zwracaćfalse, ponieważ nie ma sensu, aby polecenie odświeżania było terminalne. Jest to teraz opisane w ramach umowy dotyczącej interfejsu API w LoadStates. Decydując, czy paginacja została zakończona, należy zawsze kierować się wskazówkami dotyczącymi instrukcji DODAWANIA lub DODAWANIA NA POCZĄTKU. (I047b6)
  • Stany ładowania z Paging teraz oczekują na prawidłowe wartości zarówno z PagingSource, jak i RemoteMediator, zanim wyemitują dane na dalszych generacjach. Zapobiega to wysyłaniu przez nowe generacje PagingData wartości NotLoading w CombinedLoadStates.source.refresh, jeśli była już ona ustawiona na Loading. Nowe generacje PagingData będą teraz zawsze prawidłowo rozpoczynać się od wartości Loading w stanie odświeżania zamiast w niektórych przypadkach błędnie resetować się do wartości NotLoading.

    Anulowanie poprzednich generacji odbywa się teraz chętnie w przypadku nieważności / nowych generacji. Użycie funkcji .collectLatest w funkcji Flow<PagingData> nie powinno już być wymagane, ale nadal jest wysoce zalecane (I0b2b5, b/177351336, b/195028524).

  • Interfejsy API prezentera .loadStateFlow.addLoadStateListener nie wysyłają już niepotrzebnie początkowego CombinedLoadStates, który zawsze ma stan mediatora null, a stan źródła NotLoading(endOfPaginationReached = false). Oznacza to, że:

    1. Jeśli używasz interfejsu RemoteMediator, stany mediatora będą zawsze wypełnione.
    2. Zarejestrowanie nowego listenera loadState lub nowego kolektora w .loadStateFlow nie spowoduje już natychmiastowego wyemitowania bieżącej wartości, jeśli nie zostanie otrzymana rzeczywista wartość CombinedLoadStatesPagingData. Może się tak zdarzyć, jeśli zbierający lub słuchacz rozpocznie działanie, zanim zostanie przesłany element PagingData. (I1a748)

Wersja 3.1.0-alpha03

21 lipca 2021 r.

androidx.paging:paging-*:3.1.0-alpha03 został zwolniony. Wersja 3.1.0-alpha03 zawiera te commity.

Zmiany w interfejsie API

  • Do PagingSource dodano trzeci typ zwracany przez LoadResult, czyli LoadResult.Invalid. Gdy metoda PagingSource.load zwróci wartość LoadResult.Invalid, paging odrzuci załadowane dane i unieważni PagingSource. Ten typ zwracanych danych jest przeznaczony do obsługi potencjalnie nieprawidłowych lub nieaktualnych danych, które mogą zostać zwrócone z bazy danych lub sieci.

    Jeśli na przykład do bazy danych źródłowej zostaną wpisane dane, ale PagingSource nie zostanie unieważniony na czas, może zwracać niespójne wyniki, jeśli jego implementacja zależy od niezmienności ładowanego przez niego zbioru danych (np. LIMIT OFFSET styl implementacji bazy danych). W takim przypadku zalecamy sprawdzenie, czy pobieranie nie zostało unieważnione, i zwrócenie wartości LoadResult.Invalid, co spowoduje, że Paging odrzuci wszystkie oczekujące lub przyszłe żądania załadowania do tego obiektu PagingSource i unieważni je.

    Ten typ zwracanych danych jest też obsługiwany przez interfejs Paging2 API, który korzysta z interfejsu LivePagedList lub RxPagedList. Gdy używasz interfejsów PagedList z Paging2 w źródle PagingSource, lista PagedList jest natychmiast odłączana, co uniemożliwia dalsze próby wczytania danych z tej listy i powoduje unieważnienie źródła PagingSource.

    LoadResult to klasa zamknięta, co oznacza, że jest to zmiana niezgodna ze źródłem, która wymaga, aby przypadki użycia bezpośrednio korzystające z wyników PagingSource.load musiały obsługiwać LoadResult.Invalid w czasie kompilacji. Na przykład użytkownicy Kotlina, którzy korzystają z exhaustive-when do sprawdzania typu zwracanego, będą musieli dodać sprawdzanie typu Invalid. (Id6bd3, b/191806126, b/192013267)

Poprawki błędów

  • Funkcje zwracane przez wywołania zwrotne dotyczące unieważnienia, dodane za pomocą PagingSource.registerInvalidatedCallback lub DataSource.addInvalidatedCallback, są teraz automatycznie wywoływane, jeśli zostały zarejestrowane w źródle PagingSource / DataSource, które było już nieważne. Rozwiązano problem z konkurencyjnością, który powodował, że Paging ignorował sygnały unieważnienia i zawieszał się, gdy podano źródło, które było już nieprawidłowe podczas początkowego wczytywania. Dodatkowo wywołania zwrotne invalidate są teraz prawidłowo usuwane po wywołaniu, ponieważ są wywoływane co najwyżej raz. (I27e69)
  • Przesyłanie początkowej wartości zastępczej (InitialPagedList) z nowo utworzonego strumienia PagedList, np. Klasy LivePagedListBuilder i RxPagedListBuilder nie będą już czyścić wcześniej wczytanych danych.

Wersja 3.1.0-alpha02

1 lipca 2021 r.

androidx.paging:paging-*:3.1.0-alpha02 został zwolniony. Wersja 3.1.0-alpha02 zawiera te commity.

Nowe funkcje

  • Dodano interfejsy API onPagesPresented listener i flow presenter, które są wywoływane natychmiast po zaktualizowaniu prezentowanych stron w interfejsie.

    Te aktualizacje są synchroniczne z interfejsem użytkownika, więc możesz wywoływać metody adaptera, takie jak .snapshot czy .getItemCount, aby sprawdzić stan po wprowadzeniu aktualizacji. Zwróć uwagę, że wywołanie metody .snapshot() zostało pozostawione do wywołania wprost, ponieważ wywoływanie jej przy każdej aktualizacji może być kosztowne.

    Aktualizacje strony mogą mieć miejsce w tych sytuacjach:

    • Początkowe wczytanie nowej generacji PagingData jest zakończone, niezależnie od tego, czy nowa generacja zawiera jakiekolwiek zmiany w prezentowanych elementach. Przykład: Nowe pokolenie, które zakończy wczytywanie początkowe bez żadnych zmian, ponieważ lista jest dokładnie taka sama, nadal wywoła tę funkcję.
    • strona jest wstawiana, nawet jeśli nie zawiera żadnych nowych elementów;
    • strona jest usuwana, nawet jeśli była pusta (I272c9, b/189999634);

Poprawki błędów

  • Dostęp do PagedList.dataSource z wartości początkowej utworzonej przez LivePagedList lub RxPagedList nie będzie już nieprawidłowo wywoływać IllegalStateException (I96707)

Wersja 3.1.0-alpha01

2 czerwca 2021 r.

androidx.paging:paging-*:3.1.0-alpha01 został zwolniony. Wersja 3.1.0-alpha01 zawiera te commity.

Zmiany w interfejsie API

  • Zajęcia oferowane przez paging-rxjava3 są teraz dostępne w ramach pakietu androidx.paging.rxjava3, aby nie wchodziły w konflikt z paging-rxjava2 (Ifa7f6)

Poprawki błędów

  • Rozwiązaliśmy problem, który polegał na tym, że Paging czasami wysyłał do RecyclerView zdarzenia no-op differ, co mogło powodować przedwczesne wywołanie niektórych słuchaczy. (Ic507f, b/182510751)

Darowizna zewnętrzna

  • Dodano do artefaktu rxjava3 (Id1ce2, b/182497591) wycofane interfejsy API zgodne z PagedList.

Paginacja w edytorze tekstu – wersja 1.0.0

Wersja 1.0.0-alpha20

24 maja 2023 r.

androidx.paging:paging-compose:1.0.0-alpha20 został zwolniony. Wersja 1.0.0-alpha20 zawiera te commity.

Nowe funkcje

  • Paging Compose obsługuje teraz podgląd listy fałszywych danych przez utworzenie PagingData.from(fakeData) i opakowanie tego PagingDataMutableStateFlow (np. MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Korzystając z tych danych jako danych wejściowych do funkcji @Preview, możesz wyświetlić podgląd LazyPagingItems w przypadku wywołania funkcji collectAsLazyPagingItems(). (I8a78d, b/194544557)

Poprawki błędów

  • Dane z poziomu pamięci podręcznej z pager.flow.cachedIn, które zostały zebrane w LazyPagingItems, będą teraz dostępne natychmiast po przywróceniu stanu bez konieczności zbierania danych asynchronicznie. Oznacza to, że dane w pamięci podręcznej będą gotowe do wyświetlenia natychmiast po początkowym sformułowaniu po przywróceniu stanu. (I97a60, b/177245496)

Wersja 1.0.0-alpha19

3 maja 2023 r.

androidx.paging:paging-compose:1.0.0-alpha19 został zwolniony. Wersja 1.0.0-alpha19 zawiera te commity.

Obsługa wszystkich układów z opóźnionym ładowaniem

Wcześniej funkcja komponowania stron udostępniała niestandardowe rozszerzenia itemsitemsIndexed w komponencie LazyListScope, co oznaczało, że nie można było używać komponowania stron z innymi układami opóźnionymi, takimi jak LazyVerticalGrid, HorizontalPager czy inne niestandardowe komponenty opóźnione udostępniane przez biblioteki Wear i TV. Zajęcie się tą sztywnością jest główną zmianą w tej wersji.

Aby obsługiwać więcej układów opóźnionych, musieliśmy utworzyć interfejsy API na innym poziomie. Zamiast udostępniać niestandardowy interfejs API items dla każdego układu opóźnionego, Compose na interfejsie Paging udostępnia teraz metody rozszerzeń na nieco niższym poziomie w LazyPagingItems w itemKey i itemContentType. Te interfejsy API pomagają w wdrażaniu parametrów keycontentType w standardowych interfejsach API items, które są już dostępne w przypadku LazyColumnLazyVerticalGrid, a także ich odpowiedników w interfejsach API, takich jak HorizontalPager. (Ifa13b, Ib04f0, b/259385813)

Oznacza to, że obsługa LazyVerticalGrid wyglądałaby tak:

// 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)
  }
}

Więcej przykładów użycia tych nowych interfejsów API znajdziesz w naszych przykładach.

Chociaż te zmiany powodują, że przykłady LazyColumnLazyRow są o kilka linii dłuższe, uznaliśmy, że spójność wszystkich layoutów z opóźnionym wczytywaniem jest ważnym czynnikiem dla osób, które będą używać komponowania na stronach. Z tego powodu dotychczasowe rozszerzenia LazyListScope zostały wycofane. (I0c459, I92c8f, b/276989796)

Zmiany w interfejsie API

  • Aby ułatwić migrację do nowych interfejsów API, funkcje rozszerzenia itemsitemsIndexed w interfejsie LazyListScope obsługują teraz parametr contentType, który odzwierciedla obsługę w nowych interfejsach API. (Ib1918, b/255283378)

Aktualizacje zależności

  • Składnik Compose na stronach został zaktualizowany z wersji 1.0.5 na 1.2.1. (Ib1918, b/255283378)

Wersja 1.0.0-alpha18

8 lutego 2023 r.

androidx.paging:paging-compose:1.0.0-alpha18 jest opublikowany bez wprowadzenia zmian. Wersja 1.0.0-alpha18 zawiera te commity.

Wersja 1.0.0-alpha17

24 października 2022 r.

androidx.paging:paging-compose:1.0.0-alpha17 został zwolniony. Wersja 1.0.0-alpha17 zawiera te commity.

Nowe funkcje

  • Dodaliśmy obsługę niestandardowego CoroutineContext podczas wywoływania funkcji collectLazyPagingItems. (I7a574, b/243182795, b/233783862)

Wersja 1.0.0-alpha16

10 sierpnia 2022 r.

androidx.paging:paging-compose:1.0.0-alpha16 został zwolniony. Wersja 1.0.0-alpha16 zawiera te commity.

Nowe funkcje

  • Paging udostępnia teraz dzienniki za pomocą klasy LazyPagingItems, aby udostępniać informacje debugowania zebrane z PagingData.
  • Logi można włączyć za pomocą polecenia adb shell adb shell setprop log.tag.Paging [DEBUG|VERBOSE]. ([b/235527159}(https://issuetracker.google.com/issues/235527159))

Poprawki błędów

  • Usunięto błąd konstruktora PagingDataDiffer, który występował podczas używania funkcji paging-compose:1.0.0-alpha15 w wersji paging-common:3.1.1 lub starszej (b/235256201, b/239868768).

Wersja 1.0.0-alpha15

1 czerwca 2022 r.

androidx.paging:paging-compose:1.0.0-alpha15 został zwolniony. Wersja 1.0.0-alpha15 zawiera te commity.

Zmiany w interfejsie API

  • Dodano konstruktory PagingDataAdapterAsyncPagingDataDiffer, które przyjmują CoroutineContext zamiast CoroutineDispatcher. (Idc878)

Poprawki błędów

  • LazyPagingItems ustawia teraz początkowy loadState na odświeżanie LoadState.Loading. (I55043, b/224855902)

Wersja 1.0.0-alpha14

13 października 2021 r.

androidx.paging:paging-compose:1.0.0-alpha14 został zwolniony. Wersja 1.0.0-alpha14 zawiera te zatwierdzenia.

Wersja 1.0.0-alpha13

29 września 2021 r.

androidx.paging:paging-compose:1.0.0-alpha13 został zwolniony. Wersja 1.0.0-alpha13 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Funkcja LazyPagingItems.snapshot() została zastąpiona właściwością LazyPagingItems.itemSnapshotList (Ie2da8).
  • Wycofany element LazyPagingItems.getAsState() został usunięty (Ie65e4)

Wersja 1.0.0-alpha12

21 lipca 2021 r.

androidx.paging:paging-compose:1.0.0-alpha12 został zwolniony. Wersja 1.0.0-alpha12 zawiera te commity.

Zmiany w interfejsie API

  • Parametry items(lazyPagingItems)itemsIndexed(lazyPagingItems) używane do łączenia funkcji Paging z LazyColumn/Row obsługują teraz parametr option key, który umożliwia określenie stabilnego klucza reprezentującego element. Więcej informacji o kluczach znajdziesz tutaj. (I7986d)
  • Funkcja lazyPagingItems.getAsState(index) została wycofana. Zamiast tego użyj lazyPagingItems[index]. (I086cb, b/187339372)

Wersja 1.0.0-alpha11

30 czerwca 2021 r.

androidx.paging:paging-compose:1.0.0-alpha11 został zwolniony. Wersja 1.0.0-alpha11 zawiera te commity.

Wersja 1.0.0-alpha10

2 czerwca 2021 r.

androidx.paging:paging-compose:1.0.0-alpha10 został zwolniony. Wersja 1.0.0-alpha10 zawiera te zatwierdzenia.

Wersja 1.0.0-alpha09

18 maja 2021 r.

androidx.paging:paging-compose:1.0.0-alpha09 został zwolniony. Wersja 1.0.0-alpha09 zawiera te commity.

Poprawki błędów

  • Metody itemCount i item getter z LazyPagingItems są teraz obserwowalne, co umożliwia ich użycie z LazyVerticalGrid (Ie2446, b/171872064, b/168285687).

Zgodność funkcji tworzenia

  • androidx.paging:paging-compose:1.0.0-alpha09 jest zgodna tylko z Compose w wersji 1.0.0-beta07 lub nowszej.

Wersja 1.0.0-alpha08

24 lutego 2021 r.

androidx.paging:paging-compose:1.0.0-alpha08 został zwolniony. Wersja 1.0.0-alpha08 zawiera te commity.

Zaktualizowano, aby umożliwić integrację z Compose 1.0.0-beta01.

Wersja 1.0.0-alpha07

10 lutego 2021 r.

androidx.paging:paging-compose:1.0.0-alpha07 został zwolniony. Wersja 1.0.0-alpha07 zawiera te commity.

Zaktualizowano, aby umożliwić integrację z Compose w wersji alpha12.

Wersja 1.0.0-alpha06

28 stycznia 2021 roku

androidx.paging:paging-compose:1.0.0-alpha06 został zwolniony. Wersja 1.0.0-alpha06 zawiera te commity.

Poprawki błędów

Zaktualizowano zależność od Compose 1.0.0-alpha11.

Wersja 1.0.0-alpha05

13 stycznia 2021 r.

androidx.paging:paging-compose:1.0.0-alpha05 został zwolniony. Wersja 1.0.0-alpha05 zawiera te commity.

Zaktualizowano, aby zależało od Compose 1.0.0-alpha10.

Wersja 1.0.0-alpha04

16 grudnia 2020 roku

androidx.paging:paging-compose:1.0.0-alpha04 został zwolniony. Wersja 1.0.0-alpha04 zawiera te commity.

Poprawki błędów

  • Zaktualizowano właściwości ułatwiające korzystanie z usługi: CombinedLoadStates.refresh, CombinedLoadStates.prepend, CombinedLoadStates.append, aby przejście z Loading na NotLoading następowało dopiero po osiągnięciu stanu NotLoading w przypadku zarówno pośrednika, jak i źródła, co gwarantuje, że aktualizacja zdalna została zastosowana. (I65619)

Wersja 1.0.0-alpha03

2 grudnia 2020 r.

androidx.paging:paging-compose:1.0.0-alpha03 został zwolniony. Wersja 1.0.0-alpha03 zawiera te commity.

  • Zaktualizowano, aby dopasować do wersji Compose 1.0.0-alpha08.

Wersja 1.0.0-alpha02

11 listopada 2020 roku

androidx.paging:paging-compose:1.0.0-alpha02 został zwolniony. Wersja 1.0.0-alpha02 zawiera te commity.

Zmiany w interfejsie API

  • Do metod LazyPagingItem dodano metody .peek(), .snapshot(), .retry().refresh(), które udostępniają te same funkcje co metody AsyncPagingDataDiffer / PagingDataAdapter (Iddfe8, b/172041660)

Wersja 1.0.0-alpha01

28 października 2020 r.

androidx.paging:paging-compose:1.0.0-alpha01 został zwolniony. Wersja 1.0.0-alpha01 zawiera te commity.

Nowe funkcje

Element paging-compose zapewnia integrację biblioteki stronJetpack Compose. Prosty przykład użycia:

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

Wersja 3.0.1

Wersja 3.0.1

21 lipca 2021 r.

androidx.paging:paging-*:3.0.1 został zwolniony. Wersja 3.0.1 zawiera te komitowane zmiany.

Poprawki błędów

  • Dostęp do wartości PagedList.dataSource z wartości początkowej utworzonej przez LivePagedList lub RxPagedList nie będzie już nieprawidłowo wywoływać wyjątku IllegalStateException (I96707).

Wersja 3.0.0

Wersja 3.0.0

5 maja 2021 roku

androidx.paging:paging-*:3.0.0 został zwolniony. Wersja 3.0.0 zawiera te commity.

Najważniejsze funkcje wersji 3.0.0

Większość dotychczasowych interfejsów API z wersji 2.x.x została wycofana na rzecz nowych interfejsów Paging 3, aby wprowadzić te ulepszenia:

  • pierwszorzędna obsługa coroutines i Flow w Kotlinie;
  • Pomoc dotycząca anulowania
  • Wbudowane sygnały stanu wczytywania i błędów
  • Funkcja ponownego próbowania i odświeżania
  • Wszystkie 3 podklasy DataSource zostały połączone w jedną klasę PagingSource.
  • niestandardowe przekształcenia strony, w tym wbudowane przekształcenie do dodawania separatorów;
  • Wczytuję nagłówki i stopki stanu

Wersja 3.0.0-rc01

21 kwietnia 2021 r.

androidx.paging:paging-*:3.0.0-rc01 został zwolniony. Wersja 3.0.0-rc01 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem, który polegał na tym, że Paging czasami wysyłał do RecyclerView zdarzenia no-op differ, co mogło powodować przedwczesne wywołanie niektórych słuchaczy. (Ic507f, b/182510751)

Wersja 3.0.0-beta03

24 marca 2021 r.

androidx.paging:paging-*:3.0.0-beta03 został zwolniony. Wersja 3.0.0-beta03 zawiera te commity.

Poprawki błędów

  • Zmieniliśmy sposób obsługi placeholderów podczas ponownego wczytywania listy, aby zapobiec nieoczekiwanym przeskokom w RecyclerView. Więcej informacji znajdziesz w pliku NullPaddedDiffing.md. (If1490, b/170027529, b/177338149)
  • Różne konstruktory PagedList (stara ścieżka zgodności) nie wywołują już nieprawidłowo synchronicznie funkcji DataSource.Factory.create() w wątku głównym, gdy wywoływana jest funkcja .build(). (b/182798948)

Wersja 3.0.0-beta02

10 marca 2021 r.

androidx.paging:paging-*:3.0.0-beta02 został zwolniony. Wersja 3.0.0-beta02 zawiera te commity.

Zmiany w interfejsie API

  • Rozszerzenia Rx3 są teraz prawidłowo propagowane @ExperimentalCoroutinesApi Wymóg wyrażenia zgody. Wcześniej były one oznaczane w metodzie @get, która jest ignorowana przez kompilator Kotlina z powodu tego: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)

Poprawki błędów

  • Wdrożenie ograniczeń dotyczących publicznego używania eksperymentalnych interfejsów API (I6aa29, b/174531520)
  • Naprawiliśmy błąd, który powodował, że PagingState zawsze przyjmowało wartość null, gdy wywoływano odświeżanie zdalne.
  • Usunięto błąd, który powodował, że puste strony zwracane przez PagingSource mogły uniemożliwiać ponowne pobieranie danych przez Paging, aby spełnić wymagania funkcji prefetchDistance, co powodowało „zawieszanie się” Paging.

Wersja 3.0.0-beta01

10 lutego 2021 r.

androidx.paging:paging-*:3.0.0-beta01 został zwolniony. Wersja 3.0.0-beta01 zawiera te commity.

Zmiany w interfejsie API

  • Opakowania Rx2 i Rx3 zawierają teraz eksperymentalne adnotacje, od których zależą. Jeśli używasz opakowań zgodności Rx w paging-rxjava2 lub paging-rxjava3, musisz teraz dodać adnotacje do ich użycia za pomocą @OptIn(ExperimentalCoroutinesApi::class) (Ib1f9d).

Poprawki błędów

  • Naprawiono błąd IndexOutOfBoundsException: Inconsistency detected, który czasami występował podczas korzystania z interfejsów API w wersji 2 DataSource w ścieżkach zgodności
  • Wywołanie isInvalid podczas inicjowania DataSource, gdy jest używane w ramach ścieżek zgodności, jest teraz prawidłowo uruchamiane w metodzie fetchDispatcher, a nie na wątku głównym. Rozwiązanie to naprawia błąd IllegalStateException spowodowany dostępem do bazy danych w wątku głównym podczas korzystania z implementacji PagingSource w Room.

Wersja 3.0.0-alpha13

27 stycznia 2021 r.

androidx.paging:paging-*:3.0.0-alpha13 został zwolniony. Wersja 3.0.0-alpha13 zawiera te commity.

Zmiany w interfejsie API

  • Funkcja PagingSource.getRefreshKey nie jest już opcjonalna. Jest to teraz abstrakcyjna funkcja bez domyślnej implementacji. Użytkownicy migrujący mogą nadal zwracać domyślną implementację, która zwraca po prostu null, ale getRefreshKey() powinna mieć rzeczywistą implementację zwracającą klucz na podstawie bieżącej pozycji przewijania użytkownika, co pozwala usłudze Paging kontynuować wczytywanie, aby w miarę możliwości mieścić się w obszarze widoku za pomocą PagingState.anchorPosition. (I4339a)
  • InvalidatingPagingSourceFactory ma teraz klasę końcową (Ia3b0a).
  • Umożliwienie konfigurowania zachowania separatora terminala (nagłówka / stopki) za pomocą dodatkowego opcjonalnego parametru SeparatorType. Do wyboru masz 2 opcje:
    • FULLY_COMPLETE – dotychczasowe działanie; przed dodaniem separatorów końcowych poczekaj, aż zarówno PagingSource, jak i RemoteMediator odnotują osiągnięcie końca strony. Jeśli nie używasz interfejsu RemoteMediator, stan wczytywania zdalnego jest ignorowany. Jest to przydatne przede wszystkim, gdy chcesz wyświetlać separatory sekcji tylko wtedy, gdy sekcja jest w pełni załadowana, w tym pobierana ze źródła zewnętrznego, np. sieci.
    • SOURCE_COMPLETE – czekaj tylko na oznaczenie przez PagingSource końca obsługiwanej strony, nawet jeśli używany jest RemoteMediator. Dzięki temu nagłówki i stopki są wyświetlane synchronicznie z pierwszym wczytywaniem, co eliminuje konieczność przewijania, aby zobaczyć separatory terminala. (Ibe993, b/174700218)

Poprawki błędów

  • Usunęliśmy rzadki wyciek pamięci, który występował, gdy PagingSource został unieważniony, zanim PageFetcher mógł zacząć wczytywać dane z tego obiektu. (I9606b, b/174625633)

Wersja 3.0.0-alpha12

13 stycznia 2021 r.

androidx.paging:paging-*:3.0.0-alpha12 został zwolniony. Wersja 3.0.0-alpha12 zawiera te commity.

Zmiany w interfejsie API

  • InvalidatingPagingSourceFactory nie jest już klasą abstrakcyjną, ponieważ nigdy nie miała abstrakcyjnych metod. (I4a8c4)
  • Dodano przeciążenie metody .cachedIn(), która dla użytkowników Javy przyjmuje parametr ViewModel zamiast Lifecycle lub CoroutineScope. (I97d81, b/175332619)
  • Zezwól wywołującym w Javie na używanie operacji przetwarzania PagingData w sposób asynchroniczny, przyjmując Executora jako argument operatora transform. Z wszystkich operatorów transformacji -Sync usunięto sufiks -Sync, a użytkownicy coroutine w Kotlinie będą musieli usunąć niejednoznaczność, wywołując funkcję rozszerzenia, która zamiast tego akceptuje blok zawieszania. Wszystkie operatory funkcji PagingData zostały przeniesione do rozszerzeń w ramach statycznej klasy PagingDataTransforms. Użytkownicy Java będą musieli wywoływać je za pomocą statycznych helperów, np. PagingDataTransforms.map(pagingData, transform)Użytkownicy Kotlina mogą użyć tej samej składni, ale muszą zaimportować funkcję. (If6885, b/172895919)

Poprawki błędów

  • Naprawiliśmy błąd polegający na tym, że funkcja RemoteMediator.load() nie była wywoływana w funkcji adapter.refresh(), jeśli koniec podziału na strony został już osiągnięty.

Wersja 3.0.0-alpha11

16 grudnia 2020 roku

androidx.paging:paging-*:3.0.0-alpha11 został zwolniony. Wersja 3.0.0-alpha11 zawiera te commity.

Nowe funkcje

  • Dodaliśmy obsługę zapisanego stanu w przypadku tych podstawowych zastosowań: (pełna obsługa, zwłaszcza w przypadku warstwowego źródła, jest nadal opracowywana):
    • przepływ jest przechowywany w pamięci podręcznej, a aplikacja nie jest zabijana (np. przepływ jest przechowywany w pamięci podręcznej w ramach modelu widoku, a działalność jest ponownie tworzona w ramach procesu);
    • Źródło stron jest zliczane, a miejsca substytucyjne są włączone, ale układ nie jest rozłożony.

Zmiany w interfejsie API

  • Interfejs API PagingSource.getRefreshKey() jest teraz stabilny (I22f6f, b/173530980).
  • Funkcja PagingSource.invalidate nie jest już dostępna. Jeśli chcesz otrzymywać powiadomienia o unieważnieniu, zamiast zastąpić metodę invalidate, użyj metody registerInvalidatedCallback. (I628d9, b/173029013, b/137971356)
  • Pager ma teraz 1 eksperymentalny konstruktor obok zwykłych konstruktorów, a nie udostępnia eksperymentalnych interfejsów API w interfejsach publicznych za pomocą adnotacji z opcją włączenia. (I9dc61, b/174531520)
  • Zaktualizowano właściwości ułatwiające korzystanie z usługi: CombinedLoadStates.refresh, CombinedLoadStates.prepend, CombinedLoadStates.append, aby przejście z Loading na NotLoading następowało dopiero po osiągnięciu stanu NotLoading w przypadku zarówno pośrednika, jak i źródła, co gwarantuje, że aktualizacja zdalna została zastosowana. (I65619)
  • Parametr LoadParams.pageSize został usunięty (był już wycofany). Zalecamy użycie LoadParams.loadSize w źródle pagingu.

    LoadParams.loadSize jest zawsze równe PagingConfig.pageSize, z wyjątkiem wywołania wczytywania początkowego, w którym jest równe PagingConfig.initialLoadSize.

    Jeśli testujesz źródło danych Paging2 bez użycia Pagera lub PagedList, pageSize może nie pasować do PagingConfig.pageSize, jeśli ustawiasz też initialLoadSize. Jeśli jest to ważne w przypadku Twoich testów, użyj zamiast tego Pager/PagedList, który wewnętrznie ustawi odpowiednią wartość PageSize dla metod ładowania DataSource. (I98ac7, b/149157296)

Poprawki błędów

  • Rozwiązaliśmy problem z awarią spowodowany wyjątkiem IllegalStateException podczas używania separatorów z ustawioną wartością PagingConfig.maxSize. (I0ed33, b/174787528)
  • Usunęliśmy błąd, który powodował, że stan wczytywania w przypadku metod DODAJ NA POCZĄTKU i DODAJ NA KONIEC nie był aktualizowany do wartości NotLoading(endOfPaginationReached = true) natychmiast po początkowym wczytaniu, jeśli ustawiono RemoteMediator (I8cf5a).
  • Naprawiliśmy błąd, który powodował, że interfejsy API po stronie prezentera, takie jak .snapshot(), .peek() itp., zwracały poprzednią (nieaktualną) listę w aktualizacjach ListUpdateCallback.
  • Naprawiono błąd polegający na tym, że operatory separatorów nie dodawały nagłówków ani stopek podczas używania z RemoteMediator.
  • Usunęliśmy błąd polegający na tym, że aktualizacja LoadState do NotLoading w przypadku RemoteMediator utknęła w stanie Loading.
  • Naprawiono błąd, który powodował, że interfejs API zgodności z Paging2.0, .asPagingSourceFactory(), mógł spowodować zainicjowanie podrzędnego DataSource w nieprawidłowym CoroutineDispatcher. Rozwiązanie to zapobiega awariom i możliwym przypadkom ANR, zwłaszcza w przypadku korzystania z obecnej implementacji PagingSource w Room, która korzysta z tej ścieżki zgodności.

Wersja 3.0.0-alpha10

2 grudnia 2020 r.

androidx.paging:paging-*:3.0.0-alpha10 został zwolniony. Wersja 3.0.0-alpha10 zawiera te commity.

Zmiany w interfejsie API

  • Wycofane interfejsy API dataRefreshFlowdataRefreshListener zostały usunięte, ponieważ są zbędne w porównaniu z aktualizacjami loadStateFlow / Listener. W przypadku migracji odpowiednik loadStateFlow to:

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

    (Ib5570, b/173530908)

Poprawki błędów

  • Wartość endOfPaginationReached dla RemoteMediator REFRESH jest teraz prawidłowo rozpowszechniana w ramach aktualizacji LoadState i zapobiega uruchamianiu funkcji zdalnych APPENDPREPEND. (I94a3f, b/155290248)
  • Wyświetlanie pustej listy z powodu pustej strony początkowej lub intensywnego filtrowania nie będzie już uniemożliwiać wczytywania PREPEND lub APPEND. (I3e702, b/168169730)
  • Rozwiązaliśmy problem polegający na tym, że funkcja getRefreshKey nie jest wywoływana w kolejnych generacjach PagingSource, gdy unieważnienia występują szybko. (I45460, b/170027530)

Darowizna zewnętrzna

  • Dodano nową abstrakcyjną klasę InvalidatingPagingSourceFactory z interfejsem API .invalidate(), który przekazuje sygnał o utracie ważności wszystkim generowanym przez siebie obiektom PagingSource. Dziękujemy @claraf3! (Ie71fc, b/160716447)

Znane problemy

  • Nagłówki i stopki z transformacji .insertSeparators() mogą nie pojawić się od razu, gdy używasz RemoteMediator b/172254056
  • Użycie RemoteMediator może spowodować zablokowanie zdalnego LoadState, jeśli unieważnienie i PagingSource.load(LoadParams.Refresh(...)) zostaną zakończone, zanim RemoteMediator.load() zwróci wartość b/173717820

Wersja 3.0.0-alpha09

11 listopada 2020 roku

androidx.paging:paging-*:3.0.0-alpha09 został zwolniony. Wersja 3.0.0-alpha09 zawiera te commity.

Zmiany w interfejsie API

  • Całkowicie wycofać metody dataRefreshFlow / Listener za pomocą klauzuli replaceWith. (I6e2dd)

Poprawki błędów

  • Rozwiązanie problemu z wyrzucaniem wyjątku IllegalArgumentException podczas używania separatorów z RemoteMediator i wyzwolenia anulowania, gdy nadal trwa wczytywanie zdalne, które zwróci endOfPagination (I3a260)

Wersja 3.0.0-alpha08

28 października 2020 r.

androidx.paging:paging-*:3.0.0-alpha08 został zwolniony. Wersja 3.0.0-alpha08 zawiera te commity.

Zmiany w interfejsie API

  • Wersje DataSource.InvalidatedCallback w Kotlinie i w Javie zostały połączone przez umożliwienie konwersji SAM w Kotlinie za pomocą interfejsu funkcyjnego (dostępnego w Kotlinie 1.4). Rozwiązaliśmy też błąd polegający na tym, że wersja Kotlina wywołania zwrotnego invalidate nie była wywoływana po przekształceniu przez .map lub .mapByPage. (I1f244, b/165313046)

Poprawki błędów

  • Znacznie ulepszono obsługę przewijania w ViewPager. W szczególności usługa Paging nie będzie już anulować wywołania RemoteMediator#load z powodu unieważnienia strony. Dopóki żądanie odświeżenia nie zostanie zrealizowane, nie będzie też wysyłać żądania dodawania ani dołączania danych (jeśli jest wymagane). (I6390b, b/162252536)
  • Sprawdzanie lint interfejsu API pod kątem braku metody gettera pasującego do Buildera jest włączone w androidx (I4bbea, b/138602561).
  • Naprawiono błąd, który powodował, że pomocnicze klasy .withLoadState* ConcatAdapter ulegały awarii z powodu powiadomienia RecyclerView z wątku w tle (I18bb5, b/170988309)
  • Naprawiono błąd, który powodował, że wczytywanie bardzo małej, niepustej strony czasami uniemożliwiało prawidłowe wywołanie wczytywania wstępnego.Iffda3 b/169259468

Wersja 3.0.0-alpha07

1 października 2020 roku

androidx.paging:paging-*:3.0.0-alpha07 został zwolniony. Wersja 3.0.0-alpha07 zawiera te commity.

Zmiany w interfejsie API

  • Operatory oparte na Guavie, które korzystają z interfejsu PagingData, obsługują teraz parametr Executor do kontrolowania kontekstu wykonania. (Id4372)

Poprawki błędów

  • Naprawiono wyjątek IndexOutOfBounds zgłaszany w RemoteMediatorze z powodu warunku wyścigu. (I00b7f, b/165821814)
  • Naprawiliśmy warunek wyścigu w konwersji DataSource -> PagingSource, który mógł powodować, że wynikowy PagingSource ignorował sygnały nieważności pochodzące z DataSource.
  • Rozwiązaliśmy problem z logiką pobierania strony, który czasami powodował, że nie można było pobrać nowych generacji PagingSource, dopóki nie wywołano metody PagingDataAdapter.refresh().
  • Rozwiązaliśmy problem, który powodował, że pozycja przewijania była czasami tracona podczas używania źródła danych przekonwertowanego na źródło strony (np. wygenerowane przez Room) w połączeniu z interfejsem RemoteMediator.

Darowizna zewnętrzna

  • Dziękujemy użytkownikowi @simonschiller za dodanie do PagingData operatorów asynchronicznych przekształceń RxJava2, RxJava3 i Guava.

Wersja 3.0.0-alpha06

2 września 2020 r.

androidx.paging:paging-*:3.0.0-alpha06 został zwolniony. Wersja 3.0.0-alpha06 zawiera te commity.

Zmiany w interfejsie API

  • UnsupportedOperationException z bardziej czytelnymi komunikatami dotyczącymi braku obsługi stabilnych identyfikatorów. Teraz, gdy wywoływana jest funkcja PagingDataAdapter.setHasStableIds, zgłaszany jest błąd. (Ib3890, b/158801427)

Poprawki błędów

  • Funkcja insertSeparators nie wyklucza już pustych stron, dzięki czemu prezenter może uwzględniać odstęp domyślny nawet wtedy, gdy wstawiono wiele pustych stron. (I9cff6, b/162538908)

Wersja 3.0.0-alpha05

19 sierpnia 2020 r.

androidx.paging:paging-*:3.0.0-alpha05 został zwolniony. Wersja 3.0.0-alpha05 zawiera te commity.

Poprawki błędów

  • Strony są teraz poprawnie pobierane z pamięci podręcznej, nawet jeśli wyświetlane dane są mocno przefiltrowane
  • Zwracanie wartości LoadResult.Error podczas ponownego wczytywania nie powoduje już nieprawidłowego ponownego wywoływania prób dostępu do elementu.

Darowizna zewnętrzna

  • Dziękujemy Clarze F. za pomoc w usuwaniu testów. (549612)

Wersja 3.0.0-alpha04

5 sierpnia 2020 r.

androidx.paging:paging-*:3.0.0-alpha04 został zwolniony. Wersja 3.0.0-alpha04 zawiera te commity.

Zmiany w interfejsie API

  • Dodano interfejs API peek() do interfejsów AsyncPagingDataDiffer i PagingDataAdapter, aby umożliwić dostęp do prezentowanych danych bez uruchamiania wczytywania strony. (I38898, b/159104197)
  • Do interfejsu API PagingDataAdapter i AsyncPagingDataDiffer dodaliśmy interfejs API snapshot(), aby umożliwić pobieranie prezentowanych produktów bez wywoływania pobierania strony. (I566b6, b/159104197)
  • Dodano konstruktor PagingData.from(List<T>), aby umożliwić wyświetlanie list statycznych, które można łączyć z ogólnym przepływem danych PagingData, aby wyświetlać listy statyczne w określonych stanach, np. przed zakończeniem początkowego odświeżania lub po prostu w celu testowania przekształceń. (Id134d)
  • Wycofanie interfejsów API dataRefresh Flow / Listener, ponieważ miały one służyć do udostępniania stanu prezentowanych elementów w przypadku odświeżania, ale dzięki ulepszeniu czasu wywołania zwrotnego loadState Flow / Listener oraz właściwości itemCount są zbędne (Ia19f3)
  • Dodano pakiety zgodności RxJava3 dla PagingSourceRemoteMediator (I49ef3, b/161480176).

Poprawki błędów

  • PositionalDataSource przekształcone w PagingSource za pomocą pomocnika toPagingSourceFactory, w tym PagingSource wygenerowane przez Room, są teraz prawidłowo oznaczone, aby umożliwić przeskoki. (I3e84c, b/162161201)
  • Naprawiono błąd, który powodował, że używanie synchronicznego wariantu submitData czasami prowadziło do kolizji powodującej błąd ClosedSendChannelException (I4d702, b/16019222)

Darowizna zewnętrzna

  • Dziękujemy Zacowi Sweersowi za dodanie w imieniu Slacka owijatek zgodności RxJava3. (I49ef3, b/161480176)

Wersja 3.0.0-alpha03

22 lipca 2020 r.

androidx.paging:paging-*:3.0.0-alpha03 został zwolniony. Wersja 3.0.0-alpha03 zawiera te commity.

Zmiany w interfejsie API

  • Konstruktor PagingState jest teraz publiczny, co powinno ułatwić testowanie implementacji funkcji getRefreshKey() (I8bf15)
  • ukryto w Java warianty funkcji mapowania DataSource w Kotlinie, aby rozwiązać problem niejednoznaczności między oryginalnymi a wersjami Kotlina; (If7b23, b/161150011)
  • Zbędne interfejsy API przeznaczone dla użytkowników Kotlina zostały oznaczone jako @JvmSynthetic (I56ae5).
  • Dodano przeciążenia konstruktora LoadResult.Page, w których domyślne wartości parametrów itemsBefore i itemsAfter to COUNT_UNDEFINED (I47849).
  • Istniejące operatory PagingData akceptują teraz metody zawieszania i wprowadziliśmy dla użytkowników Javy nowe operatory mapSync, flatMapSync i filterSync, które nie zawieszają. Istniejące metody przekształcania zostały przeniesione do funkcji rozszerzenia, więc użytkownicy Kotlina będą musieli je zaimportować. (I34239, b/159983232)

Poprawki błędów

  • Źródła stron (i źródła danych pozycyjnych) w ramach pokoju będą teraz wyświetlać separator wiodący na pierwszej stronie, dzięki czemu użytkownik nie będzie musiał przewijać, aby go zobaczyć. (I6f747, b/160257628)
  • Dostęp do elementów w miejscach do wklejenia teraz prawidłowo powoduje wczytywanie PagingSource, dopóki nie zostanie zwrócona strona, która spełnia wymagany indeks po przekształceniu przez funkcję PagingData.filter() (I95625, b/158763195)
  • Naprawiono błąd, który powodował, że przewijanie po zwróceniu błędu przez PagingSource mogło uniemożliwić ponowne wywołanie metody PagingDataAdapter.retry(). (I1084f, b/160194384)
  • Rozwiązanie problemu polegającego na tym, że po usunięciu strony mogły nie wczytywać się strony, mimo że dostęp do elementu był w zakresie prefetchDistance (Ie95ae, b/160038730)
  • Ustawienie PagingConfig.maxSize nie włącza już placeholderów po zdarzeniu usunięcia (I2be29, b/159667766)

Wersja 3.0.0-alpha02

24 czerwca 2020 r.

androidx.paging:paging-*:3.0.0-alpha02 został zwolniony. Wersja 3.0.0-alpha02 zawiera te commity.

Zmiany w interfejsie API

  • Dodano przeciążenia konstruktora PagingConfig z powszechnie używanymi wartościami domyślnymi (I39c50, b/158576040)
  • Dodano przeciążenia konstruktorów PagingDataAdapter i AsyncPagingDataDiffer z powszechnie używanymi wartościami domyślnymi (Ie91f5)
  • Interfejsy API adaptera, dataRefreshFlowdataRefreshListener przekazują teraz wartość logiczną, aby sygnalizować, czy PagingData jest pusty (I6e37e, b/159054196)
  • Dodano interfejsy API RxJava i Guava dla RemoteMediator – RxRemoteMediatorListenableFutureRemoteMediator.
  • Dodaliśmy do PagingState pomocnicze funkcje umożliwiające dostęp do typowych elementów, takich jak isEmpty()firstItemOrNull() (I3b5b6, b/158892717).

Poprawki błędów

  • Pager sprawdza teraz ponowne użycie PagingSource w fabryce, aby zapobiec przypadkowemu ponownemu użyciu nieprawidłowego PagingSource, który spowodował niejasny błąd (I99809, b/158486430)
  • Błędy z RemoteMediator REFRESH nie uniemożliwiają już ładowania PagingSource (I38b1b, b/158892717)
  • Wersja submitData, która nie zawiesza aplikacji, nie powoduje już awarii z powodu jednoczesnego zbierania danych z wielu obiektów PagingData, gdy jest wywoływana po wersji submitData, która zawiesza aplikację. (I26358, b/158048877)
  • Usunięto wyjątek „cannot collect twice from pager”, który mógł wystąpić po zmianie konfiguracji (I58bcc, b/158784811)

Wersja 3.0.0-alpha01

10 czerwca 2020 r.

androidx.paging:paging-*:3.0.0-alpha01 został zwolniony. Wersja 3.0.0-alpha01 zawiera te commity.

Biblioteka stron została zaktualizowana do wersji 3.0, aby umożliwić korzystanie z kilku nowych funkcji.

Nowe funkcje w wersji 3.0

Znane problemy

  • Dokumentacja Javadoc dla strony 3 nie jest jeszcze dostępna. W międzyczasie możesz korzystać z przewodników podanych powyżej lub z dokumentacji Kotlina. (b/158614050)

Wersja 2.1.2

Wersja 2.1.2

18 marca 2020 r.

androidx.paging:paging:2.1.2 został zwolniony. Wersja 2.1.2 zawiera te komity w porównaniu z 2.1.0.

Poprawki błędów

  • Naprawiono błąd IndexOutOfBoundsException występujący w rzadkich przypadkach podczas konwertowania pozycji podczas unieważniania.

Problem z wersją

  • Wersja 2.1.1 strony z przekierowaniami została nieprawidłowo opublikowana z nieprawidłowo skonfigurowanej gałęzi, co spowodowało ujawnienie częściowo zaimplementowanych interfejsów API i funkcji, które pojawią się w przyszłej wersji.

  • Paging 2.1.2 zawiera poprawkę dotyczącą wyśrodkowania ładowania, która została pierwotnie wydana w wersji 2.1.1, ale tym razem została poprawnie wybrana spośród wersji 2.1.0. Jeśli używasz obecnie wersji 2.1.1, zdecydowanie zalecamy uaktualnienie do tej wersji.

Wersja 2.1.1

Wersja 2.1.1

18 grudnia 2019 r.

androidx.paging:paging-*:2.1.1 został zwolniony. Wersja 2.1.1 zawiera te zatwierdzenia:

Poprawki błędów

  • Ciągłe wstępne wczytywanie z PositionalDataSource jest teraz wyśrodkowane wokół ostatniego dostępu, gdy obiekty zastępcze są wyłączone

Wersja 2.1.0

Wersja 2.1.0

25 stycznia 2019 r.

Strony 2.1.0 są publikowane bez zmian w porównaniu z wersją 2.1.0-rc01.

Wersja 2.1.0-rc01

6 grudnia 2018 r.

Strony 2.1.0-rc01 są publikowane bez zmian w porównaniu z wersją 2.1.0-beta01.

Wersja 2.1.0-beta01

1 listopada 2018 r.

Strony 2.1.0-beta01 są publikowane bez zmian w porównaniu z wersją 2.1.0-alpha01.

Wersja 2.1.0-alpha01

12 października 2018 r.

W wersji 2.1.0-alpha01 dodano 2 ważne funkcje: pomijanie stron i biblioteki rozszerzeń KTX dla każdego artefaktu. Dodano też kilka innych zmian w interfejsie API i poprawki błędów.

Zmiany w interfejsie API

  • Dodano PagedList.Config.Builder.setMaxSize(), aby ograniczyć liczbę elementów wczytanych do pamięci.
  • Dodano androidx.paging.Config() jako alternatywę dla PagedList.Config.Builder w języku Kotlin
  • Dodano androidx.paging.PagedList() jako alternatywę dla PagedList.Builder w języku Kotlin
  • Dodano DataSourceFactory.toLiveData() jako alternatywę dla LivePagedListBuilder w języku Kotlin
  • Dodano DataSourceFactory.toObservable()toFlowable() jako alternatywy dla funkcji RxPagedListBuilder w Kotlinie
  • Dodano AsyncPagedListDiffer.addPagedListListener(), aby słuchać, gdy PagedList jest zamieniany. b/111698609
  • Dodano wariant PagedListAdapter.onCurrentListChanged(), który spełnia wymagania starej i nowej listy. Wcześniejszy wariant został wycofany.
  • Dodano warianty PagedListAdapter/AsyncPagedListDiffer.submitList(), które wywołują dodatkową funkcję wywołania zwrotnego, która jest wywoływana po wyświetleniu listy stron po porównaniu. Umożliwia to synchronizowanie wymiany PagedList z innymi aktualizacjami interfejsu użytkownika. b/73781068
  • PagedList.getLoadedCount() dodano, aby poinformować, ile elementów znajduje się w pamięci. Pamiętaj, że jeśli zaimki są wyłączone, zwracana wartość zawsze wynosi .size().

Poprawki błędów

  • Rozwiązano problem z konkurencją podczas porównywania, jeśli listy są używane ponownie b/111591017
  • Funkcja PagedList.loadAround() zwraca teraz błąd IndexOutOfBoundsException, gdy indeks jest nieprawidłowy. Wcześniej mogło dojść do awarii z niejasnym wyjątkiem.
  • Rozwiązanie problemu polegającego na tym, że bardzo mały początkowy rozmiar wczytywania w połączeniu z niezmienionymi danymi powodował brak dalszego wczytywania b/113122599

Wersja 2.0.0

Wersja 2.0.0

1 października 2018 r.

Strony 2.0.0 zostały opublikowane z jednym poprawką błędu.

Poprawki błędów

  • Poprawiono błąd powodujący awarię, który mógł wystąpić podczas bardzo szybkiego przewijania za pomocą PositionalDataSource i miejsc docelowych b/114635383.

Wersja 2.0.0-beta01

2 lipca 2018 r.

Poprawki błędów

  • Naprawiono problem z znikaniem treści w niektórych przypadkach dodawania na początku (puste pola zastąpione, źródło danych pozycyjnych) b/80149146
  • (Już wydane w wersji 1.0.1) Naprawiono problemy z zawieszaniem się, które występowały, gdy PagedListAdapterAsyncPagedListDiffer nie mogły przekazać sygnału o przenoszeniu zdarzeń. b/110711937

Zależności sprzed AndroidX

W przypadku wersji Paging, które pojawiły się przed Androidem X, uwzględnij te zależności:

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

Wersja 1.0.1

Wersja 1.0.1

26 czerwca 2018 r.

Paging 1.0.1 został wydany z jednym poprawką błędu w wersji runtime. Zdecydowanie zalecamy używanie 1.0.1 ze względu na stabilność. Wersja Paging RxJava2 1.0.1 została również wydana i jest identyczna z wersją 1.0.0-rc1.

Poprawki błędów

  • Rozwiązaliśmy problemy z awariami, które występowały, gdy PagedListAdapter i AsyncPagedListDiffer nie sygnalizowały zdarzeń przenoszenia. b/110711937

RxJava2 w wersji 1.0.0

RxJava2 w wersji 1.0.0-rc1

16 maja 2018 r.

Paging RxJava2 1.0.0-rc1 przechodzi do wersji kandydackiej bez zmian w stosunku do początkowej wersji alpha.

Wersja 1.0.0

Wersja 1.0.0-rc1

19 kwietnia 2018 r. Wersja kandydująca do publikacji: paging

W ramach wersji 1.0.0 nie mamy żadnych znanych problemów ani nowych funkcji. Zaktualizuj swoje projekty, aby używać 1.0.0-rc1, i pomóż nam przeprowadzić testy porównawcze, abyśmy mogli udostępnić stabilną wersję 1.0.0.

W tej wersji nie ma żadnych zmian, jest ona taka sama jak 1.0.0-beta1.

Wersja 1.0.0-beta1

5 kwietnia 2018 r.

Strony będą przez krótki czas dostępne w wersji beta, zanim zostaną udostępnione jako wersja kandydata do wydania. Nie planujemy wprowadzania dalszych zmian w interfejsie API Paging 1.0, a standardy dotyczące wprowadzania zmian w interfejsach API są bardzo wysokie.

Obsługa Pagingu w wersji alfa RxJava2 została wydana jako osobny opcjonalny moduł (android.arch.paging:rxjava2:1.0.0-alpha1) i tymczasowo będzie wydawana osobno, dopóki nie osiągnie stabilnej wersji.

Ta nowa biblioteka udostępnia alternatywę dla RxJava2 w postaci klasy LivePagedListBuilder, która umożliwia tworzenie obiektów ObservableFlowable, przyjmując obiekty Scheduler zamiast Executor:

Kotlin

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

Java

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

Nowe funkcje

  • RxPagedListBuilder jest dodawany za pomocą nowego artefaktu android.arch.paging:rxjava2.

Zmiany w interfejsie API

  • Zmiany w interfejsie API, które mają na celu doprecyzowanie roli wykonawców w kreatorach:

    • Zmieniono nazwę setBackgroundThreadExecutor() na setFetchExecutor() (w elementach PagedList.BuilderLivePagedListBuilder)

    • Nazwa setMainThreadExecutor() została zmieniona na setNotifyExecutor() (w elemencie PagedList.Builder).

  • Ustawienie członkostwa PagedList.mCallbacks jako prywatnego zostało naprawione.

Poprawki błędów

  • LivePagedListBuilder inicjuje początkowe PagedList w wyznaczonym wykonawcy, a nie w poolu wątków IO komponentów Arch.

  • Naprawiono zachowanie unieważnienia w wewnętrznych obudowach DataSource (używanych do implementacji DataSource.map, a także wczytywania PositionalDataSource z wyłączonymi miejscem na dane) b/77237534

Wersja 1.0.0-alpha7

21 marca 2018 r.

Funkcja przekierowywania 1.0.0-alpha7 została wydana razem z cyklem życia 1.1.1. Funkcja Paging alpha7 zależy od przeniesienia wspomnianej powyżej klasy Function, dlatego musisz zaktualizować zależność lifecycle:runtime na android.arch.lifecycle:runtime:1.1.1.

Paging alpha7 ma być ostatnią wersją przed wydaniem wersji beta.

Zmiany w interfejsie API

  • Obiekty DataSource.LoadParams mają teraz publiczny konstruktor, a obiekty DataSource.LoadCallback są abstrakcyjne. Umożliwia to owinięcie DataSource lub bezpośrednie przetestowanie DataSource za pomocą fałszywego wywołania zwrotnego. b/72600421
  • Mapery dla DataSource i DataSource.Factory
    • map(Function<IN,OUT>) umożliwia przekształcanie, owijanie i dekorowanie wyników wczytanych przez DataSource.
    • mapByPage(<List<IN>,List<OUT>>) umożliwia to samo w przypadku przetwarzania zbiorczego (np. jeśli elementy wczytane z SQL muszą dodatkowo wysłać zapytanie do osobnej bazy danych, można to zrobić zbiorczo).
  • PagedList#getDataSource() została dodana jako wygodna metoda. b/72611341
  • Wszystkie wycofane klasy zostały usunięte z interfejsu API, w tym pozostałości pakietu recyclerview.extensions i elementu LivePagedListProvider.
  • Aby umożliwić korzystanie z funkcji mapy, zmieniono interfejs DataSource.Factory na abstrakcyjną klasę.

Poprawki błędów

  • Zmiana w edytorze: wersja ostateczna. b/70848565
  • Implementacja Room DataSource została naprawiona, aby obsługiwać zapytania wielotablicowe. Ta poprawka jest zawarta w Room 1.1.0-beta1 (patrz wyżej).
  • Naprawiliśmy błąd polegający na tym, że funkcja BoundaryCallback.onItemAtEndLoaded nie była wywoływana w przypadku funkcji PositionalDataSource, jeśli symbole zastępcze były włączone, a łączna wielkość była wielokrotnością rozmiaru strony.

Wersja 1.0.0-alpha5

22 stycznia 2018 r.

Poprawki błędów

  • Naprawianie wczytywania strony, gdy puste miejsca są wyłączone b/70573345
  • Dodatkowe logowanie na potrzeby śledzenia błędu IllegalArgumentException b/70360195 (i przypuszczalnej poprawki po stronie Room)
  • Przykładowy kod Javadoc rozwiązuje problemy b/70411933 i b/71467637