Strona

Biblioteka stronnicza ułatwia aby stopniowo i płynnie ładować dane RecyclerView.

Ta tabela zawiera wszystkie artefakty w grupie androidx.paging.

Artefakt Wersja stabilna Kandydat do wydania Wersja Beta Wydanie alfa
stronicowanie-* 3.3.2 - - -
stronicowanie-tworzenie 3.3.2 - - -
Data ostatniej aktualizacji: 7 sierpnia 2024 r.

Deklarowanie zależności

Aby dodać zależność od stronicowania, musisz dodać repozytorium Google Maven do w projektach AI. Zapoznaj się z repozytorium Google Maven. .

Dodaj zależności 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 korzystaniu z rozszerzeń Kotlin znajdziesz na stronie 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 odkryjesz nowe problemy jak ulepszyć tę bibliotekę. Przyjrzyj się istniejące problemy w tej bibliotece, zanim utworzysz nową. Możesz zagłosować nad istniejącym problemem przez klikając przycisk gwiazdki.

Tworzenie nowego numeru

Zobacz dokumentację narzędzia Issue Tracker. .

Wersja 3.3

Wersja 3.3.2

7 sierpnia 2024 r.

Usługa androidx.paging:paging-*:3.3.2 została zwolniona. Wersja 3.3.2 zawiera te zatwierdzenia.

Nowe funkcje

  • Do paging-common i paging-testing dodano nowe cele Kotlin-wieloplatformowe: watchos, tvos i linuxArm64 (90c9768), (53e0eca).

Wersja 3.3.1

24 lipca 2024 r.

Usługa androidx.paging:paging-*:3.3.1 została zwolniona. Wersja 3.3.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że interfejs AsyncPagingDataDiffer lub interfejsy API utworzone na jego podstawie, takie jak PagingDataAdapter używane z zasadą RecyclerView, nie mogły uruchomić więcej operacji, gdy źródło danych zapasowych odświeżało się podczas przewijania. (I60ca5, b/352586078)
  • Rozwiązaliśmy problem, który występował, gdy elementy były usuwane ze źródła danych podczas przewijania elementu RecyclerView przy użyciu PagingDataAdapter lub AsyncPagingDataDiffer. (I8c65a, b/347649763)

Wersja 3.3.0

14 maja 2024 r.

Usługa androidx.paging:paging-*:3.3.0 została zwolniona. Wersja 3.3.0 zawiera te zatwierdzenia.

Ważne zmiany wprowadzone od wersji 3.2.0

  • PagingDataPresenter jest teraz klasą publiczną. Wieloplatformowe prezentery mogą teraz być oparte na PagingDataPresenter, zamiast wymagać wewnętrznych interfejsów API stronicowania lub interfejsu AsyncPagingDataDiffer paging-runtime.
  • Dodano nowe metody pomocnicze LoadStates i CombinedLoadStates w metodach hasError i isIdle, aby sprawdzić, czy LoadStates ma odpowiednio stan Błąd lub NotLoading. W systemie Flow<CombinedLoadStates> dodano również nową metodę rozszerzenia awaitNotLoading() Kotlin, która czeka, aż wczytywanie zmieni się w stan NotLoading lub Błąd.
  • Funkcja PagingData.empty() domyślnie wysyła teraz stany NotLoading, chyba że do konstruktora zostaną przekazane niestandardowe stany LoadStates. Takie działanie nie ma związku z istniejącym zachowaniem, w ramach którego nie wysyła pola LoadStates po przesłaniu do PagingDataAdapter lub wysyła stany wczytywania, gdy jest zbierany jako LazyPagingItems. Jeśli wybierzesz opcję LazyPagingItems, od razu po utworzeniu kompozycji będzie się wyświetlać pusta lista.

Zgodność z platformą Kotlin – wieloplatformowa

Funkcja stronicowania obecnie wysyła artefakty zgodne z platformą Kotlin Multiplatform. Jest to w dużej mierze związane z opracowanymi nad nią materiałami pochodzącymi z projektu multiplatform-paging firmy CashApp.

  • Usługa paging-common przeniosła wszystkie interfejsy API stronicowania 3 do common. Jest teraz zgodna nie tylko z Androidem, ale także z jvm i iOS.
  • Kod partnera paging-testing został przeniesiony do usługi common. Jest teraz zgodny nie tylko z Androidem, ale też z jvm i iOS.
  • Kod paging-compose został przeniesiony do common i wysyła artefakt Androida, który jest zgodny z obsługą wieloplatformową androidx.compose.
  • paging-runtime, paging-guava, paging-rxjava2 i paging-rxjava3 pozostaną tylko na Androidzie.

Wersja 3.3.0-rc01

1 maja 2024 r.

Udostępniono interfejs androidx.paging:paging-*:3.3.0-rc01 bez zmian w wersji 3.3.0-beta01. Wersja 3.3.0-rc01 zawiera te zatwierdzenia.

Wersja 3.3.0-beta01

3 kwietnia 2024 r.

Wersja androidx.paging:paging-*:3.3.0-beta01 została udostępniona bez istotnych zmian. Wersja 3.3.0-beta01 zawiera te zatwierdzenia.

Wersja 3.3.0-alpha05

20 marca 2024 r.

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

Zmiany interfejsu API

  • Funkcja stronicowania korzysta teraz z adnotacji @MainThread adnotacji AndroidaX na potrzeby wspólnego kodu. (I78f0d, b/327682438)

Wersja 3.3.0-alfa04

6 marca 2024 roku

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

Poprawki błędów

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

Wersja 3.3.0-alfa03

7 lutego 2024 r.

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

Nowe funkcje

  • PagingDataPresenter jest teraz klasą publiczną. Wieloplatformowe prezentery mogą teraz być oparte na 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. Dodaliśmy też nowy interfejs API, który czeka w LoadStateFlow, dopóki obciążenie nie osiągnie stanu NotLoading lub błędu. (Id6c67).

Zmiana w działaniu

  • Funkcja PagingData.empty() domyślnie wysyła teraz stany NotLoading, chyba że do konstruktora zostaną przekazane niestandardowe stany LoadStates. Takie działanie nie ma związku z istniejącym zachowaniem, w ramach którego nie wysyła pola LoadStates po przesłaniu do PagingDataAdapter lub wysyła stany wczytywania, gdy jest zbierany jako LazyPagingItems. Jeśli wybierzesz opcję LazyPagingItems, od razu po utworzeniu kompozycji będzie się wyświetlać pusta lista. (I4d11d, b/301833847)

Wersja 3.3.0-alfa02

20 września 2023 r.

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

Zgodność z platformą Kotlin – wieloplatformowa

Funkcja stronicowania obecnie wysyła artefakty zgodne z platformą Kotlin Multiplatform. Jest to w dużej mierze związane z opracowanymi nad nią materiałami pochodzącymi z projektu multiplatform-paging firmy CashApp. Pozwoli to nam uniknąć rozbieżności między 2 repozytoriami i zapewnić ich zgodność.

  • Usługa paging-common przeniosła wszystkie interfejsy API stronicowania 3 do common. Jest teraz zgodna nie tylko z Androidem, ale także z jvm i iOS.
  • Kod partnera paging-testing został przeniesiony do usługi common. Jest teraz zgodny nie tylko z Androidem, ale też z jvm i iOS.
  • Kod paging-compose został przeniesiony do common i wysyła artefakt Androida, który jest zgodny z obsługą wieloplatformową androidx.compose.
  • paging-runtime, paging-guava, paging-rxjava2 i paging-rxjava3 pozostaną tylko na Androidzie.

Zmiany interfejsu API

  • Interfejs publiczny Loggera, który był przeznaczony wyłącznie do użytku wewnętrznego, został wycofany (I16e95, b/288623117)

Treści tłumaczone przez użytkowników zewnętrznych

Wersja 3.3.0-alfa01

20 września 2023 r.

  • Jest to pierwsza wieloplatformowa wersja bibliotek androidx.paging. Ta wersja ma tylko artefakty *-jvm i *-android. W przypadku wersji na systemy macOS, iOS i Linux użyj 3.3.0-alpha02.

Wersja 3.2

Wersja 3.2.1

6 września 2023 r.

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

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że interfejs API asSnapshot() artefaktu testowania stron internetowych zawieszał się po przekazaniu procesu utworzonego przy użyciu 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 uzupełniać (np. flowOf(PagingData.from(...))). W przypadku procesów, których nie można uzupełniać (np. MutableStateFlow, użyj przeciążenia PagingData.from, które zapewnia LoadStates. (I502c3).
  • Funkcja tworzenia stron docelowych używa teraz wewnętrznie funkcji AndroidUiDispatcher.Main, aby zapewnić dostępność nowych danych w tej samej ramce po zakończeniu wczytywania. (Ia55af).

Wersja 3.2.0

26 lipca 2023 r.

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

Ważne zmiany od wersji 3.1.0

  • Funkcja Paging Compose osiągnęła stabilność interfejsu API i została połączona z pozostałymi elementami strony, gdzie jej wersja jest teraz zgodna ze wszystkimi pozostałymi artefaktami stronicowania. Zmiany wprowadzone od wersji 3.1.0 obejmują:
    • Obsługa podglądu listy fałszywych danych przez utworzenie elementu PagingData.from(fakeData) i zapakowanie go PagingDataw element MutableStateFlow (np. MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Przekaż ten proces do elementów kompozycyjnych @Preview jako odbiorcy, aby aplikacja collectAsLazyPagingItems() wyświetliła podgląd.
    • Obsługa wszystkich leniwych układów, np. LazyVerticalGrid i HorizontalPager, oraz niestandardowych komponentów leniwych z bibliotek Wear i TV. Udało się to osiągnąć dzięki nowym metodom rozszerzeń LazyPagingItems niższego poziomu (itemKey) i itemContentType, które ułatwiają wdrożenie parametrów key i contentType w standardowych interfejsach API items, które już istnieją w usługach LazyColumn i LazyVerticalGrid, a także w ich odpowiednikach w interfejsach API, takich jak HorizontalPager.
    • Wycofano items(lazyPagingItems) i itemsIndexed(lazyPagingItems), które obsługują tylko LazyListScope.
  • Nowy artefakt paging-testing, który udostępnia interfejsy API opracowane pod kątem testowania jednostkowego każdej warstwy aplikacji i jej integracji z weryfikacją w izolacji. Zawiera on na przykład:
    • Klasa TestPager, która umożliwia weryfikację działania własnej niestandardowej implementacji PagingSource niezależnie od pagera i prawdziwego interfejsu użytkownika.
    • asPagingSourceFactory Interfejsy API do przekształcania Flow<List<Value>> lub statycznego List<Value> w elementy PagingSourceFactory, które można przekazać do pagera w testach.
    • asSnapshot rozszerzenie Kotlin w systemie Flow<PagingData<Value>>, które przekłada Flow<PagingData<Value>> na bezpośrednie List<Value>. Interfejs asSnapshot lambda umożliwia naśladowanie interfejsu aplikacji za pomocą interfejsów API takich jak scrollTo lub appendScrollWhile, dzięki czemu możesz sprawdzać poprawność podsumowania danych w dowolnym momencie zbioru danych ze stronami.
  • Dodaliśmy logi domyślne, aby informacje na potrzeby debugowania stron internetowych były ujawniane 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 tworzenia stron w widokach stron, jak i tworzenia stron w funkcji tworzenia.
  • Dodano konstruktory dla interfejsów PagingDataAdapter i AsyncPagingDataDiffer, które akceptują CoroutineContext zamiast CoroutineDispatcher.
  • Dodaliśmy nowy interfejs funkcjonalny PagingSourceFactory, który zapewnia wyraźniejszy interfejs API niż poprzedni znak () -> PagingSource lambda. Tej fabryki można użyć do utworzenia instancji pagera.

Wersja 3.2.0-rc01

21 czerwca 2023 r.

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

Treści tłumaczone przez użytkowników zewnętrznych

Wersja 3.2.0-beta01

7 czerwca 2023 r.

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

Tworzenie w tempie

  • Funkcja Paging Compose oficjalnie osiągnęła stabilność interfejsu API. W związku z tym wersja została zaktualizowana z 1.0.0-alpha20, aby pasowała do wersji wszystkich pozostałych artefaktów strony.

Zmiany interfejsu API

Wersja 3.2.0-alfa06

24 maja 2023 r.

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

Nowe funkcje

  • Dodaliśmy nowy interfejs funkcjonalny PagingSourceFactory, który zapewnia wyraźniejszy dostęp do interfejsu API niż obecne zestawy lambda () -> PagingSource. Tej fabryki można użyć do utworzenia instancji Pager. (I33165, b/280655188)
  • Dodano nowy interfejs API paging-testing typu List<Value>.asPagingSourceFactory(), aby uzyskać PagingSourceFactory, który wczytuje się tylko ze stałej listy danych. Istniejące rozszerzenie w witrynie Flow<List<Value>> nadal powinno być używane do testowania z użyciem wielu generowania danych statycznych. (Id34d1, b/280655188)

Zmiany interfejsu API

  • Wszystkie publiczne interfejsy API używane do testowania stronicowania są teraz oznaczone adnotacjami @VisibleForTesting, aby mieć pewność, że te interfejsy API są używane tylko w testach. (I7db6e).
  • Interfejs API asSnapshot nie wymaga już przekazywania CoroutineScope. Teraz domyślnie używany jest kontekst odziedziczony z zakresu nadrzędnego. (Id0a78, b/282240990)
  • Zmieniono kolejność parametrów konstruktora TestPager, aby intuicyjnie dopasowywać kolejność rzeczywistych parametrów konstruktora Pager (I6185a)
  • Przeniesiono użycie funkcji lambda typu () -> PagingSource<Key, Value> w testach stronicowania do typu PagingSourceFactory<Key, Value>. (I4a950, b/280655188)

Zmiany w działaniu

  • Główny dyspozytor nie jest już wymagany do uruchamiania testów stronicowania asSnapshot. Ustawienie go nie powoduje już żadnych zmian w działaniu testowym. (IE56ea).

Wersja 3.2.0-alpha05

3 maja 2023 r.

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

Zmiany interfejsu API

  • Domyślnie parametr loadOperations w interfejsie Paging Testing API interfejsu asSnapshot to pusta kolumna lambda. Dzięki temu możesz wywoływać funkcję asSnapshot bez przekazywania żadnych operacji wczytywania w celu pobrania danych z początkowego wczytywania danych. (Ied354, b/277233770)

Ulepszenia dokumentacji

  • Zaktualizowaliśmy dokumentację dotyczącą asPagingSourceFactory(), aby doprecyzować, że jest to metoda rozszerzenia w Flow, która zwraca fabrykę wielokrotnego użytku na potrzeby generowania instancji PagingSource. (I5ff4f, I705b5)
  • Zaktualizowaliśmy dokumentację dotyczącą LoadResult.Pagekonstruktora, aby doprecyzować, że trzeba zastąpić elementy itemsBefore i itemsAfter, aby umożliwić korzystanie z skoków. (Ied354).

Treści tłumaczone z zewnątrz

Wersja 3.2.0-alfa04

8 lutego 2023 r.

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

Testowanie testowania

  • Artefakt paging-testing zawiera teraz metodę asPagingSourceFactory służącą do tworzenia elementu pagingSourceFactory z Flow<List<Value>>, który ma zostać przesłany do pagera. Każdy element List<Value>> wygenerowany w przepływie reprezentuje wygenerowanie danych z podziałem na strony. Ułatwia to testy stronicowania, na przykład przekształcenia PagingData, przez sfałszowanie źródła danych, z którego ma zbierać pager. (I6f230, b/235528239)
  • Artefakt paging-testing został powiększony o nowe interfejsy API odpowiednie do sprawdzania, czy dane zawarte w elemencie Flow<PagingData<T>> są prawidłowe. Można to użyć na przykład do potwierdzenia danych wyjściowych funkcji Flow<PagingData<T>> z warstwy ViewModel.

    Można to zrobić za pomocą rozszerzenia asSnapshot Kotlin w systemie Flow<PagingData<Value>>, które przekłada Flow<PagingData<Value>> na bezpośredni List<Value>. Funkcja lambda asSnapshot umożliwia naśladowanie UI aplikacji za pomocą interfejsów API takich jak scrollTo czy appendScrollWhile w spójny i powtarzalny sposób, dzięki czemu możesz sprawdzać poprawność podsumowania danych w dowolnym momencie zbioru danych ze stronami.

    // 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 sekcji Testowanie współprogramów Kotlin na Androidzie. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ib29}, I59}

Zmiany interfejsu API

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

Wersja 3.2.0-alfa03

24 października 2022 r.

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

Testowanie testowania

Ta wersja zawiera nowy artefakt: paging-testing. Ten artefakt udostępnia interfejsy API opracowane z myślą o testowaniu jednostkowym każdej warstwy aplikacji i jej integracji z weryfikacją w izolacji.

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

Element TestPager należy uznać za fałszywypodwójny testowy, który odzwierciedla prawdziwą implementację Pager, a jednocześnie upraszcza interfejs API do testowania PagingSource. Te interfejsy API są interfejsami API suspend. Należy je uruchamiać w obrębie runTest zgodnie z opisem w przewodniku testowania współrzędnych Kotlina na Androidzie.

Przykładowe użyte interfejsy API można znaleźć w testach room-paging, które zostały zmienione na wykorzystanie TestPager.

Zmiany interfejsu API

  • Umożliwia wygodne iterację w czasie od LoadResult.Page.data do LoadResult.Page.iterator(). Pośrednio pozwala to na korzystanie z metody flatten biblioteki standardowej Kotlin, gdy jest podawana właściwość List<LoadResult.Page>, na przykład właściwość pages PagingState przekazywana do metody PagingSource.getRefreshKey. (IE0718)

Wersja 3.2.0-alfa02

10 sierpnia 2022 r.

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

Nowe funkcje

  • Podział na strony udostępnia teraz logi za pomocą klas AsyncPagingDataDiffer lub PagingDataAdapter, co pozwala udostępniać informacje na potrzeby debugowania zebrane z metody 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

  • Naprawiliśmy brakujący błąd konstruktora PagingDataDiffer występujący w przypadku używania paging-common:3.2.0-alpha01 w środowisku wykonawczym paging-runtime:3.1.1 lub starszym.(b/235256201).

Wersja 3.2.0-alpha01

1 czerwca 2022 r.

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

Zmiany interfejsu API

  • Dodano konstruktory dla interfejsów PagingDataAdapter i AsyncPagingDataDiffer, które akceptują CoroutineContext zamiast CoroutineDispatcher. (Idc878).
  • Domyślnie PagingData.from() i PagingData.empty() nie będą już miały wpływu na CombinedLoadStates po stronie prowadzącego. Zostało dodane nowe przeciążenie, które umożliwia przekazywanie do tych konstruktorów elementów sourceLoadStates i remoteLoadStates, aby zachować dotychczasowe zachowanie ustawienia LoadStates w celu zachowania pełnej końcowej wartości (tj. NotLoading(endOfPaginationReached = false)), w razie potrzeby możesz też uwzględnić stany zdalne. Jeśli wartość LoadStates nie zostanie przekazana, poprzednia wartość CombinedLoadStates zostanie zachowana po stronie prowadzącego, gdy otrzyma statyczne dane PagingData. (Ic3ce5, b/205344028)

Poprawki błędów

  • Wynik funkcji PagingSource.getRefreshKey() ma teraz prawidłowy priorytet względem initialKey w przypadkach, gdy zwróci wartość null, ale została ustawiona wartość initialKey inna niż null. (IC9542, b/230391606)

Treści tłumaczone przez użytkowników zewnętrznych

  • Aktualizacja interfejsu :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.

Usługa 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 narzędzie .cachedIn(). Ta zmiana znacznie ułatwia reagowanie na zmiany w trybie LoadState przez usunięcie zbędnych zdarzeń LoadState.NotLoading, które zostały wygenerowane między ponawianiem nieudanych prób wczytywania, podczas odświeżania lub unieważnianiu.

Wersja 3.1.0

17 listopada 2021 r.

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

Ważne zmiany wprowadzone od wersji 3.0.0

  • Interfejsy API Flow<PagingData>.observable i Flow<PagingData>.flowable nie są już eksperymentalne
  • Zmiany w zachowaniu użytkownika LoadState:
    • endOfPaginationReached ma teraz zawsze wartość false w przypadku LoadType.REFRESH zarówno w przypadku PagingSource, jak i RemoteMediator
    • Element LoadStates z stron docelowych czeka teraz na prawidłowe wartości z PagingSource i RemoteMediator przed przekazaniem danych w dół. Nowe generacje funkcji PagingData będą teraz zawsze prawidłowo zaczynać się od wartości Loading w przypadku stanu odświeżania, a w niektórych przypadkach nie zostaną nieprawidłowo zresetowane do wartości NotLoading.
    • Interfejsy .loadStateFlow i .addLoadStateListener w interfejsach API prowadzącego prezentację nie wysyłają już nadmiarowo początkowej wartości CombinedLoadStates, w której stan mediatora jest zawsze ustawiony na null
  • Anulowanie subskrypcji w przeszłości odbywa się teraz bezzwłocznie w przypadku unieważnienia lub nowych generacji. Nie powinno być już wymagane używanie funkcji .collectLatest w systemie Flow<PagingData>, ale nadal jest to zalecane.
  • Element PagingSource.LoadResult.Invalid został dodany jako nowy typ zwrotu z elementu PagingSource.load. Powoduje to odrzucenie wszystkich oczekujących i przyszłych żądań obciążenia do tego zasobu (PagingSource) i unieważnianie go. Ten typ zwracania 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 prowadzące do prezentacji .onPagesPresented i .addOnPagesUpdatedListener, które uruchamiały się synchronicznie w miarę prezentacji stron w interfejsie. Aktualizacje stron mogą mieć miejsce w tych sytuacjach:
    • Początkowe wczytywanie nowej generacji elementów PagingData zostanie ukończone niezależnie od tego, czy nowa generacja będzie zawierać jakiekolwiek zmiany w prezentowanych elementach. na przykład Nowe generowanie, które ukończy wstępne wczytywanie bez aktualizacji, ponieważ lista jest dokładnie taka sama, wywoła to wywołanie zwrotne.
    • Strona zostanie wstawiona, nawet jeśli nie zawiera nowych produktów.
    • Strona zostaje usunięta, nawet jeśli była pusta.

Wersja 3.1.0-rc01

3 listopada 2021 r.

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

Poprawki błędów

  • Naprawiliśmy warunek wyścigu i wyciek pamięci w funkcji .cachedIn() w przypadkach, gdy w ramach funkcji PagingData wysyłano wiele zdarzeń ładowania strony w dół przy braku obserwatorów lub w okresie, gdy obserwator przełączał się na nowe strony PagingData. (IB682e)

Wersja 3.1.0-beta01

13 października 2021 r.

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

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że duża liczba szybkich dostępów do elementów mogła być pomijana w ramach parametru prefetchOdległość, co powodowało wstrzymywanie wczytywania strony. Problem ten występuje szczególnie w przypadku, gdy wiele elementów jest rozmieszczonych jednocześnie, a ich wczytywanie powinno być ustalane na podstawie kierunku przewijania przez użytkownika. Dostępy do tych elementów są teraz buforowane i nadawane synchronicznie według priorytetów, aby zapobiec ich utracie. (Aosp/1833273).

Wersja 3.1.0-alfa04

29 września 2021 r.

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

Zmiany interfejsu API

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

Poprawki błędów

  • W przypadku LoadStates endOfPaginationReached to teraz zawsze false za LoadType.REFRESH. Wcześniej można było EndOfPaginationOsiągnięto true dla RemoteMediator REFRESH, ale nie dla strony PagingSource. Ten sposób działania jest teraz skonsolidowany i zawsze zwraca false, ponieważ opcja ODŚWIEŻENIA nigdy nie ma sensu, a teraz jest jako część umowy dotyczącej interfejsu API w LoadStates. Podejmując decyzję, podział na strony zostaje zakończony, zawsze należy to robić w odniesieniu do wybierz kierunek APPEND lub PREPEND. (I047b6)
  • Parametry LoadState z stronicowania czekają teraz na prawidłowe wartości z obu PagingSource i RemoteMediator przed rozpoczęciem przesyłania między kolejnymi wiele pokoleń. Uniemożliwia to wysyłanie nowych generacji danych PagingData NotLoading in CompledLoadStates.source.refresh, jeśli już był Wczytuję; nowe generacje PagingData będą teraz zawsze prawidłowo uruchamiane z ładowaniem w przypadku stanu odświeżania zamiast pierwszym resetowaniem stanu do stanu NieLoading niewłaściwie w niektórych przypadkach.

    Anulowanie subskrypcji w przeszłości odbywa się teraz bezzwłocznie w przypadku unieważnienia nowe pokolenia. Nie powinno być już wymagane używanie klasy .collectCollect w usłudze Flow<PagingData>, ale nadal jest to zdecydowanie zalecane. (I0b2b5, b/177351336, b/195028524)

  • .loadStateFlow i .addLoadStateListener w interfejsach API prowadzącego prezentację nie wysyłaj już nadmiarowo początkowego obiektu 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 korzystasz z narzędzia RemoteMediator, stany mediatora są zawsze wypełniane.
    2. Rejestrowanie nowego detektora loadState lub nowego kolektora w .loadStateFlow nie będzie już natychmiast emitować bieżącej wartości jeśli nie otrzymała prawdziwego żądania CombinedLoadStates od PagingData Może się tak zdarzyć, gdy kolektor lub detektor uruchomi się przed przesłaniem atrybutu PagingData. (I1a748).

Wersja 3.1.0-alfa03

21 lipca 2021 r.

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

Zmiany interfejsu API

  • Do Strona PagingSource. Kiedy strona PagingSource.load jest zwracana LoadResult.Nieprawidłowy, stronicowanie spowoduje odrzucenie wczytanych danych i unieważnienie PagingSource. Ten typ zwrotu ma na celu: obsługa potencjalnie nieprawidłowych lub nieaktualnych danych, które mogą zostać zwrócone z bazy danych lub sieci.

    Jeśli na przykład bazowa baza danych jest zapisywana w Wartość PagingSource nie jest unieważniona na czas, może zwrócić niespójne wyniki, jeśli jego implementacja zależy od niezmienność zbioru danych, z którego jest wczytywany (np. LIMIT implementacje bazy danych stylu OFFSET). W tym scenariuszu jest to należy sprawdzić unieważnienie po wczytaniu i zwraca błąd LoadResult.Invalid, który powoduje odrzucenie wszystkich oczekujące lub przyszłe żądania wczytywania do tego PagingSource i unieważnić go.

    Ten typ zwrotu jest również obsługiwany przez interfejs Paging2 API, który wykorzystuje LivePagedList lub RxPagedList. W przypadku używania parametru PagingSource interfejsów API PagedList strony Paging2, element PagedList zostaje natychmiast odłączony, zatrzymując kolejne próby wczytania danych na tej liście PagedList powoduje unieważnienie strony PagingSource.

    LoadResult jest klasą zapieczętowaną, co oznacza, że jest to niekompatybilną ze źródłem, tak aby przypadki użycia były bezpośrednio Wyniki strony PagingSource.load będą musiały obsługiwać parametr LoadResult.Invalid podczas kompilowania danych. Na przykład użytkownicy Kotlin korzystający z funkcji wyczerpująca – kiedy sprawdzić typ zwrotu, trzeba dodać kontrolę dla nieprawidłowego typu. (Id6bd3, b/191806126, b/192013267)

Poprawki błędów

  • Wywołania zwrotne unieważnienia dodane przez PagingSource.registerInvalidatedCallback lub DataSource.addInvalidatedCallback (Uzasadnione połączenie zwrotne) jest teraz aktywowane automatycznie, jeśli zostały zarejestrowane w PagingSource / DataSource, który już jest nieprawidłowa. To rozwiązuje problem z wyścigiem, który spowodował spadek stron internetowych sygnalizuje unieważnienie i zatrzymują się po podaniu źródła, które zostało już nieprawidłowe podczas początkowego wczytywania. Dodatkowo unieważnij wywołania zwrotne są teraz prawidłowo usuwane po wywołaniu prawdopodobnie zostanie wywołana najwyżej raz. (I27e69)
  • Przesyłanie wartości początkowej zmiennej (InitialPagedList) z nowo utworzonego strumienia PagedList, np. LivePagedListBuilder lub RxPagedListBuilder nie będą już usuwać wcześniej wczytanych danych.

Wersja 3.1.0-alfa02

1 lipca 2021 r.

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

Nowe funkcje

  • Dodano interfejsy API detektora i prezentacji onPagesPresented które uruchamiają się natychmiast po zaktualizowaniu prezentowanych stron w interfejsie.

    Te aktualizacje są synchroniczne z interfejsem użytkownika, więc możesz wywoływać metody adaptera np. .snapshot lub .getItemCount w celu sprawdzenia stanu po została zastosowana aktualizacja. Zwróć uwagę, że .snapshot() pozostawia wartość jawnie wywoływane, ponieważ wykonanie każdej aktualizacji może być kosztowne.

    Aktualizacje stron mogą mieć miejsce w tych sytuacjach:

    • Trwa wczytywanie początkowe nowej generacji stron PagingData, niezależnie od tego, czy nowa generacja zawiera jakiekolwiek zmiany prezentowane elementy. na przykład Nowa generacja kończąca wstępne wczytywanie bez aktualizacji, ponieważ lista jest dokładnie taka sama zainicjować to wywołanie zwrotne.
    • Strona jest wstawiona, nawet jeśli nie zawiera ona nowych elementy
    • Strona jest usuwana, nawet jeśli usunięta strona była pusta (I272c9, b/189999634)

Poprawki błędów

  • Uzyskiwanie dostępu do strony PagedList.dataSource z utworzonej wartości początkowej przez LivePagedList lub RxPagedList nie będą już nieprawidłowo wyświetlać IllegalStateException (I96707)

Wersja 3.1.0-alpha01

2 czerwca 2021 r.

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

Zmiany interfejsu API

  • Zajęcia prowadzone przez paging-rxjava3 są teraz dostępne w androidx.paging.rxjava3 pakietu w taki sposób, aby nie kolidował z paging-rxjava2 (Ifa7f6)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że stronicowanie czasami wysyłało inne wiadomości bez operacji do funkcji RecyclerView, które mogą powodować aktywowanie przez określone detektory z wyprzedzeniem. (IC507f, b/182510751)

Treści tłumaczone przez użytkowników zewnętrznych

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

Paging Compose w wersji 1.0.0

Wersja 1.0.0-alfa20

24 maja 2023 r.

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

Nowe funkcje

  • Funkcja tworzenia stron docelowych obsługuje teraz wyświetlanie podglądu listy fałszywych danych przez utworzenie elementu PagingData.from(fakeData) i pakowanie go PagingData w obiekt MutableStateFlow (np. MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Jeśli użyjesz tych danych jako danych wejściowych w @Preview, wywołania funkcji collectAsLazyPagingItems() udostępnią ich podgląd LazyPagingItems. (I8a78d, b/194544557)

Poprawki błędów

  • Dane z pager.flow.cachedIn w pamięci podręcznej, które zostały zebrane w usłudze LazyPagingItems, będą teraz dostępne natychmiast po przywróceniu stanu bez konieczności zbierania asynchronicznego. Oznacza to, że dane z pamięci podręcznej będą gotowe do prezentacji od razu po pierwotnej kompozycji, gdy przywrócisz stan. (I97a60, b/177245496)

Wersja 1.0.0-alfa19

3 maja 2023 r.

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

Obsługa wszystkich układów leniwych

Wcześniej funkcja Paging Compose udostępniała w systemie LazyListScope niestandardowe rozszerzenia items i itemsIndexed, co oznaczało, że nie można było używać tej funkcji w połączeniu z innymi leniwymi układami, takimi jak LazyVerticalGrid czy HorizontalPager, ani z innymi niestandardowymi komponentami leniwymi dostępnymi w bibliotekach Wear i TV. Ta nieelastyczność to podstawowa aktualizacja tej wersji.

Aby obsługiwać bardziej leniwe układy, musieliśmy utworzyć interfejsy API w innej warstwie. Zamiast udostępniać niestandardowy interfejs API items dla każdego układu leniwego, funkcja Paging Compose udostępnia teraz metody rozszerzeń na nieco niższym poziomie w elementach LazyPagingItems w językach itemKey i itemContentType. Te interfejsy API pomagają Ci wdrażać parametry key i contentType w standardowych interfejsach API items, które już istnieją w usługach LazyColumn i LazyVerticalGrid, a także ich odpowiedniki w interfejsach API, takich jak HorizontalPager. (Ifa13b, Ib04f0, b/259385813)

Oznacza to, że obsługa kolumny 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 korzystania z nowych interfejsów API znajdziesz w przykładach.

Te zmiany wydłużą przykłady LazyColumn i LazyRow o kilka wierszy, ale zauważyliśmy, że spójność wszystkich lenich układów jest ważnym czynnikiem dla osób korzystających od tej pory z funkcji Paging Compose. Z tego powodu dotychczasowe rozszerzenia do LazyListScope zostały wycofane. (I0c459, I92c8f, b/276989796)

Zmiany interfejsu API

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

Aktualizacje zależności

  • Zależność strony Tworzenie stron zmieniła się z Compose 1.0.5 na Compose 1.2.1. (Ib1918, b/255283378)

Wersja 1.0.0-alfa18

8 lutego 2023 r.

Pakiet androidx.paging:paging-compose:1.0.0-alpha18 został udostępniony bez zmian. Wersja 1.0.0-alfa18 zawiera te zatwierdzenia.

Wersja 1.0.0-alfa17

24 października 2022 r.

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

Nowe funkcje

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

Wersja 1.0.0-alfa16

10 sierpnia 2022 r.

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

Nowe funkcje

  • Stronocjonowanie udostępnia teraz logi za pomocą klasy LazyPagingItems, aby udostępniać informacje na potrzeby 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 w przypadku używania paging-compose:1.0.0-alpha15 z paging-common:3.1.1 lub starszymi wersjami.(b/235256201,b/239868768)

Wersja 1.0.0-alfa15

1 czerwca 2022 r.

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

Zmiany interfejsu API

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

Poprawki błędów

  • LazyPagingItems ustawia teraz dla początkowego zdarzenia loadState odświeżenie LoadState.Loading. (I55043, b/224855902)

Wersja 1.0.0-alfa14

13 października 2021 r.

Usługa 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.

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

Zmiany interfejsu API

  • Funkcja LazyPagingItems.snapshot() została zastąpiona właściwością LazyPagingItems.itemSnapshotList (Ie2da8)
  • Usunięto wycofaną zasadę LazyPagingItems.getAsState() (Ie65e4)

Wersja 1.0.0-alfa12

21 lipca 2021 r.

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

Zmiany interfejsu API

  • Parametry items(lazyPagingItems) i itemsIndexed(lazyPagingItems) używane do łączenia stronicowania z zasadą LazyColumn/Row akceptują teraz parametr klucza opcji, który umożliwia określenie klucza stabilnego reprezentującego 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.

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

Wersja 1.0.0-alpha10

2 czerwca 2021 r.

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

Wersja 1.0.0-alpha09

18 maja 2021 r.

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

Poprawki błędów

  • LazyPagingItems Można teraz obserwować parametry itemCount i metodę pobierania elementów, co umożliwia korzystanie z nich także w LazyVerticalGrid (Ie2446, b/171872064, b/168285687)

Zgodność podczas tworzenia wiadomości

  • Usługa androidx.paging:paging-compose:1.0.0-alpha09 jest zgodna tylko z funkcją tworzenia wiadomości w wersji 1.0.0-beta07 i nowszych.

Wersja 1.0.0-alpha08

24 lutego 2021 r.

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

Aktualizacja umożliwia integrację z funkcją tworzenia wiadomości w wersjach 1.0.0-beta01.

Wersja 1.0.0-alpha07

10 lutego 2021 r.

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

Zaktualizowano do integracji z funkcją tworzenia wiadomości w wersji alfa.

Wersja 1.0.0-alpha06

28 stycznia 2021 roku

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

Poprawki błędów

Aktualizacja jest zgodna z wersją 1.0.0-alfa11.

Wersja 1.0.0-alpha05

13 stycznia 2021 r.

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

Aktualizacja jest zgodna z wersją 1.0.0-alfa10.

Wersja 1.0.0-alpha04

16 grudnia 2020 roku

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

Poprawki błędów

  • Zaktualizowano właściwości wygody, CombinedLoadStates.refresh, CombinedLoadStates.prepend, CombinedLoadStates.append: przejście tylko z Loading na NotLoading gdy stan mediatora i obciążenia źródła ma wartość NotLoading, Zastosowano aktualizację zdalną. (I65619)

Wersja 1.0.0-alpha03

Grudzień 2, 2020

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

  • Zaktualizowano, aby odpowiadała wersji 1.0.0-alfa08.

Wersja 1.0.0-alpha02

11 listopada 2020 roku

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

Zmiany interfejsu API

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

Wersja 1.0.0-alpha01

28 października 2020 r.

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

Nowe funkcje

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

Usługa 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 wartości początkowej wygenerowanej przez LivePagedList lub RxPagedList nie będzie już powodowało błędnego zgłoszenia wyjątku (I96707).

Wersja 3.0.0

Wersja 3.0.0

5 maja 2021 roku

Usługa 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ść obecnych interfejsów API ze strony Paging 2.x.x została wycofana i zastąpiona nowymi interfejsami Paging 3 API, aby wprowadzić te ulepszenia:

  • Pierwsza klasa obsługa współrzędnych i przepływu Kotlin
  • Pomoc w anulowaniu
  • Wbudowane sygnały o stanie wczytywania i błędach
  • Funkcja ponowienia próby i odświeżenie
  • Wszystkie 3 podklasy DataSource zostały połączone w ujednoliconą klasę PagingSource
  • niestandardowe przekształcenia stron, w tym wbudowane narzędzie do dodawania separatorów;
  • Wczytuję nagłówki i stopki stanów

Wersja 3.0.0-rc01

21 kwietnia 2021 r.

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

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że stronicowanie czasami wysyłało inne wiadomości bez operacji do funkcji RecyclerView, które mogą powodować aktywowanie przez określone detektory z wyprzedzeniem. (IC507f, b/182510751)

Wersja 3.0.0-beta03

24 marca 2021 r.

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

Poprawki błędów

  • Zmieniliśmy sposób obsługi obiektów zastępczych, gdy lista jest załadowano ponownie, aby zapobiec nieoczekiwanym skokom w elemencie RecyclerView. Zobacz NullPaddedDiffing.md, aby dowiedzieć się więcej. (If1490, b/170027529, b/177338149)
  • Różne kreatory PagedList (stara ścieżka zgodności) nie wywołują już nieprawidłowo synchronicznie elementu DataSource.Factory.create() w wątku głównym po wywołaniu funkcji .build(). (b/182798948)

Wersja 3.0.0-beta02

10 marca 2021 r.

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

Zmiany interfejsu API

  • Rozszerzenia Rx3 są teraz prawidłowo rozpowszechniane @ExperimentalCoroutinesApi Wymaganie dotyczące akceptacji. Wcześniej zaznaczono w metodzie @get, która jest ignorowana przez kompilatora Kotlin na https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)

Poprawki błędów

  • Egzekwuj ograniczenia dotyczące publicznego korzystania z eksperymentalnych interfejsów API (I6aa29, b/174531520)
  • Naprawiono błąd, przez który PagingState zawsze miał wartość null, gdy zdalne odświeżanie.
  • Naprawiliśmy błąd polegający na tym, że puste strony zwracane przez PagingSource mogły uniemożliwiać ponowne pobranie strony ze względu na wykonanie funkcji prefetchDistance, przez co strony mogły się zawieszać.
.

Wersja 3.0.0-beta01

10 lutego 2021 r.

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

Zmiany interfejsu API

  • Otoki Rx2 i Rx3 udostępniają teraz eksperymentalną adnotację zależy od tego, Jeśli używasz kodów kompatybilnych Rx w paging-rxjava2 lub paging-rxjava3 musisz teraz dodawać adnotacje do użytkowania za pomocą @OptIn(ExperimentalCoroutinesApi::class) (Ib1f9d)

Poprawki błędów

  • Naprawiliśmy błąd IndexOutOfBoundsException: Inconsistency detected, który pojawiał się czasem w przypadku korzystania z interfejsów API w wersji 2 DataSource za pomocą ścieżek zgodności.
  • Wywołanie isInvalid podczas inicjowania obiektu DataSource, gdy jest używane za pomocą ścieżek zgodności, jest teraz prawidłowo uruchamiane w FetchDispatcher, a nie w wątku głównym. Naprawia to problem IllegalStateException z powodu dostępu do bazy danych w wątku głównym podczas korzystania z implementacji PagingSource w pokoju.

Wersja 3.0.0-alfa13

27 stycznia 2021 r.

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

Zmiany interfejsu API

  • Implementacja PagingSource.getRefreshKey nie jest już opcjonalna. jest to funkcja abstrakcyjna bez domyślnej implementacji. Migrowani użytkownicy mogą nadal zwracać ustawienia domyślne implementacji, która zwraca null, ale getRefreshKey() powinna stosować rzeczywistą implementację, która zwraca klucz na podstawie bieżąca pozycja przewijania, która umożliwia dalsze ładowanie stron według strony na środku widocznego obszaru przez PagingState.anchorPosition, jeśli jak to tylko możliwe. (I4339a)
  • InvalidatingPagingSourceFactory to teraz klasa końcowa (Ia3b0a)
  • Zezwalaj na konfigurowanie separatora terminala (nagłówka / stopki) z dodatkowym opcjonalnym parametrem SeparatorType. Obie opcje to:
    • FULLY_COMPLETE – obecne zachowanie; Poczekaj na wygenerowanie zarówno PagingSource, RemoteMediator do oznaczenia końca strony docelowej (endOfPaginationReached) przed dodaniem terminala separatory. Jeśli nie jest używany element RemoteMediator, wartość zdalnego loadState to zignorowano. Przydaje się to przede wszystkim, gdy chcesz wyświetlać tylko sekcję separatorów po pełnym wczytaniu sekcji, włącznie z pobieraniem z źródło zdalne, np. sieć.
    • SOURCE_COMPLETE – poczekaj tylko na oznaczenie strony PagingSource endOfPaginationReached, nawet jeśli jest używany obiekt RemoteMediator. Dzięki temu nagłówki i stopki, które mają być zsynchronizowane synchronicznie z początkowym wczytywania, przez co użytkownicy nie muszą przewijać strony, by zobaczyć terminal. separatory. (Ibe993, b/174700218)

Poprawki błędów

  • Usunięto rzadki wyciek pamięci, który występował, gdy element PagingSource przed rozpoczęciem ładowania modułu pobierania stron. (I9606b, b/174625633)

Wersja 3.0.0-alfa12

13 stycznia 2021 r.

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

Zmiany interfejsu API

  • Nieprawidłowa klasa invalidatingPagingSourceFactory nie jest już klasą abstrakcyjną ponieważ nigdy nie mieliśmy żadnych metod abstrakcyjnych. (I4a8c4).
  • Dodano przeciążenie funkcji .cachedIn(), która akceptuje model ViewModel. zamiast Lifecycle lub CoroutineScope w przypadku użytkowników Javy. (I97d81, b/175332619)
  • Zezwalaj obiektom wywołującym Javę na wykonywanie operacji przekształcania PagingData w w sposób asynchroniczny przez akceptowanie wykonawcy do operatora przekształcenia . Wszystkie operatory przekształcenia -Synchronizuj mają sufiks -Sync teraz, a użytkownicy Kotlin Coroutine będą musieli zidentyfikować wywołując funkcję rozszerzenia, która zamiast tego akceptuje blok zawieszenia. Wszystkie operatory przekształcania PagingData zostały przeniesione do rozszerzeń w statycznej klasie PagingDataTransforms. Użytkownicy języka Java muszą: Wywołuj je za pomocą statycznych pomocników, np. PagingDataTransforms.map(pagingData, transform) W przypadku użytkowników Kotlin składnia jest taka sama, ale trzeba zaimportować plik . (If6885, b/172895919)

Poprawki błędów

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

Wersja 3.0.0-alfa11

16 grudnia 2020 roku

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

Nowe funkcje

  • Dodaliśmy obsługę zapisanych stanów w tych podstawowych przypadkach użycia (pełna obsługa, zwłaszcza w przypadku przypadku źródłowego z poszczególnymi warstwami, nadal jest rozwijana):
    • przepływ jest zapisany w pamięci podręcznej, a aplikacja nie jest przerywana (np.przepływ jest zapisywany w modelu widoku w pamięci podręcznej, a aktywność jest odtwarzana w trakcie procesu).
    • źródło stronicowania jest liczone, obiekty zastępcze są włączone, a układ nie pojawiają się w kolejności.

Zmiany interfejsu API

  • PagingSource.getRefreshKey() to teraz stabilny interfejs API (I22f6f, b/173530980)
  • PagingSource.invalidate nie jest już funkcją otwartą. Jeśli w celu otrzymywania powiadomień o unieważnieniu, rozważ wywołanie rejestrować nieprawidłową funkcję wywołania zwrotnego zamiast zastępowania wartości invalidate. (I628d9, b/173029013, b/137971356)
  • Pager ma teraz jeden eksperymentalny konstruktor za pomocą zwykłych konstruktorów, zamiast ujawniać eksperymentalne interfejsy API nieeksperymentalny publiczny interfejs API za pomocą adnotacji umożliwiającej wyrażenie zgody. (I9dc61, b/174531520)
  • Zaktualizowano właściwości wygody, CombinedLoadStates.refresh, CombinedLoadStates.prepend, CombinedLoadStates.append: przejście tylko z Loading na NotLoading gdy stan mediatora i obciążenia źródła ma wartość NotLoading, Zastosowano aktualizację zdalną. (I65619)
  • Usunięto parametr LoadParams.pageSize (został już usunięty wycofane). Zalecamy użycie elementu LoadParams.loadSize w PagingSource.

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

    Jeśli testujesz źródło danych Paging2 bez użycia pagera lub PagedList, pageSize może nie pasować do wartości PagingConfig.pageSize, jeśli ustawiasz też: initialLoadSize. Jeśli ważne jest, aby testów, spróbuj użyć Pager/PagedList, który będzie ustawiony wewnętrznie dla metod wczytywania DataSource. (I98ac7, b/149157296)

Poprawki błędów

  • Naprawiono błąd spowodowany błędem IllegalStateException, gdy: używając separatorów z ustawioną funkcją PagingConfig.maxSize. (I0ed33, b/174787528)
  • Usunięto błąd, przez który stan wczytywania funkcji PREPEND / APPEND nie powodował natychmiast zaktualizuj do NotLoading(endOfPaginationReached = true) po początkowym wczytaniu, jeśli skonfigurowano funkcję RemoteMediator (I8cf5a)
  • Naprawiliśmy błąd, który powodował, że interfejsy API po stronie prowadzącego, takie jak .snapshot() czy .peek(), zwracały poprzednią (nieaktualną listę) w ramach aktualizacji ListUpdateCallback.
  • Naprawiliśmy błąd, który powodował, że operatory separatorów nie dodawały nagłówków ani stopek, gdy były używane z funkcją RemoteMediator.
  • Usunęliśmy błąd, przez który po aktualizacji parametru LoadState na wartość NotLoading for RemoteMediator blokował się on w stanie wczytywania.
  • Naprawiliśmy błąd, który powodował, że interfejs API zgodności Paging2.0 (.asPagingSourceFactory()) mógł powodować inicjowanie kopii zapasowej DataSource w niewłaściwym narzędziu CoroutineDispatcher. Pozwala to rozwiązać awarie i możliwe przypadki błędów ANR, zwłaszcza w przypadku korzystania z bieżącej implementacji PagingSource w pokoju, która korzysta z tej ścieżki zgodności.

Wersja 3.0.0-alfa10

Grudzień 2, 2020

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

Zmiany interfejsu API

  • Wycofane interfejsy API dataRefreshFlow i dataRefreshListener zostały usunięte ponieważ są one nadmiarowe w przypadku aktualizacji loadStateFlow / Detektor. Dla: Jego odpowiednikiem w przypadku migracji jest:

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

    (IB5570, b/173530908)

Poprawki błędów

  • endOfPaginationReached for RemoteMediator: REFRESH teraz poprawnie propagować do aktualizacji LoadState i uniemożliwiać zdalne APPEND oraz PREPEND od aktywacji. (I94a3f, b/155290248)
  • Prezentowanie pustej listy z powodu pustej strony początkowej lub intensywne filtrowanie nie będzie już uniemożliwiać uruchomienia strony PREPEND lub APPEND. (I3e702, b/168169730)
  • Rozwiązaliśmy problem, który powodował, że nie można było nawiązać połączenia z numerem getRefreshKey w kolejnych generacjach PagingSource, gdy unieważnienia występują szybko. (I45460, b/170027530)

Treści tłumaczone przez użytkowników zewnętrznych

  • Dodano nową klasę abstrakcyjną invalidatingPagingSourceFactory za pomocą interfejsu API .invalidate(), który przekazuje informację o unieważnieniu do wszystkich PagingSources jego emisji. Dzięki @claraf3! (IE71fc, b/160716447)

Znane problemy

  • Nagłówki i stopki przekształcenia .insertSeparators() mogą nie pojawiać się od razu, gdy korzystasz z usługi RemoteMediator b/172254056.
  • Korzystanie z narzędzia RemoteMediator może spowodować zablokowanie obiektu zdalnego LoadState w przypadku unieważnienia i zakończenia procesu PagingSource.load(LoadParams.Refresh(...)) przed zwróceniem wartości b/173717820 przez RemoteMediator.load().

Wersja 3.0.0-alpha09

11 listopada 2020 roku

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

Zmiany interfejsu API

  • Całkowicie wycofaj metody dataRefreshFlow / detektora ze Zastąp klauzulą. (I6e2dd)

Poprawki błędów

  • Poprawiono zgłaszanie żądania IllegalArgumentException w przypadku używania separatora z funkcją RemoteMediator, które powodowało wywołanie unieważnienia, gdy ładowanie zdalne, które zwracałoby koniec strony (I3a260)

Wersja 3.0.0-alpha08

28 października 2020 r.

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

Zmiany interfejsu API

  • Warianty usługi DataSource.InvalidatedCallback w języku Kotlin / Java połączono, aktywując konwersje SAM w Kotlin za pomocą (dostępny w wersji Kotlin 1.4). Naprawiliśmy również błąd polegający na tym, że wariant kotlin nieważnych wywołań zwrotnych nie został wywołany po przekształceniu do .map lub .mapByPage. (I1f244, b/165313046)

Poprawki błędów

  • Interakcja strony z ViewPager została znacznie ulepszona. W szczególności działanie stron docelowych nie będzie już anulować wywołania funkcji RemoteMediator#load z powodu unieważnienia strony. Nie będzie też już wysyłać żądania wczytywania/dodania na początku, jeśli jest wymagane ODŚWIEŻ, dopóki żądanie ODŚWIEŻ nie zakończy się powodzeniem. (I6390b, b/162252536)
  • Sprawdzanie lint interfejsu API dla MissingGetterMatchingBuilder jest włączone dla androidx (I4bbea, b/138602561)
  • Naprawiono błąd, który powodował, że .withLoadState* pomocników typu ConcatAdapter awaria z powodu powiadomienia RecyclerView z wątku w tle (I18bb5, b/170988309)
  • Naprawiliśmy błąd polegający na tym, że ładowanie bardzo małej, niepustej strony czasami uniemożliwiało prawidłowe uruchamianie wczytywania z wyprzedzeniem.Iffda3 b/169259468

Wersja 3.0.0-alpha07

1 października 2020 roku

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

Zmiany interfejsu API

  • Asynchroniczne operatory stronicowania oparte na Guavie akceptują teraz wykonawcy jako parametr, by kontrolować kontekst wykonywania. (Id4372).

Poprawki błędów

  • Poprawiono wyjątek IndexOutOfBounds w obiekcie RemoteMediator na rasę. (I00b7f, b/165821814)
  • Naprawiono warunek wyścigu w DataSource -> Konwersja PagingSource, która może spowodować zignorowanie sygnałów unieważnienia z DataSource na podstawie wyniku PagingSource.
  • Rozwiązaliśmy problem z logiką pobierania strony, który czasami powodował, że nie mogła odbierać nowych generacji obiektu PagingSource do czasu wywołania funkcji PagingDataAdapter.refresh()
  • Naprawiono błąd, który powodował utratę pozycji przewijania w przypadku użycia DataSource przekonwertowanego na PagingSource (np. generowany przez Room) w połączeniu z funkcją RemoteMediator

Treści tłumaczone przez użytkowników zewnętrznych

  • Dziękujemy użytkownikowi @simonschiller za dodanie operatorów transformacji asynchronicznej RxJava2, RxJava3 i opartych na Guavie do strony PagingData.

Wersja 3.0.0-alpha06

Wrzesień 2, 2020

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

Zmiany interfejsu API

  • UnsupportedOperationException z bardziej zrozumiałym przekazem brak obsługi stabilnych identyfikatorów jest teraz zgłaszany zawsze, Funkcja PagingDataAdapter.setHasStableIds jest wywoływana. (Ib3890, b/158801427)

Poprawki błędów

  • InsertSeparators nie odfiltrowuje już pustych stron, co pozwala pobiera z wyprzedzeniem odległość, która ma być przestrzegana przez prowadzącego nawet w przypadku, wstawionych jest wiele pustych stron. (I9cff6, b/162538908)

Wersja 3.0.0-alpha05

19 sierpnia 2020 r.

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

Poprawki błędów

  • Obecnie strony poprawnie pobierają strony nawet wtedy, gdy wyświetlane dane są mocno filtrowane
  • Zwrócenie LoadResult.Error do ponownego wczytywania nie będzie już powodować, że dostęp elementu będzie nieprawidłowo wywoływany ponowienie próby

Treści tłumaczone przez użytkowników zewnętrznych

  • Dziękujemy Klara F za pomoc w porządkowaniu testów. (549612)

Wersja 3.0.0-alfa04

5 sierpnia 2020 r.

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

Zmiany interfejsu API

  • Dodano interfejs peek() API do interfejsów AsyncPagingDataDiffer oraz PagingDataAdapter, aby zezwolić na dostęp do prezentowanych danych bez użycia strony aktywatora . (I38898, b/159104197)
  • Dodano interfejs API snapshot() do języków PagingDataAdapter oraz AsyncPagingDataDiffer, aby umożliwić pobieranie prezentowanych elementów bez które uruchamiają pobieranie strony. (I566b6, b/159104197)
  • Dodano konstruktor PagingData.from(List<T>), aby zezwolić przedstawianie list statycznych, które można połączyć z ogólnym Przepływ danych stronicowania w celu wyświetlania list statycznych w określonych stanach, np. przed początkowym efektom ODŚWIEŻENIA lub po prostu do testowania przekształceń. (Id134d).
  • Wycofywanie interfejsów API procesu odświeżania danych / detektora w niezmienionej formie miał na celu wyeksponowanie stanu prezentowanych elementów przy użyciu funkcji REFRESH, ale dzięki ulepszeniu czasu wywołania zwrotnego FlowState / detektora i właściwości itemCount jest nadmiarowy (Ia19f3)
  • Dodano kody zgodności RxJava3 dla systemów PagingSource i RemoteMediator (I49ef3, b/161480176)

Poprawki błędów

  • PositionalDataSource zostało przekonwertowane na PagingSource przez Pomocnik typu toPagingSourceFactory, w tym PagingSource wygenerowany przez pokój prawidłowo oznaczają swoje umiejętności skakania. (I3e84c, b/162161201)
  • Naprawiono błąd polegający na tym, że korzystanie z synchronicznego wariantu requestData może prowadzić do wyścigu powodującego wyścig ClosedSendChannelException (I4d702, b/160192222)

Treści tłumaczone przez użytkowników zewnętrznych

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

Wersja 3.0.0-alpha03

22 lipca 2020 r.

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

Zmiany interfejsu API

  • Konstruktor strony PagingState jest teraz publiczny, co powinno ułatwić testowanie implementacji getRefreshKey() (I8bf15).
  • Ukryto warianty funkcji mapy Kotlin DataSource z Javy w niejednoznaczności między wariantami oryginału i kotlinem. (If7b23, b/161150011)
  • Nadmiarowe interfejsy API, zaprojektowane jako udogodnienia dla użytkowników Kotlin, zostało oznaczone @JvmSynthetic (I56ae5)
  • Dodano przeciążenia konstruktora LoadResult.Page Domyślna wartość opcji itemsBefore i itemsAfter to COUNT_UNDEFINED (I47849)
  • Istniejące operatory stronicowania akceptują metody zawieszania oraz wprowadziliśmy nowe funkcje mapSync, FlaMapSync i filterSync, niezawieszające z operatorami Java. Dotychczasowe metody przekształcania przeniesiono do funkcji rozszerzeń, więc użytkownicy Kotlin będą musieli je zaimportować. (I34239, b/159983232)

Poprawki błędów

  • Źródła stron dla sal (i PositionalDataSource) będą teraz separatora wiodącego na pierwszej stronie, więc użytkownik nie muszą przewijać ekranu, aby go pokazać. (I6f747, b/160257628)
  • Teraz dostęp do obiektów zastępczych poprawnie aktywuje ładowanie strony PagingSource do chwili zwracana jest strona, która spełnia wymagany indeks po przekształceniu przez PagingData.filter() (I95625, b/158763195)
  • Naprawiono błąd, który czasem przewijał się po Strona PagingSource zwraca błąd, co może uniemożliwić działanie strony PagingDataAdapter.retry() nie podejmować ponownych prób. (I1084f, b/160194384)
  • Rozwiązaliśmy problem, który powodował, że dostęp do elementu po upuszczeniu strony mógł być nie mogą ładować stron, mimo że dostęp do nich mieścił się w zakresie wstępnego pobierania (Ie95ae, b/160038730)
  • Ustawienie strony PagingConfig.maxSize nie powoduje już włączenia obiektów zastępczych po wystąpieniu zdarzenia upadku (I2be29, b/159667766)

Wersja 3.0.0-alpha02

24 czerwca 2020 r.

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

Zmiany interfejsu API

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

Poprawki błędów

  • Pager sprawdza teraz, czy strona PagingSource jest używana ponownie w fabryce, aby zapobiec przypadkowemu ponownemu użyciu nieprawidłowych zasobów PagingSource, które spowodowały niejasny błąd (I99809, b/158486430).
  • Błędy działania funkcji RemoteMediator REFRESH nie uniemożliwiają załadowania strony PagingSource (I38b1b, b/158892717)
  • Niezawieszona wersja submitData nie powoduje już awarii z powodu równoczesnego zbierania danych w kilku obiektach PagingData, gdy wywołano po zawieszeniu wersji submitData. (I26358, b/158048877)
  • Naprawiono „nie można zbierać 2 razy z poziomu pagera”. wyjątek, który może wystąpić po zmianie konfiguracji (I58bcc, b/158784811)

Wersja 3.0.0-alpha01

10 czerwca 2020 r.

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

Zaktualizowaliśmy bibliotekę stron internetowych do wersji 3.0, aby udostępnić kilka nowych ważnych funkcji.

Nowe funkcje w wersji 3.0

Znane problemy

  • 3 dokumenty javadocs na potrzeby stronowania nie są jeszcze dostępne. W międzyczasie skorzystaj z przewodników, do których linki znajdują się powyżej, lub z dokumentów Kotlin. (B/158614050)

Wersja 2.1.2

Wersja 2.1.2

18 marca 2020 r.

Usługa androidx.paging:paging:2.1.2 została zwolniona. Wersja 2.1.2 zawiera te zatwierdzenia w porównaniu do wersji 2.1.0.

Poprawki błędów

  • W rzadkich przypadkach, gdy konwertujesz pozycję podczas unieważniania, popraw błąd przez IndexOutOfBoundsException.

Problem z wydaniem

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

  • Strona 2.1.2 zawiera poprawkę ukierunkowaną na obciążenie, którą oryginalnie opublikowano w wersji 2.1.1, ale tym razem została ona prawidłowo wybrana jako wersja 2.1.0. Jeśli korzystasz obecnie z wersji 2.1.1, zdecydowanie zalecamy przejście na tę wersję.

Wersja 2.1.1

Wersja 2.1.1

18 grudnia 2019 r.

Usługa 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 z PositionalDataSources jest teraz wyśrodkowane na ostatnim dostępie, gdy obiekty zastępcze są wyłączone.

Wersja 2.1.0

Wersja 2.1.0

25 stycznia 2019 r.

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

Wersja 2.1.0-rc01

6 grudnia 2018 r.

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

Wersja 2.1.0-beta01

1 listopada 2018 r.

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

Wersja 2.1.0-alpha01

12 października 2018 r.

Formatowanie 2.1.0-alpha01 obejmuje 2 główne dodatki – pomijanie stron oraz biblioteki rozszerzeń KTX dla każdego artefaktu – a także kilka innych zmian w interfejsie API i poprawki błędów.

Zmiany interfejsu API

  • Dodano PagedList.Config.Builder.setMaxSize() w przypadku ograniczenia liczby wczytywanych elementów w pamięci.
  • Dodano aplikację androidx.paging.Config() jako alternatywę dla usługi Kotlin dla aplikacji PagedList.Config.Builder
  • Dodano aplikację androidx.paging.PagedList() jako alternatywę dla usługi Kotlin dla aplikacji PagedList.Builder
  • Dodano aplikację DataSourceFactory.toLiveData() jako alternatywę dla usługi Kotlin dla aplikacji LivePagedListBuilder
  • Dodano DataSourceFactory.toObservable() i toFlowable() jako alternatywne wersje Kotlin dla aplikacji RxPagedListBuilder
  • Dodano element AsyncPagedListDiffer.addPagedListListener() do słuchania przy zamienianiu elementu PagedList. b/111698609
  • Dodano wariant PagedListAdapter.onCurrentListChanged(), który przekazuje starą i nową listę; poprzedni wariant został wycofany.
  • Dodaliśmy PagedListAdapter/AsyncPagedListDiffer.submitList() warianty, które przyjmują dodatkowe wywołanie zwrotne, które jest wywoływane, jeśli wyświetli się lista stronicowana po różnicy. Pozwala to zsynchronizować zamianę PagedList z innymi aktualizacjami interfejsu. b/73781068
  • Dodano PagedList.getLoadedCount(), aby poinformować Cię, ile elementów jest w pamięci. Pamiętaj, że jeśli obiekty zastępcze są wyłączone, zwracana wartość jest zawsze równa .size().

Poprawki błędów

  • Usunięto warunek wyścigu podczas różnicowania w przypadku ponownego wykorzystania list. b/111591017.
  • PagedList.loadAround() wysyła teraz IndexOutOfBoundsException, gdy indeks jest nieprawidłowy. Wcześniej mógł się on zawiesić z niejasnym innym wyjątkiem.
  • Rozwiązaliśmy problem, który powodował, że bardzo mały rozmiar wczytywanych elementów przy niezmienionych danych uniemożliwiał dalsze wczytywanie strony b/113122599.
.

Wersja 2.0.0

Wersja 2.0.0

1 października 2018 r.

Udostępniamy stronę 2.0.0 z jednym poprawką błędu.

Poprawki błędów

  • Rozwiązaliśmy problem, który mógł występować przy bardzo szybkim przewijaniu przy użyciu elementów PositionalDataSource i obiektów zastępczych b/114635383.

Wersja 2.0.0-beta01

2 lipca 2018 r.

Poprawki błędów

  • Poprawione znikanie treści w niektórych przypadkach dodawanych na początku (obiekty zastępcze wyłączone, PositionalDataSource) b/80149146
  • (Już opublikowana w wersji 1.0.1) Naprawiono awarie, które powodowały problemy z sygnaturą zdarzeń dotyczących ruchu w PagedListAdapter i AsyncPagedListDiffer. b/110711937

Zależności sprzed AndroidaX

W przypadku wersji stronicowania starszych niż AndroidX, które obowiązują w następujących wersjach, 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.

Publikowanie stron 1.0.1 z pojedynczym błędem w runtime. Dla stabilności zdecydowanie zalecamy użycie 1.0.1. Udostępniona została również strona strona 1.0.1 w języku RxJava2, która jest taka sama jak 1.0.0-rc1.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że PagedListAdapter i AsyncPagedListDiffer nie sygnalizowały zdarzeń ruchu. b/110711937

RxJava2 w wersji 1.0.0

RxJava2 w wersji 1.0.0-rc1

16 maja 2018 r.

Formatowanie 1.0.0-rc1 w środowisku RxJava2 jest przenoszone do wersji kandydującej bez żadnych zmian w stosunku do początkowej wersji alfa.

Wersja 1.0.0

Wersja 1.0.0-rc1

19 kwietnia 2018 r. Kandydat do wydania strony

Nie planujemy nowych znanych problemów ani nowych funkcji Stronokowanie wersji 1.0.0. Przejdź na wyższą wersję projektów, aby korzystać z 1.0.0-rc1 i pomóż nam ją przetestować, abyśmy mogli wysłać solidną jak skałę 1.0.0.

Ta wersja nie zawiera żadnych zmian. Ta wersja jest taka sama jak 1.0.0-beta1.

Wersja 1.0.0-beta1

5 kwietnia 2018 r.

Funkcja strony będzie dostępna w wersji beta przez krótki czas, zanim stanie się kandydatką do opublikowania. W przypadku Paging 1.0 nie planujemy dalszych zmian interfejsu API, ponieważ poprzeczka w przypadku jakichkolwiek takich zmian jest bardzo wysoki.

Obsługa stronicowania w wersji alfa RxJava2 jest dostępna jako oddzielny moduł opcjonalny (android.arch.paging:rxjava2:1.0.0-alpha1) i będzie tymczasowo wyświetlać się w osobnej wersji, dopóki się nie ustabilizuje.

Ta nowa biblioteka stanowi alternatywę dla języka LivePagedListBuilder w języku RxJava2, pozwalającą Observable i Flowable, co trwa Scheduler zamiast Executor s:

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

  • Pole RxPagedListBuilder zostało dodane za pomocą nowego artefaktu android.arch.paging:rxjava2.

Zmiany interfejsu API

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

    • Nazwa setBackgroundThreadExecutor() została zmieniona na setFetchExecutor() (w: PagedList.Builder i LivePagedListBuilder)

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

  • Poprawiono status PagedList.mCallbacks użytkownika na prywatny.

Poprawki błędów

  • Funkcja LivePagedListBuilder wyzwala wstępne wczytywanie (PagedList) określonego wykonawcy, zamiast puli wątków IO na poziomie Arch Komponenty.

  • Usunięto nieprawidłowe działanie w wewnętrznych kodach towarzyszących DataSource (stosowanych do implementacji DataSource.map, oraz ładowanie z wyłączonym symbolem zastępczym PositionalDataSource) b/77237534

Wersja 1.0.0-alfa

21 marca 2018 r.

Strona 1.0.0-alpha7 jest udostępniana wraz z cyklami życia 1.1.1. Wynik działania strony alfa7 zależy od przeniesienia klasy Function wymienionej powyżej, dlatego musisz zaktualizować zależność lifecycle:runtime do android.arch.lifecycle:runtime:1.1.1.

Określanie stron według stron alpha7 ma być planowane do wprowadzenia w wersji beta przed udostępnieniem tej funkcji.

Zmiany interfejsu API

  • Obiekty DataSource.LoadParams mają teraz konstruktor publiczny, a obiekty DataSource.LoadCallback są teraz abstrakcyjne. Umożliwia to opakowywanie klasy DataSource lub bezpośrednie testowanie funkcji DataSource za pomocą pozorowanego wywołania zwrotnego. b/72600421
  • Mappery dla DataSource i DataSource.Factory
    • map(Function<IN,OUT>) umożliwia przekształcanie, zawijanie i dekorowanie wyników wczytywanych przez DataSource.
    • mapByPage(<List<IN>,List<OUT>>) umożliwia to samo w przypadku przetwarzania wsadowego (np. jeśli elementy wczytywane z SQL muszą dodatkowo wysyłać zapytania do oddzielnej bazy danych, co można zrobić wsadowo).
  • Dodano metodę PagedList#getDataSource() jako wygodną metodę b/72611341
  • Wszystkie wycofane klasy zostały usunięte z interfejsu API, w tym pozostałości pakietu recyclerview.extensions oraz LivePagedListProvider.
  • Klasa DataSource.Factory została zmieniona z interfejsu na klasę abstrakcyjną, aby włączyć funkcje mapy.

Poprawki błędów

  • Zmiany w konstruktorach na ostateczne. b/70848565
  • Implementacja pokoju DataSource została naprawiona, aby umożliwić obsługę zapytań obejmujących wiele tabel – ta poprawka jest dostępna w pokoju 1.1.0-beta1 (patrz wyżej).
  • Naprawiliśmy błąd polegający na tym, że funkcja BoundaryCallback.onItemAtEndLoaded nie była wywoływana dla elementu PositionalDataSource, jeśli włączone były obiekty zastępcze. łączny rozmiar jest dokładną wielokrotnością rozmiaru strony.

Wersja 1.0.0-alfa5

22 stycznia 2018 r.

Poprawki błędów

  • Rozwiązywanie problemów z wczytywaniem strony po wyłączeniu obiektów zastępczych b/70573345
  • Dodatkowe logowanie umożliwiające śledzenie błędu IllegalArgumentException b/70360195 (i spekulacyjnej poprawki po stronie pokoju)
  • Poprawki przykładowego kodu Javadoc b/70411933, b/71467637