Paging

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

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

Artefakt Wersja stabilna Wersja kandydująca Wersja Beta Wersja alfa
paging-* 3.3.5 - - -
paging-compose 3.3.5 - - -
Ta biblioteka została ostatnio zaktualizowana 11 grudnia 2024 r.

Deklarowanie zależności

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

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

Odlotowe

dependencies {
  def paging_version = "3.3.2"

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

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

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

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

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

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

Kotlin

dependencies {
  val paging_version = "3.3.2"

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

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

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

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

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

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

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

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

Opinia

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

Tworzenie nowego zgłoszenia

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

Wersja 3.3

Wersja 3.3.5

11 grudnia 2024 r.

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

Poprawki błędów

  • Usunęliśmy błąd, który powodował, że funkcja RecyclerView wywoływała błąd IndexOutOfBoundsException, gdy użytkownik przewijał dane podczas aktualizowania funkcji RecyclerView. (Id1f16, b/381024738)

Wersja 3.3.4

13 listopada 2024 r.

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

Poprawki błędów

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

Wersja 3.3.2

7 sierpnia 2024 r.

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

Nowe funkcje

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

Wersja 3.3.1

24 lipca 2024 r.

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

Poprawki błędów

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

Wersja 3.3.0

14 maja 2024 r.

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

Ważne zmiany od wersji 3.2.0

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

Zgodność z Kotlin Multiplatform

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

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

Wersja 3.3.0-rc01

1 maja 2024 r.

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

Wersja 3.3.0-beta01

3 kwietnia 2024 r.

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

Wersja 3.3.0-alpha05

20 marca 2024 r.

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

Zmiany w interfejsie API

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

Wersja 3.3.0-alpha04

6 marca 2024 roku

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

Poprawki błędów

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

Wersja 3.3.0-alpha03

7 lutego 2024 r.

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

Nowe funkcje

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

Zmiany w zachowaniu

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

Wersja 3.3.0-alpha02

20 września 2023 r.

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

Zgodność z Kotlin Multiplatform

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

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

Zmiany w interfejsie API

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

Darowizna zewnętrzna

Wersja 3.3.0-alpha01

20 września 2023 r.

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

Wersja 3.2

Wersja 3.2.1

6 września 2023 r.

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

Poprawki błędów

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

Wersja 3.2.0

26 lipca 2023 r.

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

Ważne zmiany od wersji 3.1.0

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

Wersja 3.2.0-rc01

21 czerwca 2023 r.

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

Darowizna zewnętrzna

Wersja 3.2.0-beta01

7 czerwca 2023 r.

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

Strona Nowy post

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

Zmiany w interfejsie API

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

Wersja 3.2.0-alpha06

24 maja 2023 r.

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

Nowe funkcje

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

Zmiany w interfejsie API

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

Zmiany w zachowaniu

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

Wersja 3.2.0-alpha05

3 maja 2023 r.

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

Zmiany w interfejsie API

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

Ulepszenia dokumentacji

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

Wkład zewnętrzny

Wersja 3.2.0-alpha04

8 lutego 2023 r.

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

Testowanie przewijania

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

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

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

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

Zmiany w interfejsie API

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

Wersja 3.2.0-alpha03

24 października 2022 r.

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

Testowanie przewijania

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

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

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

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

Zmiany w interfejsie API

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

Wersja 3.2.0-alpha02

10 sierpnia 2022 r.

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

Nowe funkcje

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

Poprawki błędów

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

Wersja 3.2.0-alpha01

1 czerwca 2022 r.

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

Zmiany w interfejsie API

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

Poprawki błędów

  • Wynik funkcji PagingSource.getRefreshKey() jest teraz prawidłowo priorytetyzowany nad initialKey w przypadkach, gdy zwraca wartość null, ale ustawiono niezerową wartość initialKey. (Ic9542, b/230391606)

Darowizna zewnętrzna

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

Wersja 3.1

Wersja 3.1.1

9 marca 2022 r.

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

Poprawki błędów

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

Wersja 3.1.0

17 listopada 2021 r.

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

Ważne zmiany od wersji 3.0.0

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

Wersja 3.1.0-rc01

3 listopada 2021 r.

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

Poprawki błędów

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

Wersja 3.1.0-beta01

13 października 2021 r.

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

Poprawki błędów

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

Wersja 3.1.0-alpha04

29 września 2021 r.

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

Zmiany w interfejsie API

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

Poprawki błędów

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

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

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

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

Wersja 3.1.0-alpha03

21 lipca 2021 r.

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

Zmiany w interfejsie API

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

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

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

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

Poprawki błędów

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

Wersja 3.1.0-alpha02

1 lipca 2021 r.

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

Nowe funkcje

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

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

    Aktualizacje strony mogą mieć miejsce w tych sytuacjach:

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

Poprawki błędów

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

Wersja 3.1.0-alpha01

2 czerwca 2021 r.

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

Zmiany w interfejsie API

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

Poprawki błędów

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

Darowizna zewnętrzna

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

Paginacja w edytorze tekstu – wersja 1.0.0

Wersja 1.0.0-alpha20

24 maja 2023 r.

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

Nowe funkcje

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

Poprawki błędów

  • Dane z poziomu pamięci podręcznej z poziomu 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. Oznacza to, że dane w pamięci podręcznej będą gotowe do wyświetlenia natychmiast po początkowym sformułowaniu po przywróceniu stanu. (I97a60, b/177245496)

Wersja 1.0.0-alpha19

3 maja 2023 r.

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

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

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

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

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

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

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

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

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

Zmiany w interfejsie API

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

Aktualizacje zależności

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

Wersja 1.0.0-alpha18

8 lutego 2023 r.

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

Wersja 1.0.0-alpha17

24 października 2022 r.

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

Nowe funkcje

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

Wersja 1.0.0-alpha16

10 sierpnia 2022 r.

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

Nowe funkcje

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

Poprawki błędów

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

Wersja 1.0.0-alpha15

1 czerwca 2022 r.

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

Zmiany w interfejsie API

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

Poprawki błędów

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

Wersja 1.0.0-alpha14

13 października 2021 r.

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

Wersja 1.0.0-alpha13

29 września 2021 r.

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

Zmiany w interfejsie API

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

Wersja 1.0.0-alpha12

21 lipca 2021 r.

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

Zmiany w interfejsie API

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

Wersja 1.0.0-alpha11

30 czerwca 2021 r.

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

Wersja 1.0.0-alpha10

2 czerwca 2021 r.

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

Wersja 1.0.0-alpha09

18 maja 2021 r.

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

Poprawki błędów

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

Zgodność funkcji tworzenia

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

Wersja 1.0.0-alpha08

24 lutego 2021 r.

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

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

Wersja 1.0.0-alpha07

10 lutego 2021 r.

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

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

Wersja 1.0.0-alpha06

28 stycznia 2021 roku

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

Poprawki błędów

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

Wersja 1.0.0-alpha05

13 stycznia 2021 r.

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

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

Wersja 1.0.0-alpha04

16 grudnia 2020 roku

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

Poprawki błędów

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

Wersja 1.0.0-alpha03

2 grudnia 2020 r.

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

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

Wersja 1.0.0-alpha02

11 listopada 2020 roku

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

Zmiany w interfejsie API

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

Wersja 1.0.0-alpha01

28 października 2020 r.

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

Nowe funkcje

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

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

Wersja 3.0.1

Wersja 3.0.1

21 lipca 2021 r.

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

Poprawki błędów

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

Wersja 3.0.0

Wersja 3.0.0

5 maja 2021 roku

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

Najważniejsze funkcje wersji 3.0.0

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

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

Wersja 3.0.0-rc01

21 kwietnia 2021 r.

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

Poprawki błędów

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

Wersja 3.0.0-beta03

24 marca 2021 r.

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

Poprawki błędów

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

Wersja 3.0.0-beta02

10 marca 2021 r.

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

Zmiany w interfejsie API

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

Poprawki błędów

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

Wersja 3.0.0-beta01

10 lutego 2021 r.

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

Zmiany w interfejsie API

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

Poprawki błędów

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

Wersja 3.0.0-alpha13

27 stycznia 2021 r.

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

Zmiany w interfejsie API

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

Poprawki błędów

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

Wersja 3.0.0-alpha12

13 stycznia 2021 r.

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

Zmiany w interfejsie API

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

Poprawki błędów

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

Wersja 3.0.0-alpha11

16 grudnia 2020 roku

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

Nowe funkcje

  • Dodaliśmy obsługę zapisanego stanu w przypadku tych podstawowych zastosowań: (pełna obsługa, zwłaszcza w przypadku warstwowego źródła, jest nadal opracowywana):
    • przepływ jest przechowywany w pamięci podręcznej, a aplikacja nie jest zabijana (np. przepływ jest przechowywany w pamięci podręcznej w ramach modelu widoku, a działalność jest odtwarzana w ramach procesu);
    • liczy się źródło stron, włączone są pola zastępcze, a układ nie jest rozczłonkowany;

Zmiany w interfejsie API

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

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

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

Poprawki błędów

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

Wersja 3.0.0-alpha10

2 grudnia 2020 r.

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

Zmiany w interfejsie API

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

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

    (Ib5570, b/173530908)

Poprawki błędów

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

Darowizna zewnętrzna

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

Znane problemy

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

Wersja 3.0.0-alpha09

11 listopada 2020 roku

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

Zmiany w interfejsie API

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

Poprawki błędów

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

Wersja 3.0.0-alpha08

28 października 2020 r.

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

Zmiany w interfejsie API

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

Poprawki błędów

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

Wersja 3.0.0-alpha07

1 października 2020 roku

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

Zmiany w interfejsie API

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

Poprawki błędów

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

Darowizna zewnętrzna

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

Wersja 3.0.0-alpha06

2 września 2020 r.

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

Zmiany w interfejsie API

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

Poprawki błędów

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

Wersja 3.0.0-alpha05

19 sierpnia 2020 r.

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

Poprawki błędów

  • Strony są teraz poprawnie pobierane w poprzednim etapie nawet wtedy, gdy prezentowane dane są mocno przefiltrowane
  • Zwracanie wartości LoadResult.Error podczas ponownego wczytywania nie powoduje już nieprawidłowego ponownego wywoływania próby dostępu do elementu.

Darowizna zewnętrzna

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

Wersja 3.0.0-alpha04

5 sierpnia 2020 r.

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

Zmiany w interfejsie API

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

Poprawki błędów

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

Darowizna zewnętrzna

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

Wersja 3.0.0-alpha03

22 lipca 2020 r.

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

Zmiany w interfejsie API

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

Poprawki błędów

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

Wersja 3.0.0-alpha02

24 czerwca 2020 r.

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

Zmiany w interfejsie API

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

Poprawki błędów

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

Wersja 3.0.0-alpha01

10 czerwca 2020 r.

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

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

Nowe funkcje w wersji 3.0

Znane problemy

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

Wersja 2.1.2

Wersja 2.1.2

18 marca 2020 r.

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

Poprawki błędów

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

Problem z wersją

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

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

Wersja 2.1.1

Wersja 2.1.1

18 grudnia 2019 r.

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

Poprawki błędów

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

Wersja 2.1.0

Wersja 2.1.0

25 stycznia 2019 r.

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

Wersja 2.1.0-rc01

6 grudnia 2018 r.

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

Wersja 2.1.0-beta01

1 listopada 2018 r.

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

Wersja 2.1.0-alpha01

12 października 2018 r.

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

Zmiany w interfejsie API

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

Poprawki błędów

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

Wersja 2.0.0

Wersja 2.0.0

1 października 2018 r.

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

Poprawki błędów

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

Wersja 2.0.0-beta01

2 lipca 2018 r.

Poprawki błędów

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

Zależności sprzed AndroidX

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

dependencies {
    def paging_version = "1.0.0"

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

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

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

Wersja 1.0.1

Wersja 1.0.1

26 czerwca 2018 r.

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

Poprawki błędów

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

RxJava2 w wersji 1.0.0

RxJava2 w wersji 1.0.0-rc1

16 maja 2018 r.

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

Wersja 1.0.0

Wersja 1.0.0-rc1

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

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

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

Wersja 1.0.0-beta1

5 kwietnia 2018 r.

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

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

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

Kotlin

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

Java

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

Nowe funkcje

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

Zmiany w interfejsie API

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

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

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

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

Poprawki błędów

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

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

Wersja 1.0.0-alpha7

21 marca 2018 r.

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

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

Zmiany w interfejsie API

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

Poprawki błędów

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

Wersja 1.0.0-alpha5

22 stycznia 2018 r.

Poprawki błędów

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