Podział

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

Ta tabela zawiera listę wszystkich artefaktów w grupie androidx.paging.

Artefakt Wersja stabilna Kandydat do publikacji Wersja Beta Wersja alfa
stronicowanie-* 3.2.1 - - 3.3.0-alfa05
paging-compose 3.2.1 - - 3.3.0-alfa05
Ostatnia aktualizacja tej biblioteki: 20 marca 2024 r.

Deklarowanie zależności

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

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

Odlotowy

dependencies {
  def paging_version = "3.2.1"

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

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

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

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

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

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

Kotlin

dependencies {
  val paging_version = "3.2.1"

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

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

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

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

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

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

Informacje o korzystaniu z rozszerzeń Kotlin 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ć Jetpack. Daj nam znać, jeśli znajdziesz nowe wydania lub masz pomysły na ulepszenie tej biblioteki. Zanim utworzysz nową bibliotekę, przejrzyj problemy z tą biblioteką. Możesz oddać głos w ramach istniejącego problemu, klikając przycisk gwiazdki.

Utwórz nowy numer

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

Wersja 3.3

Wersja 3.3.0-alfa05

20 marca 2024 r.

Aplikacja androidx.paging:paging-*:3.3.0-alpha05 została zwolniona. Wersja 3.3.0-alpha05 zawiera te zatwierdzenia.

Zmiany w interfejsie API

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

Wersja 3.3.0-alfa04

6 marca 2024 roku

Aplikacja androidx.paging:paging-*:3.3.0-alpha04 została zwolniona. Wersja 3.3.0-alpha04 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono drobne błędy w dokumentacji związane z dodaniem zgodności z wieloma platformami Kotlin. (Aosp/2950785)

Wersja 3.3.0-alfa03

7 lutego 2024 r.

Aplikacja androidx.paging:paging-*:3.3.0-alpha03 została zwolniona. Wersja 3.3.0-alpha03 zawiera te zatwierdzenia.

Nowe funkcje

  • PagingDataPresenter jest teraz klasą publiczną. Wieloplatformowe prezentacje można teraz tworzyć na bazie elementów PagingDataPresenter, zamiast wymagać wewnętrznych interfejsów API stronicowania lub interfejsu AsyncPagingDataDiffer paging-runtime. (Id1f74, b/315214786)
  • Dodano nowe metody pomocnicze LoadStates i CombinedLoadStates, aby sprawdzić, czy LoadStates ma stan Błąd lub NotLoading. Dodano też nowy interfejs API, który czeka na LoadStateFlow, dopóki obciążenie nie ustabilizuje się w stanie NotLoading lub Błąd. (Id6c67).

Zmiana działania

  • PagingData.empty() domyślnie wysyła teraz stany NotLoading, chyba że do swojego konstruktora zostanie przekazany niestandardowy parametr LoadStates. Ta wartość różni się od obecnego zachowania, w którym nie wysyła zdarzeń LoadStates, gdy jest przesyłany do PagingDataAdapter, lub wysyła stany wczytywania, gdy są zbierane jako LazyPagingItems. Po zebraniu danych jako LazyPagingItems natychmiast przy tworzeniu pierwszej kompozycji będzie także wyświetlana pusta lista. (I4d11d, b/301833847)

Wersja 3.3.0-alfa02

20 września 2023 r.

Aplikacja androidx.paging:paging-*:3.3.0-alpha02 została zwolniona. Wersja 3.3.0-alpha02 zawiera te zatwierdzenia.

Zgodność z Kotlin na wielu platformach

Obecnie funkcja stronicowania wysyła artefakty zgodne z platformą Kotlin Multiplatform, w dużej mierze dzięki kopiowaniu danych z projektu multiplatform-paging firmy CashApp. Pozwoli nam to uniknąć rozbieżności między 2 repozytoriami i zapewnić ich zgodność.

  • Pakiet paging-common przeniósł wszystkie interfejsy API Stron 3 do common i jest teraz zgodny nie tylko z Androidem, ale także z vm i iOS.
  • Kod w paging-testing został przeniesiony do common i jest teraz zgodny nie tylko z Androidem, ale także z JVM i iOS.
  • paging-compose przeniósł swój kod do common i wysyła artefakt Androida zgodnie z wieloplatformową obsługą androidx.compose.
  • Aplikacje paging-runtime, paging-guava, paging-rxjava2 i paging-rxjava3 będą nadal dostępne tylko na Androidzie.

Zmiany w interfejsie API

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

Wkład z zewnątrz

Wersja 3.3.0-alfa01

20 września 2023 r.

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

Wersja 3.2

Wersja 3.2.1

6 września 2023 r.

Aplikacja androidx.paging:paging-*:3.2.1 została zwolniona. Wersja 3.2.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono błąd, który powodował, że interfejs API asSnapshot() artefaktu testowania stron zawieszał się po przekazaniu przepływu utworzonego za pomocą PagingData.from(List), ponieważ interfejs asSnapshot() nie miał żadnych informacji o po zakończeniu wczytywania (w przeciwieństwie do przeciążenia PagingData.from(List, LoadStates)). To rozwiązanie działa tylko w przypadku przepływów możliwych do uzupełniania (np. flowOf(PagingData.from(...))). W przypadku przepływów, które nie są kompletne (np. MutableStateFlow, użyj przeciążenia PagingData.from, które udostępnia LoadStates. (I502c3)
  • Strona tworzenia wiadomości na stronę wewnętrzna korzysta teraz wewnętrznie z metody AndroidUiDispatcher.Main, by nowe dane były dostępne w tej samej ramce, w której zakończyło się wczytywanie. (Ia55af)

Wersja 3.2.0

26 lipca 2023 r.

Aplikacja androidx.paging:paging-*:3.2.0 została zwolniona. Wersja 3.2.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 3.1.0

  • Tworzenie strony w trybie strony osiągnęło stabilność interfejsu API i zostało scalone z pozostałymi elementami strony, gdzie jego wersja pasuje teraz do wszystkich innych artefaktów Paging. Zmiany wprowadzone od wersji 3.1.0 obejmują:
    • Obsługa wyświetlania podglądu listy fałszywych danych przez utworzenie PagingData.from(fakeData) i zapakowanie tej wartości w elemencie PagingData w elemencie MutableStateFlow (np. MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Przekaż ten proces do elementu kompozycyjnego @Preview jako odbiornik, aby wyświetlić jego podgląd w domenie collectAsLazyPagingItems().
    • Obsługa wszystkich leniwch układów, takich jak LazyVerticalGrid i HorizontalPager, oraz niestandardowych leniwch komponentów z bibliotek Wear i TV. Udało się to osiągnąć za pomocą nowych metod rozszerzenia LazyPagingItems niższego poziomu itemKey i itemContentType, które pomagają wdrożyć parametry key i contentType w standardowych interfejsach API items, które już istnieją w interfejsach LazyColumn i LazyVerticalGrid, a także ich odpowiednikach w interfejsach API takich jak HorizontalPager.
    • Reguły items(lazyPagingItems) i itemsIndexed(lazyPagingItems), które obsługują tylko LazyListScope, zostały wycofane.
  • Nowy artefakt paging-testing, który udostępnia interfejsy API zaprojektowane pod kątem testowania jednostkowego każdej warstwy aplikacji oraz integracji tej funkcji z stronami w odizolowaniu. Obejmuje na przykład:
    • Klasa TestPager, która umożliwia sprawdzanie działania własnej niestandardowej implementacji PagingSource niezależnie od Pager i rzeczywistego interfejsu.
    • asPagingSourceFactory Interfejsy API do przekształcenia Flow<List<Value>> lub statycznego elementu List<Value> w element PagingSourceFactory, który można przekazać do pagera w testach
    • asSnapshot Rozszerzenie Kotlin w Flow<PagingData<Value>>, co przekłada się Flow<PagingData<Value>> na bezpośrednie List<Value>. asSnapshot lambda umożliwia naśladowanie interfejsu aplikacji za pomocą interfejsów API takich jak scrollTo czy appendScrollWhile, dzięki czemu możesz sprawdzić, czy podsumowanie danych jest poprawne w dowolnym momencie zbioru danych stronicowanych.
  • Dodaliśmy logi domyślne, aby udostępnić informacje na potrzeby debugowania stron na 2 poziomach: VERBOSE i DEBUG. Logi można włączyć za pomocą polecenia adb shell setprop log.tag.Paging [DEBUG|VERBOSE]. Dotyczy to zarówno strony w widoku stron, jak i z widokiem strony Kopia.
  • Dodano konstruktory dla elementów PagingDataAdapter i AsyncPagingDataDiffer, które akceptują konstruktory CoroutineContext zamiast CoroutineDispatcher.
  • Dodaliśmy nowy, funkcjonalny interfejs PagingSourceFactory, który daje wyraźniejszy dostęp do interfejsu API niż poprzednie lambda () -> PagingSource. Ta fabryka może służyć do tworzenia instancji pagera.

Wersja 3.2.0-rc01

21 czerwca 2023 r.

Aplikacja androidx.paging:paging-*:3.2.0-rc01 została zwolniona. Wersja 3.2.0-rc01 zawiera te zatwierdzenia.

Wkład z zewnątrz

Wersja 3.2.0-beta01

7 czerwca 2023 r.

Aplikacja androidx.paging:paging-*:3.2.0-beta01 została zwolniona. Wersja 3.2.0-beta01 zawiera te zatwierdzenia.

Paging Compose

  • Tworzenie stronicowania oficjalnie osiągnęło stabilność interfejsu API. W związku z tym wersja 1.0.0-alpha20 została zaktualizowana, aby była zgodna z wersją wszystkich innych artefaktów stronicowania.

Zmiany w interfejsie API

Wersja 3.2.0-alfa06

24 maja 2023 r.

Aplikacja androidx.paging:paging-*:3.2.0-alpha06 została zwolniona. Wersja 3.2.0-alpha06 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodaliśmy nowy, funkcjonalny interfejs PagingSourceFactory, który zapewnia bardziej jawną powierzchnię interfejsu API niż dotychczasowe lambda typu () -> PagingSource. Ta fabryka może służyć do utworzenia instancji Pager. (I33165, b/280655188)
  • Dodano nowy interfejs API paging-testing o wartości List<Value>.asPagingSourceFactory(), aby uzyskać interfejs PagingSourceFactory, który wczytuje się tylko ze stałej listy danych. Dotychczasowe rozszerzenie w domenie Flow<List<Value>> powinno nadal być używane do testowania z wieloma generacjami danych statycznych. (Id34d1, b/280655188)

Zmiany w interfejsie API

  • Wszystkie publiczne interfejsy API w testowaniu stronicowania są teraz oznaczane adnotacjami @VisibleForTesting, aby zapewnić, że będą one używane tylko w testach. (I7db6e)
  • Interfejs API asSnapshot nie wymaga już przekazywania CoroutineScope. Obecnie domyślnie używany jest kontekst odziedziczony z zakresu nadrzędnego. (Id0a78, b/282240990)
  • Zmieniono kolejność parametrów konstruktora TestPager tak, aby intuicyjnie odpowiadała kolejności rzeczywistych parametrów konstruktora Pager (I6185a).
  • Użycie funkcji lambda typu () -> PagingSource<Key, Value> w testach stronicowania zostało przeniesione do typu PagingSourceFactory<Key, Value>. (I4a950, b/280655188)

Zmiany w działaniu

  • Główny dyspozytor nie musi już uruchamiać testów stronicowania asSnapshot. Ustawienie go nie powoduje już żadnych zmian w działaniu testowym. (Ie56ea)

Wersja 3.2.0-alfa05

3 maja 2023 r.

Aplikacja androidx.paging:paging-*:3.2.0-alpha05 została zwolniona. Wersja 3.2.0-alpha05 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Interfejs API Paging Testing dla interfejsu asSnapshot przyjmuje teraz domyślnie wartość lambda jako pustą wartość parametru loadOperations. Umożliwia to wywoływanie funkcji asSnapshot bez przekazywania żadnych operacji wczytywania w celu pobrania danych z wstępnego wczytywania odświeżania. (Ied354, b/277233770)

Ulepszenia dokumentacji

  • Zaktualizowaliśmy dokumentację dotyczącą asPagingSourceFactory(), aby wyjaśnić, że jest to metoda rozszerzenia Flow, która zwraca fabrykę wielokrotnego użytku do generowania instancji PagingSource. (I5ff4f, I705b5)
  • Zaktualizowaliśmy dokumentację konstruktora LoadResult.Page, aby wyjaśnić, że należy zastępować elementy itemsBefore i itemsAfter w celu obsługi skakania. (Ied354)

Treści opublikowane przez użytkowników z zewnątrz

Wersja 3.2.0-alfa04

8 lutego 2023 r.

Aplikacja androidx.paging:paging-*:3.2.0-alpha04 została zwolniona. Wersja 3.2.0-alpha04 zawiera te zatwierdzenia.

Testowanie stronicowania

  • Artefakt paging-testing zawiera teraz metodę asPagingSourceFactory do tworzenia obiektu pagingSourceFactory z obiektu Flow<List<Value>>, który ma zostać dostarczony do pagera. Każdy parametr List<Value>> generowany przez przepływ reprezentuje generowanie danych z podziałem na strony. Ułatwia to testowanie stronicowania np. przekształceń PagingData przez udawanie źródła danych, z którego pager może pobierać dane. (I6f230, b/235528239)
  • Artefakt paging-testing został rozszerzony o nowe interfejsy API, które umożliwiają sprawdzanie, czy dane zawarte w zasadzie Flow<PagingData<T>> są prawidłowe. Dzięki temu można na przykład potwierdzić dane wyjściowe funkcji Flow<PagingData<T>> z warstwy ViewModel.

    Użyjesz w tym celu rozszerzenia asSnapshot Kotlin w Flow<PagingData<Value>>, które przekłada się Flow<PagingData<Value>> na bezpośrednie List<Value>. Funkcja lambda asSnapshot umożliwia naśladowanie interfejsu aplikacji za pomocą interfejsów API takich jak scrollTo czy appendScrollWhile w powtarzalny i spójny sposób. Dzięki temu możesz sprawdzić, czy zrzut danych jest prawidłowy w dowolnym momencie zbioru danych stronowanych.

    // 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 zostać uruchomiona w ciągu runTest. Więcej informacji znajdziesz w artykule Testowanie kohort Kotlin na Androidzie. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic59,8/82}

Zmiany w interfejsie API

  • Wywołania interfejsu getItem i peek w AsyncPagingDataDiffer i PagingDataAdapter są teraz prawidłowo oznaczane jako możliwe do wywołania tylko w wątku głównym. (I699b6)
  • Usunęliśmy symbole wieloznaczne z typów ogólnych używanych przez TestPager, co ułatwi korzystanie z wyników tych metod w kodzie napisanym w języku programowania Java. (I56c42)

Wersja 3.2.0-alfa03

24 października 2022 r.

Aplikacja androidx.paging:paging-*:3.2.0-alpha03 została zwolniona. Wersja 3.2.0-alpha03 zawiera te zatwierdzenia.

Testowanie stronicowania

Ta wersja zawiera nowy artefakt: paging-testing. Ten artefakt udostępnia interfejsy API zaprojektowane z myślą o testowaniu jednostkowym każdej warstwy aplikacji oraz o jej integracji z otwieraniem stron.

Na przykład ta pierwsza wersja zawiera klasę TestPager, która umożliwia sprawdzanie działania własnej niestandardowej implementacji PagingSource niezależnie od Pager i rzeczywistego interfejsu użytkownika, który normalnie jest potrzebny do symulowania kompleksowej integracji stron.

Element TestPager powinien być uważany za fałszywypodwójny wynik testowy, który odzwierciedla prawdziwą implementację obiektu Pager, a jednocześnie zapewnia uproszczoną powierzchnię interfejsu API do testowania PagingSource. Te interfejsy API są interfejsami API suspend i powinny być uruchamiane w runTest zgodnie z opisem w przewodniku testowania kotlin na Androidzie.

Przykłady użycia tych interfejsów API można znaleźć w testach room-paging, których refaktoryzację przetworzono na TestPager.

Zmiany w interfejsie API

  • Umożliwia wygodne wykonywanie iteracji w trybie LoadResult.Page.data do LoadResult.Page.iterator(). Pośrednio to zezwala na użycie metody flatten biblioteki standardowej Kotlin, gdy podano właściwość List<LoadResult.Page>, np. z właściwości pages PagingState przekazaną do metody PagingSource.getRefreshKey. (Ie0718)

Wersja 3.2.0-alfa02

10 sierpnia 2022 r.

Aplikacja androidx.paging:paging-*:3.2.0-alpha02 została zwolniona. Wersja 3.2.0-alpha02 zawiera te zatwierdzenia.

Nowe funkcje

  • Strona strony udostępnia teraz logi za pomocą klas AsyncPagingDataDiffer lub PagingDataAdapter, które udostępniają 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

  • Usunięto brakujący błąd konstruktora PagingDataDiffer występujący w przypadku korzystania z zasady paging-common:3.2.0-alpha01 w środowisku wykonawczym paging-runtime:3.1.1 lub starszym.(b/235256201)

Wersja 3.2.0-alfa01

1 czerwca 2022 r.

Aplikacja androidx.paging:paging-*:3.2.0-alpha01 została zwolniona. Wersja 3.2.0-alpha01 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Dodano konstruktory dla elementów PagingDataAdapter i AsyncPagingDataDiffer, które akceptują konstruktory CoroutineContext zamiast CoroutineDispatcher. (IDc878).
  • Domyślnie uprawnienia PagingData.from() i PagingData.empty() nie będą już miały wpływu na CombinedLoadStates po stronie prowadzącego. Dodaliśmy nowe przeciążenie, które umożliwia przekazywanie instrukcji sourceLoadStates i remoteLoadStates do tych konstruktorów, aby zachować dotychczasowe działanie ustawienia LoadStates, aby było w pełni końcowe (np. NotLoading(endOfPaginationReached = false)) z możliwością dodania w razie potrzeby stanów zdalnych. Jeśli pole LoadStates nie zostanie przekazane, poprzednia wartość CombinedLoadStates zostanie zachowana po stronie prowadzącego po otrzymaniu statycznego parametru PagingData. (Ic3ce5, b/205344028)

Poprawki błędów

  • Wynik funkcji PagingSource.getRefreshKey() ma teraz prawidłowy priorytet względem parametru initialKey w przypadkach, gdy zwróci wartość null, ale ustawiono niepustą wartość initialKey. (Ic9542, b/230391606)

Wkład z zewnątrz

  • Zaktualizowano :compose:ui:ui-test api (updateApi) w związku z migracją test-coroutines-lib (I3366d)

Wersja 3.1

Wersja 3.1.1

9 marca 2022 r.

Aplikacja androidx.paging:paging-*:3.1.1 została zwolniona. 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 plik .cachedIn(). Ta zmiana znacznie ułatwia reagowanie na zmiany w elemencie LoadState przez usunięcie zbędnych zdarzeń LoadState.NotLoading, które powstały między kolejnymi próbami nieudanego wczytania, podczas odświeżania lub unieważniania.

Wersja 3.1.0

17 listopada 2021 r.

Aplikacja androidx.paging:paging-*:3.1.0 została zwolniona. Wersja 3.1.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 3.0.0

  • Interfejsy API Flow<PagingData>.observable i Flow<PagingData>.flowable nie są już eksperymentalne
  • Zmiany w działaniu LoadState:
    • endOfPaginationReached to teraz zawsze false w przypadku LoadType.REFRESH zarówno w przypadku PagingSource, jak i RemoteMediator
    • Ze strony LoadStates ze strony czekają teraz prawidłowe wartości ze źródeł PagingSource i RemoteMediator, zanim będą przesyłane w dół. Nowe generacje funkcji PagingData będą teraz zawsze prawidłowo zaczynać od Loading w stanie odświeżania, a w niektórych przypadkach nie będą resetowane do wartości NotLoading.
    • Metody .loadStateFlow i .addLoadStateListener w interfejsach API prowadzącego nie wysyłają już nadmiarowo początkowego parametru CombinedLoadStates, który zawsze ma stan mediatora ustawiony na null
  • Anulowanie w poprzednich pokoleniach często ma miejsce w przypadku unieważnienia lub nowych pokoleń. Nie powinno już być wymagane używanie .collectLatest w systemie Flow<PagingData>, ale nadal jest to zalecane.
  • Zapytanie PagingSource.LoadResult.Invalid zostało dodane jako nowy typ zwrotu z PagingSource.load, co powoduje, że strona Paging odrzuca wszelkie oczekujące i przyszłe żądania wczytania do tego elementu PagingSource i unieważnia go. Ten zwracany typ służy do obsługi potencjalnie nieprawidłowych lub nieaktualnych danych, które mogą zostać zwrócone z bazy danych lub sieci.
  • Dodano interfejsy API prezentacji .onPagesPresented i .addOnPagesUpdatedListener, które uruchamiały się synchronicznie w miarę wyświetlania stron w interfejsie. Aktualizacje stron mogą odbywać się w tych sytuacjach:
    • Początkowe wczytywanie nowej generacji PagingData kończy się niezależnie od tego, czy nowa generacja zawiera jakiekolwiek zmiany w prezentowanych elementach, np. Nowa generacja, która ukończy wstępne wczytywanie bez aktualizacji, nadal będzie aktywować wywołanie zwrotne, ponieważ lista jest dokładnie taka sama.
    • Strona zostanie wstawiona, nawet jeśli nie zawiera żadnych nowych elementów.
    • Strona zostaje usunięta, nawet jeśli była pusta.

Wersja 3.1.0-rc01

3 listopada 2021 r.

Aplikacja androidx.paging:paging-*:3.1.0-rc01 została zwolniona. Wersja 3.1.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono warunek wyścigu + wyciek pamięci w funkcji .cachedIn() w przypadkach, gdy podczas strony w dół nie było kilku zdarzeń wczytywania, gdy nie było żadnych obserwacji lub między obserwatorem przełączania się na nowe dane PagingData. (Ib682e)

Wersja 3.1.0-beta01

13 października 2021 r.

Aplikacja androidx.paging:paging-*:3.1.0-beta01 została zwolniona. Wersja 3.1.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono problem, który powodował, że wiele szybkiego dostępu do elementów powodowało ich porzucanie na potrzeby wstępnego pobierania z wyprzedzeniem, co powodowało zatrzymanie wczytywania strony. Problem ten występuje szczególnie wtedy, gdy wiele elementów jest układanych jednocześnie w kolejności, w której wczytywanie odbywa się zgodnie z kierunkiem przewijania. Dostęp do tych elementów jest teraz buforowany i synchronicznie dzielony pod względem priorytetu, aby zapobiec ich utracie. (Aosp/1833273)

Wersja 3.1.0-alfa04

29 września 2021 r.

Aplikacja androidx.paging:paging-*:3.1.0-alpha04 została zwolniona. Wersja 3.1.0-alpha04 zawiera te zatwierdzenia.

Zmiany w interfejsie API

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

Poprawki błędów

  • W przypadku LoadStates endOfPaginationReached ma teraz zawsze wartość false dla LoadType.REFRESH. Wcześniej w przypadku elementu RemoteMediator REFRESH wartość endOfPaginationReached mogła wynosić true, ale nie elementu PagingSource. To zachowanie jest teraz skonsolidowane i zawsze zwraca false, ponieważ nigdy nie ma sensu, aby polecenie REFRESH było terminalem. Jest to teraz udokumentowane w ramach umowy dotyczącej interfejsu API w LoadStates. Decydując o zakończeniu podziału na strony, pamiętaj, by zawsze to zrobić zgodnie z instrukcjami APPEND lub PREPEND. (I047b6)
  • Obiekty LoadState z strony Paging oczekują teraz na prawidłowe wartości z obu metod, zanim zostaną przesłane między generacjami. Dzięki temu nowe generacje PagingData nie będą wysyłać wartości NotLoading in CommitedLoadStates.source.refresh, jeśli już to nastąpiło. Nowe generacje PagingData będą teraz zawsze prawidłowo rozpoczynały się od wczytywania w stanie odświeżania, a nie w niektórych przypadkach po raz pierwszy do nieprawidłowego stanu wczytywania.

    Anulowanie w poprzednich pokoleniach często ma miejsce w przypadku unieważnienia lub nowych pokoleń. Nie powinno się już używać .collectLast on Flow<PagingData>, ale nadal jest to zdecydowanie zalecane (I0b2b5, b/177351336, b/195028524).

  • Metody .loadStateFlow i .addLoadStateListener w interfejsach API prowadzącego nie wysyłają już nadmiarowo początkowego parametru CombinedLoadStates, który zawsze ma stan mediatora ustawiony na null, a stany źródła na NotLoading(endOfPaginationReached = false). Oznacza to, że:

    1. jeśli używasz elementu RemoteMediator, stany mediatora będą zawsze wypełniane.
    2. Zarejestrowanie w .loadStateFlow nowego detektora loadState lub nowego kolektoru nie będzie już emitować bieżącej wartości, jeśli nie otrzyma prawdziwego parametru CombinedLoadStates od PagingData. Może się tak zdarzyć, jeśli kolektor lub detektor uruchomi się przed przesłaniem elementu PagingData. (I1a748)

Wersja 3.1.0-alfa03

21 lipca 2021 r.

Aplikacja androidx.paging:paging-*:3.1.0-alpha03 została zwolniona. Wersja 3.1.0-alpha03 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Do parametru PagingSource dodano trzeci typ zwracany LoadResult.Invalid. Gdy parametr PagingSource.load zwraca wartość LoadResult.Invalid, stronicowanie spowoduje odrzucenie wczytanych danych i unieważnienie elementu PagingSource. Ten zwracany typ ma na celu obsługę potencjalnie nieprawidłowych lub nieaktualnych danych, które mogą zostać zwrócone z bazy danych lub sieci.

    Jeśli na przykład baza danych jest zapisywana w bazie danych, ale źródło danych PagingSource nie unieważnia się na czas, może zwracać niespójne wyniki, gdy jej implementacja zależy od niezmienności zbioru danych, z którego wczytuje się baza danych (np. LIMIT OFFSET – implementacje bazy danych w stylu OFFSET). W takiej sytuacji zalecamy sprawdzenie po wczytaniu danych pod kątem unieważnienia i zwrócenie zdarzenia LoadResult.Invalid, co powoduje, że strona Paging odrzuca wszelkie oczekujące i przyszłe żądania obciążenia wysyłane do tego PagingSource i je unieważnia.

    Ten zwracany typ jest również obsługiwany przez interfejs Paging2 API, który korzysta z LivePagedList lub RxPagedList. Gdy używasz elementu PagingSource z interfejsami API PagedList platformy Paging2, element PagedList zostaje natychmiast odłączony, co zatrzymuje dalsze próby wczytania danych na tej liście i wywołuje unieważnienie na stronie PagingSource.

    LoadResult to zapieczętowana klasa, co oznacza, że jest to zmiana niekompatybilna ze źródłem, dlatego przypadki użycia bezpośrednio korzystające z wyników PagingSource.load będą obsługiwać LoadResult.Invalid podczas kompilacji. Na przykład użytkownicy Kotlin korzystający z informacji o tym, kiedy należy sprawdzić typ zwrotu, będą musieli dodać kontrolę pod kątem nieprawidłowego typu. (Id6bd3, b/191806126, b/192013267)

Poprawki błędów

  • Wywołania zwrotne unieważniające dodane za pomocą PagingSource.enrollInvalidatedCallback lub DataSource.addInvalidatedCallback są teraz uruchamiane automatycznie, jeśli zostały zarejestrowane w źródle danych PagingSource lub DataSource, które były już nieprawidłowe. Rozwiązuje to warunek wyścigu, który powodował, że strony otrzymywały sygnały o nieprawidłowości i utknęły, gdy podane źródło było już nieprawidłowe podczas początkowego wczytywania. Dodatkowo unieważnione wywołania zwrotne są teraz prawidłowo usuwane po aktywowaniu, ponieważ są gwarantowane co najwyżej raz. (I27e69)
  • Przesyłanie zmiennej początkowej wartości początkowej (InitialPagedList) z nowo utworzonego strumienia PagedList, np. LivePagedListBuilder lub RxPagedListBuilder nie będą już usuwać wczytanych wcześniej danych.

Wersja 3.1.0-alfa02

1 lipca 2021 r.

Aplikacja androidx.paging:paging-*:3.1.0-alpha02 została zwolniona. Wersja 3.1.0-alpha02 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodano interfejsy API nasłuchiwania onPagesPresented i prezentacji przepływów, które uruchamiają się natychmiast po zaktualizowaniu prezentowanych stron w interfejsie.

    Te aktualizacje są synchroniczne z interfejsem użytkownika, dlatego możesz wywoływać metody adaptera takie jak .snapshot czy .getItemCount, aby sprawdzić stan po zastosowaniu aktualizacji. Działanie funkcji .snapshot() zostało pominięte, ponieważ wykonanie jej przy każdej aktualizacji może być kosztowne.

    Aktualizacje stron mogą odbywać się w tych sytuacjach:

    • Wstępne wczytywanie nowej generacji PagingData zakończy się niezależnie od tego, czy nowa generacja zawiera jakiekolwiek zmiany w prezentowanych elementach. Nowa generacja, która ukończy wstępne wczytywanie bez aktualizacji, ponieważ lista będzie dokładnie taka sama, nadal będzie aktywować to wywołanie zwrotne.
    • Strona jest wstawiona, nawet jeśli nie zawiera ona nowych elementów.
    • Strona zostaje usunięta nawet wtedy, gdy była pusta (I272c9, b/189999634)

Poprawki błędów

  • Uzyskanie dostępu do PagedList.dataSource z wartości początkowej wygenerowanej przez LivePagedList lub RxPagedList nie będzie już powodować niepoprawnego zgłaszania wyjątku IllegalStateException (I96707)

Wersja 3.1.0-alfa01

2 czerwca 2021 r.

Aplikacja androidx.paging:paging-*:3.1.0-alpha01 została zwolniona. Wersja 3.1.0-alpha01 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Zajęcia udostępnione przez paging-rxjava3 są teraz dostępne w pakiecie androidx.paging.rxjava3, więc nie kolidują one z klasą paging-rxjava2 (Ifa7f6)

Poprawki błędów

  • Naprawiono błąd polegający na tym, że strony czasami wysyłały do obiektu RecyclerView zdarzenia braku operacji, co mogło powodować wcześniejsze aktywowanie przez detektory. (Ic507f, b/182510751)

Wkład z zewnątrz

  • Do artefaktu rxjava3 dodano wycofane interfejsy API PagedList compat (Id1ce2, b/182497591).

Paging Compose w wersji 1.0.0

Wersja 1.0.0-alfa20

24 maja 2023 r.

Aplikacja androidx.paging:paging-compose:1.0.0-alpha20 została zwolniona. Wersja 1.0.0-alpha20 zawiera te zatwierdzenia.

Nowe funkcje

  • Strona tworzenia strony obsługuje teraz podgląd listy fałszywych danych przez utworzenie elementu PagingData.from(fakeData) i zapakowanie go PagingData w element MutableStateFlow (np. MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Wykorzystując te dane jako dane wejściowe do: @Preview, wywołania collectAsLazyPagingItems() udostępnią podgląd LazyPagingItems. (I8a78d, b/194544557)

Poprawki błędów

  • Dane w 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 asynchronicznego zbierania danych. Oznacza to, że dane z pamięci podręcznej będą gotowe do prezentacji od razu po przywróceniu stanu początkowego. (I97a60, b/177245496)

Wersja 1.0.0-alfa19

3 maja 2023 r.

Aplikacja androidx.paging:paging-compose:1.0.0-alpha19 została zwolniona. Wersja 1.0.0-alfa19 zawiera te zatwierdzenia.

Obsługa wszystkich leniwych układów

Wcześniej funkcja stronicowania umożliwiała korzystanie z niestandardowych rozszerzeń items i itemsIndexed w LazyListScope, co oznaczało, że nie można było używać tej funkcji z innymi leniwymi układami, takimi jak LazyVerticalGrid, HorizontalPager, ani innymi niestandardowymi leniwymi komponentami dostępnymi w bibliotekach Wear i TV. Ta nieelastyczność jest główną aktualizacją tej wersji.

Aby obsługiwać więcej leniwych układów, musieliśmy utworzyć interfejsy API w innej warstwie. Zamiast udostępniać niestandardowy interfejs API items dla każdego leniwego układu, funkcja Paging Compose udostępnia teraz nieco niższe metody rozszerzenia w interfejsach LazyPagingItems w itemKey i itemContentType. Te interfejsy API mają pomagać we wdrażaniu parametrów key i contentType w standardowych interfejsach API items, które już istnieją w interfejsach LazyColumn, LazyVerticalGrid, a także o ich odpowiednikach w interfejsach API takich jak HorizontalPager. (Ifa13b, Ib04f0, b/259385813)

Oznacza to, że obsługa elementu 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.

Po wprowadzeniu tych zmian przykłady LazyColumn i LazyRow wydłużą się o kilka wierszy, ale uznaliśmy, że spójność wszystkich leniwych układów będzie istotnym czynnikiem wpływającym na korzystanie z strony Stron Compose. Z tego powodu istniejące rozszerzenia LazyListScope zostały wycofane. (I0c459, I92c8f, b/276989796)

Zmiany w interfejsie API

  • Aby ułatwić migrację do nowych interfejsów API, funkcje rozszerzenia items i itemsIndexed w LazyListScope obsługują teraz parametr contentType, powielając obsługę nowych interfejsów API. (Ib1918, b/255283378)

Aktualizacje zależności

  • Zależność strony tworzenia wiadomości z wersji 1.0.5 do tworzenia w wersji 1.2.1 została zaktualizowana. (Ib1918, b/255283378)

Wersja 1.0.0-alfa18

8 lutego 2023 r.

Aplikacja androidx.paging:paging-compose:1.0.0-alpha18 została wydana bez zmian. Wersja 1.0.0-alfa18 zawiera te zatwierdzenia.

Wersja 1.0.0-alfa17

24 października 2022 r.

Aplikacja androidx.paging:paging-compose:1.0.0-alpha17 została zwolniona. Wersja 1.0.0-alfa17 zawiera te zatwierdzenia.

Nowe funkcje

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

Wersja 1.0.0-alfa16

10 sierpnia 2022 r.

Aplikacja androidx.paging:paging-compose:1.0.0-alpha16 została zwolniona. Wersja 1.0.0-alfa16 zawiera te zatwierdzenia.

Nowe funkcje

  • Strona PagingData udostępnia teraz logi za pomocą klasy LazyPagingItems, 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}(https://issuetracker.google.com/issues/235527159))

Poprawki błędów

  • Naprawiono brakujący błąd konstruktora PagingDataDiffer podczas korzystania z paging-compose:1.0.0-alpha15 z paging-common:3.1.1 lub starszym.(b/235256201,b/239868768)

Wersja 1.0.0-alfa15

1 czerwca 2022 r.

Aplikacja androidx.paging:paging-compose:1.0.0-alpha15 została zwolniona. Wersja 1.0.0-alpha15 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Dodano konstruktory dla elementów PagingDataAdapter i AsyncPagingDataDiffer, które akceptują konstruktory CoroutineContext zamiast CoroutineDispatcher. (IDc878).

Poprawki błędów

  • LazyPagingItems ustawia teraz odświeżenie LoadState.Loading w początkowej wartości loadState. (I55043, b/224855902)

Wersja 1.0.0-alfa14

13 października 2021 r.

Aplikacja androidx.paging:paging-compose:1.0.0-alpha14 została zwolniona. Wersja 1.0.0-alfa14 zawiera te zatwierdzenia.

Wersja 1.0.0-alfa13

29 września 2021 r.

Aplikacja androidx.paging:paging-compose:1.0.0-alpha13 została zwolniona. Wersja 1.0.0-alfa13 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Funkcja LazyPagingItems.snapshot() została zastąpiona właściwością LazyPagingItems.itemSnapshotList (Ie2da8)
  • Wycofana zasada LazyPagingItems.getAsState() została usunięta (Ie65e4)

Wersja 1.0.0-alfa12

21 lipca 2021 r.

Aplikacja androidx.paging:paging-compose:1.0.0-alpha12 została zwolniona. Wersja 1.0.0-alpha12 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Parametry items(lazyPagingItems) i itemsIndexed(lazyPagingItems) używane do łączenia strony z interfejsem LazyColumn/Row akceptują teraz parametr klucza opcji, który pozwala określić stabilny klucz reprezentujący element. Więcej informacji o kluczach znajdziesz tutaj. (I7986d)
  • Funkcja lazyPagingItems.getAsState(index) została wycofana. Użyj w zamian zasady lazyPagingItems[index]. (I086cb, b/187339372)

Wersja 1.0.0-alfa11

30 czerwca 2021 r.

Aplikacja androidx.paging:paging-compose:1.0.0-alpha11 została zwolniona. Wersja 1.0.0-alpha11 zawiera te zatwierdzenia.

Wersja 1.0.0-alfa10

2 czerwca 2021 r.

Aplikacja androidx.paging:paging-compose:1.0.0-alpha10 została zwolniona. Wersja 1.0.0-alpha10 zawiera te zatwierdzenia.

Wersja 1.0.0-alfa09

18 maja 2021 r.

Aplikacja androidx.paging:paging-compose:1.0.0-alpha09 została zwolniona. Wersja 1.0.0-alpha09 zawiera te zatwierdzenia.

Poprawki błędów

  • Dostępna jest teraz obserwacja funkcji itemCount i metody pobierającej elementy LazyPagingItems, co pozwala jej też używać z LazyVerticalGrid (Ie2446, b/171872064, b/168285687).

Zgodność z wiadomością

  • Funkcja androidx.paging:paging-compose:1.0.0-alpha09 jest zgodna tylko z funkcją Utwórz w wersji 1.0.0-beta07 i nowszych.

Wersja 1.0.0-alfa08

24 lutego 2021 r.

Aplikacja androidx.paging:paging-compose:1.0.0-alpha08 została zwolniona. Wersja 1.0.0-alpha08 zawiera te zatwierdzenia.

Zaktualizowano w celu integracji z funkcją Utwórz w wersji 1.0.0-beta01.

Wersja 1.0.0-alfa07

10 lutego 2021 r.

Aplikacja androidx.paging:paging-compose:1.0.0-alpha07 została zwolniona. Wersja 1.0.0-alpha07 zawiera te zatwierdzenia.

Zaktualizowano w celu integracji z funkcją Utwórz w wersji alfa12.

Wersja 1.0.0-alfa06

28 stycznia 2021 roku

Aplikacja androidx.paging:paging-compose:1.0.0-alpha06 została zwolniona. Wersja 1.0.0-alpha06 zawiera te zatwierdzenia.

Poprawki błędów

Zaktualizowano pod kątem tworzenia wiadomości w wersji 1.0.0-alfa11.

Wersja 1.0.0-alfa05

13 stycznia 2021 r.

Aplikacja androidx.paging:paging-compose:1.0.0-alpha05 została zwolniona. Wersja 1.0.0-alpha05 zawiera te zatwierdzenia.

Zaktualizowano pod kątem tworzenia wiadomości w wersji 1.0.0-alfa10.

Wersja 1.0.0-alfa04

16 grudnia 2020 roku

Aplikacja androidx.paging:paging-compose:1.0.0-alpha04 została zwolniona. Wersja 1.0.0-alpha04 zawiera te zatwierdzenia.

Poprawki błędów

  • Zaktualizowaliśmy właściwości udogodnień CombinedLoadStates.refresh, CombinedLoadStates.prepend i CombinedLoadStates.append, tak aby zmieniły się tylko z Loading na NotLoading, gdy stan mediatora i źródła wczytywania to NotLoading. Ma to na celu zapewnienie, że zdalna aktualizacja została zastosowana. (I65619)

Wersja 1.0.0-alfa03

Grudzień 2, 2020

Aplikacja androidx.paging:paging-compose:1.0.0-alpha03 została zwolniona. Wersja 1.0.0-alpha03 zawiera te zatwierdzenia.

  • Zaktualizowano w celu dopasowania do tworzenia 1.0.0-alfa08.

Wersja 1.0.0-alfa02

11 listopada 2020 roku

Aplikacja androidx.paging:paging-compose:1.0.0-alpha02 została zwolniona. Wersja 1.0.0-alpha02 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Do systemów LazyPagingItem dodaliśmy metody .peek(), .snapshot(), .retry() i .refresh(), które udostępniają te same funkcje co w AsyncPagingDataDiffer / PagingDataAdapter (Iddfe8, b/172041660)

Wersja 1.0.0-alfa01

28 października 2020 r.

Aplikacja androidx.paging:paging-compose:1.0.0-alpha01 została zwolniona. Wersja 1.0.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

Artefakt paging-compose zapewnia integrację między biblioteką stronicowania a usługą Jetpack 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.

Aplikacja androidx.paging:paging-*:3.0.1 została zwolniona. Wersja 3.0.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Uzyskanie dostępu do PagedList.dataSource z poziomu początkowej wartości wygenerowanej przez LivePagedList lub RxPagedList nie będzie już powodować niepoprawnego zgłaszania wyjątku IllegalStateException (I96707)

Wersja 3.0.0

Wersja 3.0.0

5 maja 2021 roku

Aplikacja androidx.paging:paging-*:3.0.0 została zwolniona. Wersja 3.0.0 zawiera te zatwierdzenia.

Główne funkcje wersji 3.0.0

Większość istniejących interfejsów API w wersji 2.x.x została wycofana i zastąpiona nowymi interfejsami API Paging 3. Dzięki temu wprowadzisz te ulepszenia:

  • Pierwsza klasa wsparcia dla współprogramów Kotlin i Flow
  • Pomoc dotycząca anulowania
  • Wbudowane sygnały stanu obciążenia i błędów
  • Funkcja ponawiania i odświeżania
  • Wszystkie 3 podklasy DataSource zostały połączone w ujednoliconą klasę PagingSource.
  • Niestandardowe przekształcenia strony, w tym wbudowana funkcja dodawania separatorów
  • Wczytuję nagłówki i stopki stanu

Wersja 3.0.0-rc01

21 kwietnia 2021 r.

Aplikacja androidx.paging:paging-*:3.0.0-rc01 została zwolniona. Wersja 3.0.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono błąd polegający na tym, że strony czasami wysyłały do obiektu RecyclerView zdarzenia braku operacji, co mogło powodować wcześniejsze aktywowanie przez detektory. (Ic507f, b/182510751)

Wersja 3.0.0-beta03

24 marca 2021 r.

Aplikacja androidx.paging:paging-*:3.0.0-beta03 została zwolniona. Wersja 3.0.0-beta03 zawiera te zatwierdzenia.

Poprawki błędów

  • Ulepszyliśmy obsługę obiektów zastępczych podczas ponownego wczytywania listy, aby zapobiec nieoczekiwanym skokom w widoku RecyclerView. Więcej informacji znajdziesz na stronie NullPaddedDiffing.md. (If1490, b/170027529, b/177338149)
  • Różne kreatory PagedList (stara ścieżka zgodności) nie wywołują już nieprawidłowo synchronicznie w wątku głównym elementu DataSource.Factory.create(), gdy następuje wywołanie metody .build(). (b/182798948)

Wersja 3.0.0-beta02

10 marca 2021 r.

Aplikacja androidx.paging:paging-*:3.0.0-beta02 została zwolniona. Wersja 3.0.0-beta02 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Rozszerzenia Rx3 są teraz prawidłowo rozpowszechniane. @ExperimentalCoroutinesApi Wymaganie dotyczące zgody na udział w ankiecie. Wcześniej były one oznaczone metodą @get, która jest ignorowana przez narzędzie Kotlin Compiler ze względu na: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)

Poprawki błędów

  • Egzekwuj ograniczenia dotyczące publicznego użytkowania eksperymentalnych interfejsów API (I6aa29, b/174531520)
  • Naprawiono błąd, przez który PagingState zawsze miał wartość null przy wywołaniu zdalnego odświeżania.
  • Naprawiono błąd, który powodował, że puste strony zwracane przez stronę PagingSource mogły uniemożliwiać ponowne pobieranie strony w celu wypełnienia funkcji prefetchDistance, co powodowało zatrzymanie strony.

Wersja 3.0.0-beta01

10 lutego 2021 r.

Aplikacja androidx.paging:paging-*:3.0.0-beta01 została zwolniona. Wersja 3.0.0-beta01 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Otoki Rx2 i Rx3 udostępniają teraz eksperymentalną adnotację, od której zależy. Jeśli używasz opakowań compat Rx w metodzie paging-rxjava2 lub paging-rxjava3, musisz dodać do użycia adnotacje @OptIn(ExperimentalCoroutinesApi::class) (Ib1f9d).

Poprawki błędów

  • Usunięto błąd IndexOutOfBoundsException: Inconsistency detected, który czasem był zgłaszany w przypadku korzystania z interfejsów API DataSource w wersji 2 za pomocą ścieżek zgodności
  • Wywołanie funkcji isInvalid podczas inicjowania obiektu DataSource, które jest używane za pomocą ścieżek zgodności, jest teraz poprawnie uruchamiane w metodzie fetchDispatcher, a nie w wątku głównym. Poprawia to błąd IllegalStateException wynikający z dostępu do baz danych w wątku głównym podczas korzystania z implementacji PagingSource dla pokoju.

Wersja 3.0.0-alfa13

27 stycznia 2021 r.

Aplikacja androidx.paging:paging-*:3.0.0-alpha13 została zwolniona. Wersja 3.0.0-alfa13 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Implementacja PagingSource.getRefreshKey nie jest już opcjonalna. Jest teraz funkcją abstrakcyjną bez domyślnej implementacji. Migrowanie użytkowników może kontynuować zwracanie implementacji domyślnej, która zwraca po prostu wartość null, ale funkcja getRefreshKey() powinna mieć faktyczną implementację zwracającą klucz na podstawie bieżącego położenia przewijania. Umożliwi to w miarę możliwości kontynuowanie wczytywania strony na środku widocznego obszaru za pomocą funkcji PagingState.anchorPosition. (I4339a)
  • InvalidatingPagingSourceFactory to teraz ostatnia klasa (Ia3b0a)
  • Zezwalaj na konfigurowanie działania separatora terminali (nagłówek / stopka) z dodatkowym opcjonalnym parametrem SeparatorType. Dostępne są 2 opcje:
    • FULLY_COMPLETE – dotychczasowe działanie. Zanim dodasz separatory terminali, poczekaj, aż PagingSource i RemoteMediator oznaczą wartość endOfPaginationReached. Jeśli nie używasz RemoteMediator, funkcja Remote loadState zostanie zignorowana. Przydaje się to głównie wtedy, gdy separatory sekcji mają być wyświetlane tylko po pełnym wczytaniu sekcji, w tym podczas pobierania ze źródła zdalnego, np. z sieci.
    • SOURCE_COMPLETE – zaczekaj, aż PagingSource oznaczy wartość endOfPaginationReached (nawet jeśli używana jest funkcja RemoteMediator). Dzięki temu nagłówki i stopki będą wyświetlać się synchronicznie wraz z początkowym wczytywaniem, dzięki czemu użytkownicy nie będą musieli przewijać terminala, by zobaczyć separatory terminali. (Ibe993, b/174700218)

Poprawki błędów

  • Naprawiliśmy rzadki wyciek pamięci, który dochodzi do unieważnienia parametru PagingSource, zanim moduł PageFetcher może rozpocząć ładowanie z niego ładowania. (I9606b, b/174625633)

Wersja 3.0.0-alfa12

13 stycznia 2021 r.

Aplikacja androidx.paging:paging-*:3.0.0-alpha12 została zwolniona. Wersja 3.0.0-alpha12 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Nieprawidłowa klasa {4/}PagingSourceFactory nie jest już klasą abstrakcyjną, ponieważ nie miała żadnych metod abstrakcyjnych. (I4a8c4)
  • Dodaliśmy przeciążenie .cachedIn(), które akceptuje obiekt ViewModel zamiast Lifecycle lub CoroutineScope w przypadku użytkowników Javy. (I97d81, b/175332619)
  • Zezwalaj obiektom wywołującym w Javie na używanie operacji przekształcania PagingData w sposób asynchroniczny przez zaakceptowanie argumentów wykonawcy jako argumentu operatora przekształcenia. W przypadku wszystkich operatorów przekształcenia -Sync sufiks -Sync jest teraz usunięty, a użytkownicy Kotlin Coroutine będą musieli to rozróżnić, wywołując funkcję rozszerzenia, która zamiast tego akceptuje blok zawieszający. Wszystkie operatory przekształcania PagingData zostały przeniesione do rozszerzeń w klasie statycznej PagingDataTransforms. Użytkownicy Javy będą musieli wywoływać się za pomocą statycznych elementów pomocniczych, PagingDataTransforms.map(pagingData, transform)W przypadku użytkowników Kotlin składnia jest taka sama, ale musisz zaimportować funkcję. (If6885, b/172895919)

Poprawki błędów

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

Wersja 3.0.0-alfa11

16 grudnia 2020 roku

Aplikacja androidx.paging:paging-*:3.0.0-alpha11 została zwolniona. Wersja 3.0.0-alpha11 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodaliśmy obsługę zapisywania stanu w następujących podstawowych przypadkach użycia (pełna obsługa, zwłaszcza w przypadku warstwowego przypadku źródłowego, jest wciąż w przygotowaniu):
    • przepływ jest zapisywany w pamięci podręcznej, a aplikacja nie zostaje przerwana (np. przepływ jest buforowany w modelu widoku, a aktywność jest odtwarzana w procesie)
    • źródło stronicowania jest zliczane, obiekty zastępcze są włączone, a układ nie jest rozłożony.

Zmiany w interfejsie API

  • PagingSource.getRefreshKey() to teraz stabilny interfejs API (I22f6f, b/173530980)
  • Funkcja PagingSource.invalidate nie jest już otwarta. Jeśli chcesz otrzymywać powiadomienia o unieważnieniu, zamiast zastępowania unieważnienia możesz wywołać metodę signInvalidatedCallback. (I628d9, b/173029013, b/137971356)
  • Pager ma teraz 1 eksperymentalny konstruktor obok zwykłych konstruktorów, zamiast wyciekać eksperymentalne interfejsy API do nieeksperymentalnych publicznych interfejsów API za pomocą adnotacji dotyczącej zgody. (I9dc61, b/174531520)
  • Zaktualizowaliśmy właściwości udogodnień CombinedLoadStates.refresh, CombinedLoadStates.prepend i CombinedLoadStates.append, tak aby zmieniły się tylko z Loading na NotLoading, gdy stan mediatora i źródła wczytywania to NotLoading. Ma to na celu zapewnienie, że zdalna aktualizacja została zastosowana. (I65619)
  • Parametr LoadParams.pageSize został usunięty (został już wycofany). Zalecamy użycie w źródle stron docelowych elementu LoadParams.loadSize.

    LoadParams.loadSize ma zawsze wartość równą PagingConfig.pageSize, z wyjątkiem początkowego wywołania wczytywania, w którym jest równa PagingConfig.initialLoadSize.

    Jeśli testujesz źródło danych Paging2 bez użycia pagera ani PagedList, parametr pageSize może nie być zgodny z wartością PagingConfig.pageSize, jeśli ustawiasz też initialLoadSize. Jeśli jest to ważne w testach, spróbuj użyć elementu Pager/PagedList, który będzie wewnętrznie ustawiać prawidłowy rozmiar PageSize dla metod wczytywania DataSource. (I98ac7, b/149157296)

Poprawki błędów

  • Naprawiliśmy awarię wywoływaną przez wyjątek IllegalStateException przy korzystaniu z separatorów z ustawionym plikiem PagingConfig.maxSize. (I0ed33, b/174787528)
  • Poprawiliśmy błąd, który powodował, że stan wczytywania funkcji PREPEND / APPEND nie aktualizował się do NotLoading(endOfPaginationReached = true) natychmiast po wstępnym wczytaniu, jeśli ustawiono narzędzie RemoteMediator (I8cf5a).
  • Naprawiono błąd, który powodował, że interfejsy API po stronie prowadzącego, takie jak .snapshot(), .peek() itp., zwracały poprzednią (nieaktualną) listę w ramach aktualizacji ListUpdateCallback.
  • Naprawiono błąd, który powodował, że operatory separatorów nie dodawały nagłówków ani stopek w przypadku użycia funkcji RemoteMediator.
  • Naprawiono błąd, który powodował, że aktualizacje elementu LoadState na wartość NotLoading for RemoteMediator zatrzymywały się na etapie wczytywania.
  • Naprawiono błąd, który powodował, że interfejs API zgodności Paging2.0 (.asPagingSourceFactory()) mógł zostać zainicjowany pod kątem interfejsu DataSource w nieprawidłowym module CoroutineDispatcher. Rozwiązuje to problemy z awariami i możliwymi błędami ANR, zwłaszcza w przypadku korzystania z obecnej implementacji PagingSource w sali, która korzysta z tej ścieżki zgodności.

Wersja 3.0.0-alfa10

Grudzień 2, 2020

Aplikacja androidx.paging:paging-*:3.0.0-alpha10 została zwolniona. Wersja 3.0.0-alpha10 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Wycofane interfejsy API dataRefreshFlow i dataRefreshListener zostały usunięte, ponieważ są nadmiarowe w przypadku aktualizacji loadStateFlow i detektorów. W przypadku tych migracji odpowiednikiem loadStateFlow jest:

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

    (Ib5570, b/173530908)

Poprawki błędów

  • Parametr endOfPaginationReached for RemoteMediator REFRESH został prawidłowo przekazany do aktualizacji parametru LoadState i nie zezwala na uruchamianie zdalnych elementów APPEND i PREPEND. (I94a3f, b/155290248)
  • Jeśli lista jest pusta z powodu pustej strony początkowej lub intensywnego filtrowania, nie będzie już uniemożliwiać uruchomienia wczytywania stron PREPEND ani APPEND. (I3e702, b/168169730)
  • Rozwiązaliśmy problem, który powodował, że funkcja getRefreshKey nie była wywoływana w kolejnych generacjach PagingSource w przypadku szybkiego następowania unieważnień. (I45460, b/170027530)

Wkład z zewnątrz

  • Dodano nową klasę abstrakcyjną o nieprawidłowej klasy cząsteczkowej nieprawidłową w przypadku interfejsu API .invalidate(), która przekierowuje unieważnienie do wszystkich generowanych przez nią źródeł. Dziękuję za uwagę: @claraf3. (Ie71fc, b/160716447)

Znane problemy

  • Nagłówki i stopki z przekształcenia .insertSeparators() mogą nie pojawiać się od razu, gdy używasz narzędzia RemoteMediator b/172254056.
  • Użycie zdalnego zapośredniczenia może spowodować ukrycie urządzenia LoadState w przypadku unieważnienia PagingSource.load(LoadParams.Refresh(...)) i zakończenia procesu RemoteMediator.load() przed zwróceniem b/173717820

Wersja 3.0.0-alfa09

11 listopada 2020 roku

Aplikacja androidx.paging:paging-*:3.0.0-alpha09 została zwolniona. Wersja 3.0.0-alpha09 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Całkowicie wycofaj metody dataOdświeżFlow i detektor z klauzulą replaceWith. (I6e2dd)

Poprawki błędów

  • Poprawiono wywoływanie obiektu IllegalArgumentException w przypadku używania separatorów z funkcją RemoteMediator i wywoływanie unieważniania podczas zdalnego wczytywania, które zwracałoby parametr endOfPagination (I3a260)

Wersja 3.0.0-alfa08

28 października 2020 r.

Aplikacja androidx.paging:paging-*:3.0.0-alpha08 została zwolniona. Wersja 3.0.0-alpha08 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Wersje Kotlin / Javy elementu DataSource.InvalidatedCallback zostały połączone przez włączenie konwersji SAM w Kotlin za pomocą funkcjonalnego interfejsu (dostępnego w Kotlin 1.4). Naprawiono też błąd, który powodował, że wariantkotlin unieważnionych wywołań zwrotnych nie był wywoływany po przekształceniu za pomocą funkcji .map lub .mapByPage. (I1f244, b/165313046)

Poprawki błędów

  • Interakcja ze stroną Pager (strona w języku angielskim) została znacznie udoskonalona. W szczególności przyspieszenie nie będzie już anulować wywołania RemoteMediator#load z powodu unieważnienia strony. Nie będzie też już wysyłać żądania dołączenia/dołączenia na początku, jeśli wymagane jest ODŚWIEŻENIE, dopóki żądanie ODŚWIEŻENIE nie zostanie zrealizowane. (I6390b, b/162252536)
  • Sprawdzanie lint interfejsu API pod kątem brakującego GetterMatchingBuilder jest włączone w Androidzie (I4bbea, b/138602561)
  • Naprawiliśmy błąd, który powodował awarię pomocników .withLoadState* ConcatAdapter z powodu powiadamiania 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 uruchamianie wczytywania z wyprzedzeniem.Iffda3 b/169259468

Wersja 3.0.0-alfa07

1 października 2020 roku

Aplikacja androidx.paging:paging-*:3.0.0-alpha07 została zwolniona. Wersja 3.0.0-alpha07 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Asynchroniczne operatory PagingData oparte na Guawie akceptują teraz jako parametr Wykonawcę, co pozwala kontrolować kontekst wykonywania. (Id4372)

Poprawki błędów

  • Poprawiono wyjątek IndexOutOfBounds w RemoteMediator z powodu warunku wyścigu. (I00b7f, b/165821814)
  • Naprawiono warunek wyścigu w konwersji DataSource -> PagingSource, który mógł powodować, że wynikowe źródło PagingSource ignorowało sygnały unieważniania pochodzące z DataSource.
  • Naprawiono błąd w logice pobierania strony, który czasami powodował, że do momentu wywołania metody PagingDataAdapter.refresh() nie pobierała nowych wersji PagingSource.
  • Rozwiązano problem, który powodował, że w przypadku użycia źródła danych przekonwertowanego na element PagingSource (np. przez Room) w połączeniu z funkcją RemoteMediator czasami nie można było znaleźć pozycji przewijania.

Wkład z zewnątrz

  • Dziękujemy @simonschiller za dodanie operatorów RxJava2, RxJava3 i asynchronicznych operatorów transformacji do PagingData.

Wersja 3.0.0-alfa06

2 września 2020 r.

Aplikacja androidx.paging:paging-*:3.0.0-alpha06 została zwolniona. Wersja 3.0.0-alpha06 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Komunikat UnsupportedOperationException z czytelniejszym komunikatem o braku obsługi stabilnych identyfikatorów jest teraz zgłaszany przy każdym wywołaniu metody PagingDataAdapter.setHasStableIds. (Ib3890, b/158801427)

Poprawki błędów

  • Parametr insertSeparator nie odfiltrowuje już pustych stron, dzięki czemu prezenter może przestrzegać odległości pobierania z wyprzedzeniem nawet w przypadku, gdy wstawionych jest wiele pustych stron. (I9cff6, b/162538908)

Wersja 3.0.0-alfa05

19 sierpnia 2020 r.

Aplikacja androidx.paging:paging-*:3.0.0-alpha05 została zwolniona. Wersja 3.0.0-alpha05 zawiera te zatwierdzenia.

Poprawki błędów

  • Obecnie prawidłowe strony są pobierane z wyprzedzeniem nawet wtedy, gdy prezentowane dane są mocno przefiltrowane
  • Przywrócenie zasobu LoadResult.Error do ponowionego wczytania nie powoduje już, że próba uzyskania dostępu do produktu będzie ponownie powodować jego nieprawidłowe ponawianie

Wkład z zewnątrz

  • Dziękujemy Clary F za pomoc w zrobieniu porządków w testach. (549612)

Wersja 3.0.0-alfa04

5 sierpnia 2020 r.

Aplikacja androidx.paging:paging-*:3.0.0-alpha04 została zwolniona. Wersja 3.0.0-alpha04 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • W interfejsach AsyncPagingDataDiffer i PagingDataAdapter dodano interfejs API peek(), aby umożliwić dostęp do prezentowanych danych bez wywoływania wczytywania stron. (I38898, b/159104197)
  • Do interfejsów PagingDataAdapter i AsyncPagingDataDiffer dodano interfejs API snapshot(), który umożliwia pobieranie prezentowanych elementów bez wywoływania pobierania strony. (I566b6, b/159104197)
  • Dodano konstruktor PagingData.from(List<T>) umożliwiający prezentowanie 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 wstępnym zakończeniem ODŚWIEŻENIA lub po prostu do testowania przekształceń. (Id134d).
  • Wycofano interfejsy API odświeżania Dataflow Flow / Listener, ponieważ miały pokazywać stan prezentowanych elementów przy ODŚWIEŻENIA, ale dzięki poprawie czasu wywołania zwrotnego loadState / Listener i właściwości itemCount jest to niepotrzebne (Ia19f3)
  • Dodano kody zgodności RxJava3 w przypadku PagingSource i RemoteMediator (I49ef3, b/161480176).

Poprawki błędów

  • Zasób PositionalDataSource został przekonwertowany na PagingSource za pomocą pomocy toPagingSourceFactory, w tym PagingSource wygenerowany przez Pokój wygenerowany przez Pokój, który prawidłowo jest teraz oznaczony do obsługi skakania. (I3e84c, b/162161201)
  • Naprawiliśmy błąd polegający na tym, że użycie synchronicznego wariantu danychsubmitData czasem prowadziło do wyścigu powodującego błąd ClosedSendChannelException (I4d702, b/160192222).

Wkład z zewnątrz

  • Dziękujemy Zac Sweers za dodanie kodów zgodności z RxJava3 w imieniu Slacka. (I49ef3, b/161480176)

Wersja 3.0.0-alfa03

22 lipca 2020 r.

Aplikacja androidx.paging:paging-*:3.0.0-alpha03 została zwolniona. Wersja 3.0.0-alpha03 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Konstruktor PagingState jest teraz publiczny, co powinno ułatwić testowanie implementacji metody getOdświeżKey() (I8bf15)
  • Ukryto warianty funkcji mapy kotlin z DataSource z Javy, aby wyjaśnić niejasność między wariantami oryginalnymi i kotlinowymi. (If7b23, b/161150011)
  • Zbędne interfejsy API, które mają zapewnić wygodę użytkownikom Kotlin, zostały oznaczone jako @JvmSynthetic (I56ae5)
  • Dodano przeciążenia konstruktora LoadResult.Page, który ustawia domyślne wartości itemsBefore i itemsAfter na COUNT_UNDEFINED (I47849).
  • Istniejące operatory PagingData akceptują metody zawieszania oraz wprowadziliśmy nowe, niezawieszone operatory mapSync, FlaMapSync i filterSync dla użytkowników Javy. Obecne metody przekształcania zostały przeniesione do funkcji rozszerzeń, więc użytkownicy Kotlin będą musieli je zaimportować. (I34239, b/159983232)

Poprawki błędów

  • Funkcja Room (i PositionalDataSource) PagingSources teraz wyświetla separator wiodący jako część pierwszej strony, dzięki czemu użytkownik nie musi przewijać pierwszej strony, aby ją wyświetlić. (I6f747, b/160257628)
  • Dostęp do elementu za pomocą obiektów zastępczych prawidłowo aktywuje teraz wczytywanie PagingSource, dopóki nie zostanie zwrócona strona, która spełnia żądany indeks po przekształceniu za pomocą funkcji PagingData.filter() (I95625, b/158763195)
  • Poprawiliśmy błąd, który powodował, że czasami przewijanie po stronie PagingSource zwracało błąd, co uniemożliwiało ponowienie próby użycia strony PagingDataAdapter.retry(). (I1084f, b/160194384)
  • Naprawia problem polegający na tym, że dostęp do elementu po usunięciu strony mógł nie być wczytywany, mimo że dostęp do elementu mieścił się w zakresie uprawnienia pobierania z wyprzedzeniem (Ie95ae, b/160038730)
  • Ustawienie PagingConfig.maxSize nie włącza już obiektów zastępczych po zdarzeniu odrzucenia (I2be29, b/159667766).

Wersja 3.0.0-alfa02

24 czerwca 2020 r.

Aplikacja androidx.paging:paging-*:3.0.0-alpha02 została zwolniona. Wersja 3.0.0-alpha02 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Dodano przeciążenia konstruktora PagingConfig z typowymi wartościami domyślnymi (I39c50, b/158576040).
  • Dodano przeciążenia konstruktorów PagingDataAdapter i AsyncPagingDataDiffer z typowymi wartościami domyślnymi (Ie91f5).
  • Interfejsy API adaptera dataRefreshFlow i dataRefreshListener przekazują teraz wartość logiczną, aby zasygnalizować, czy PagingData jest pusty (I6e37e, b/159054196).
  • Dodano interfejsy API RxJava i Guava do aplikacji RemoteMediator – RxRemoteMediator i ListenableFutureRemoteMediator.
  • Dodano pomoce do PagingState umożliwiające dostęp do popularnych elementów, takich jak isEmpty() i firstItemOrNull() (I3b5b6, b/158892717)

Poprawki błędów

  • Pager sprawdza teraz ponowne użycie PagingSource w fabryce, aby zapobiegać przypadkowemu ponownemu użyciu nieprawidłowych PagingSources, który spowodował niejasny błąd (I99809, b/158486430).
  • Błędy związane z funkcją RemoteMediator REFRESH nie uniemożliwiają już wczytania elementu PagingSource (I38b1b, b/158892717)
  • Niezawieszona wersja systemu submitData nie powoduje już awarii z powodu równoczesnego zbierania danych przez wiele elementów PagingData, gdy jest wywoływane po zawieszeniu w wersji submitData. (I26358, b/158048877)
  • Naprawiony wyjątek „nie można zbierać dwukrotnie z pagera”, który mógł występować po zmianie konfiguracji (I58bcc, b/158784811).

Wersja 3.0.0-alfa01

10 czerwca 2020 r.

Aplikacja androidx.paging:paging-*:3.0.0-alpha01 została zwolniona. Wersja 3.0.0-alpha01 zawiera te zatwierdzenia.

Biblioteka stronicowania została zaktualizowana do wersji 3.0, która zawiera kilka nowych, ważnych funkcji.

Nowe funkcje w wersji 3.0

Znane problemy

  • Pakowanie 3 dokumentów Java nie jest jeszcze dostępne. Tymczasem korzystaj z przewodników, do których linki znajdziesz powyżej, lub z dokumentacji Kotlin. (b/158614050)

Wersja 2.1.2

Wersja 2.1.2

18 marca 2020 r.

Aplikacja androidx.paging:paging:2.1.2 została zwolniona. Wersja 2.1.2 zawiera te zatwierdzenia w porównaniu z wersją 2.1.0.

Poprawki błędów

  • Napraw błąd IndexOutOfBoundsException w rzadkich przypadkach, gdy konwersja pozycji jest unieważniona.

Problem z publikacją

  • Wersja strony 2.1.1 została opublikowana nieprawidłowo z nieprawidłowo skonfigurowanej gałęzi, przez co częściowo zaimplementowane interfejsy API i funkcje pojawiły się w kolejnej wersji.

  • Strona 2.1.2 zawiera poprawkę związaną z centrowaniem obciążenia opublikowaną pierwotnie w wersji 2.1.1, ale tym razem została poprawnie wybrana w wersji 2.1.0. Jeśli korzystasz obecnie z wersji 2.1.1, zdecydowanie zalecamy uaktualnienie do tej wersji.

Wersja 2.1.1

Wersja 2.1.1

18 grudnia 2019 r.

Aplikacja androidx.paging:paging-*:2.1.1 została zwolniona. Wersja 2.1.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Ciągłe wczytywanie początkowe ze źródeł PositionalDataSources jest teraz wyśrodkowane na ostatnim dostępie po wyłączeniu obiektów zastępczych.

Wersja 2.1.0

Wersja 2.1.0

25 stycznia 2019 r.

Strona 2.1.0 została zwolniona bez zmian z 2.1.0-rc01.

Wersja 2.1.0-rc01

6 grudnia 2018 r.

Strona 2.1.0-rc01 została zwolniona bez zmian z 2.1.0-beta01.

Wersja 2.1.0-beta01

1 listopada 2018 r.

Strona 2.1.0-beta01 została zwolniona bez zmian z 2.1.0-alpha01.

Wersja 2.1.0-alfa01

12 października 2018 r.

W przypadku 2.1.0-alpha01 stronicowania dodaliśmy 2 główne dodatki – pomijanie stron i biblioteki rozszerzeń KTX dla każdego artefaktu – a także kilka innych zmian w interfejsie API i poprawek błędów.

Zmiany w interfejsie API

  • Dodano PagedList.Config.Builder.setMaxSize() w celu ograniczenia liczby wczytywanych elementów w pamięci.
  • Dodano: androidx.paging.Config() jako alternatywę Kotlin dla: PagedList.Config.Builder
  • Dodano: androidx.paging.PagedList() jako alternatywę Kotlin dla: PagedList.Builder
  • Dodano: DataSourceFactory.toLiveData() jako alternatywę Kotlin dla: LivePagedListBuilder
  • Dodano DataSourceFactory.toObservable() i toFlowable() jako alternatywy dla Kotlin dla: RxPagedListBuilder
  • Dodano element AsyncPagedListDiffer.addPagedListListener() do nasłuchiwania w przypadku zamiany PagedList na inną. b/111698609
  • Dodano PagedListAdapter.onCurrentListChanged() wariant, który przekazuje starą i nową listę, oraz wycofano poprzedni wariant.
  • Dodano PagedListAdapter/AsyncPagedListDiffer.submitList() wariantów, które przyjmują dodatkowe wywołanie zwrotne, jeśli wyświetlana jest lista stron po różnicy. Pozwala to na synchronizację zamiany PagedList z innymi aktualizacjami interfejsu użytkownika. b/73781068
  • Dodano PagedList.getLoadedCount(), aby poinformować Cię, ile elementów jest w pamięci. Pamiętaj, że jeśli symbole zastępcze są wyłączone, wartość zwracana jest zawsze równa .size().

Poprawki błędów

  • Poprawiono warunek wyścigu w przypadku różnicowania w przypadku ponownego użycia list b/111591017
  • PagedList.loadAround() zwraca teraz błąd IndexOutOfBoundsException, gdy indeks jest nieprawidłowy. Wcześniej mógł ulec awarii z niejasnym innym wyjątkiem.
  • Rozwiązano problem, w którym bardzo mały rozmiar początkowy wczytywany w połączeniu z niezmienionymi danymi uniemożliwiał dalsze wczytywanie pliku b/113122599

Wersja 2.0.0

Wersja 2.0.0

1 października 2018 r.

Strona 2.0.0 została opublikowana z jedną poprawką.

Poprawki błędów

  • Usunięto awarię, która mogła wystąpić w przypadku bardzo szybkiego przewijania przy użyciu elementu PositionalDataSource i obiektów zastępczych b/114635383.

Wersja 2.0.0-beta01

2 lipca 2018 r.

Poprawki błędów

  • Naprawiono znikanie treści w niektórych przypadkach przedrostka (obiekty zastępcze wyłączone, PositionalDataSource) b/80149146
  • (Już dostępna w wersji 1.0.1) Naprawiono awarie, które powodowały, że PagedListAdapter i AsyncPagedListDiffer nie sygnalizowały zdarzeń przeniesienia. b/110711937

Zależności sprzed AndroidaX

W poniższych wersjach Paging (starszych niż AndroidX) należy uwzględnić 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.

Strona 1.0.1 została opublikowana z jedną poprawką w wersji runtime. Zdecydowanie zalecamy korzystanie z 1.0.1 ze względu na stabilność. Udostępniono również stronę rxJava2 1.0.1, która jest identyczna jak 1.0.0-rc1.

Poprawki błędów

  • Naprawiono awarie, które powodowały, że PagedListAdapter i AsyncPagedListDiffer nie sygnalizowały zdarzeń przeniesienia. b/110711937

RxJava2 w wersji 1.0.0

RxJava2 w wersji 1.0.0-rc1

16 maja 2018 r.

Strona 1.0.0-rc1 RxJava2 zostanie przeniesiona do wersji kandydującej do wdrożenia bez zmian w stosunku do początkowej wersji alfa.

Wersja 1.0.0

Wersja 1.0.0-rc1

19 kwietnia 2018 r. Kandydat do przejścia na nowe wersje

Nie mamy więcej znanych problemów ani nowych funkcji przeznaczonych dla etapu 1.0.0. Uaktualnij projekty, aby używały 1.0.0-rc1. Pomóż nam je przetestować, żebyśmy mogli wysłać solidny 1.0.0.

Brak zmian w tej wersji. Jest taka sama jak w 1.0.0-beta1.

Wersja 1.0.0-beta1

5 kwietnia 2018 r.

Przez krótki czas będzie ona dostępna w wersji beta, zanim zostanie udostępniona w wersji kandydującej do opublikowania. Nie planujemy dalszych zmian w interfejsie API w przypadku Paging 1.0, a jeśli chodzi o wszelkie zmiany w interfejsie API, jest bardzo wysoki.

Obsługa strony w języku alfa (RxJava2) na potrzeby obsługi stron docelowych została opublikowana jako osobny opcjonalny moduł (android.arch.paging:rxjava2:1.0.0-alpha1) i tymczasowo będzie miała osobną wersję do momentu ustabilizowania się stanu.

Ta nowa biblioteka stanowi alternatywę dla języka LivePagedListBuilder w języku RxJava2, która umożliwia tworzenie komponentów Observable i Flowable, przyjmując Scheduler s 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

  • Element RxPagedListBuilder został dodany za pomocą nowego artefaktu android.arch.paging:rxjava2.

Zmiany w interfejsie API

  • Zmiany w interfejsie API mające na celu wyjaśnienie roli wykonawców w kreatorach:

    • Zmieniono nazwę z setBackgroundThreadExecutor() na setFetchExecutor() (w PagedList.Builder i LivePagedListBuilder)

    • Zmieniono nazwę setMainThreadExecutor() na setNotifyExecutor() (w PagedList.Builder).

  • Zmieniono ustawienie PagedList.mCallbacks użytkownika jako prywatnego.

Poprawki błędów

  • LivePagedListBuilder aktywuje początkowe obciążenie PagedList we wskazanym wykonawcy, a nie na puli wątków operacji wejścia-wyjścia w komponentach Arch Komponenty.

  • Naprawiono nieprawidłowe zachowanie w wewnętrznych kodach DataSource (używane do implementacji interfejsu DataSource.map oraz ładowania funkcji PositionalDataSource z wyłączeniem zastępczym) b/77237534.

Wersja 1.0.0-alfa7

21 marca 2018 r.

Tempo 1.0.0-alpha7 jest dostępne razem z cyklami życia 1.1.1. Strona alfa 7 zależy od przeniesienia klasy Function opisanej powyżej, więc musisz zaktualizować zależność lifecycle:runtime do android.arch.lifecycle:runtime:1.1.1.

Strona alpha7 ma być ostatnią wersją przed premierami wersji beta.

Zmiany w interfejsie API

  • Obiekty DataSource.LoadParams mają teraz publiczny konstruktor, a obiekty DataSource.LoadCallback są teraz abstrakcyjne. Umożliwia to pakowanie funkcji DataSource lub bezpośrednie testowanie DataSource z przykładowym wywołaniem zwrotnym. b/72600421
  • twórcy map dla DataSource i DataSource.Factory,
    • map(Function<IN,OUT>) umożliwia przekształcanie, zawijanie i dekorowanie wyników ładowanych przez DataSource.
    • mapByPage(<List<IN>,List<OUT>>) umożliwia te same funkcje w przetwarzaniu wsadowym (np. jeśli elementy wczytane z SQL muszą dodatkowo wysyłać zapytania do oddzielnej bazy danych, można to zrobić w ramach wsadu).
  • Dodano metodę PagedList#getDataSource() jako zapewniającą wygodę: b/72611341
  • Wszystkie wycofane klasy zostały usunięte z interfejsu API, w tym pozostałości pakietu recyclerview.extensions i LivePagedListProvider.
  • Język DataSource.Factory został zmieniony z interfejsu na klasę abstrakcyjną, aby umożliwić działanie mapy.

Poprawki błędów

  • Zmieniono konstruktorów na ostateczne. b/70848565
  • Implementacja pokoju DataSource jest teraz naprawiona, aby obsługiwać zapytania z wieloma tabelami – ta poprawka występuje w salach od wersji 1.1.0-beta1 (patrz wyżej).
  • Naprawiono błąd, który powodował, że funkcja BoundaryCallback.onItemAtEndLoaded nie była wywoływana w przypadku funkcji PositionalDataSource, gdy włączone są symbole zastępcze, a łączny rozmiar jest dokładną wielokrotnością rozmiaru strony.

Wersja 1.0.0-alfa5

22 stycznia 2018 r.

Poprawki błędów

  • Naprawianie wczytywania strony, gdy obiekty zastępcze są wyłączone b/70573345
  • Dodatkowe logowanie na potrzeby śledzenia błędu b/70360195 związanego z zasadą IllegalArgumentException (oraz spekulacyjna poprawka po stronie pokoju)
  • Poprawki przykładowego kodu w języku Javadoc: b/70411933, b/71467637