Podział
Ta tabela zawiera listę wszystkich artefaktów w grupie androidx.paging
.
Artefakt | Wersja stabilna | Kandydat do publikacji | Wersja Beta | Wersja alfa |
---|---|---|---|---|
stronicowanie-* | 3.3.0 | - | - | - |
paging-compose | 3.3.0 | - | - | - |
Deklarowanie zależności
Aby dodać zależność od strony, musisz dodać do projektu repozytorium Google Maven. Więcej informacji znajdziesz w repozytorium Google Maven.
W pliku build.gradle
aplikacji lub modułu dodaj zależności artefaktów, których potrzebujesz:
Odlotowy
dependencies { def paging_version = "3.3.0" implementation "androidx.paging:paging-runtime:$paging_version" // alternatively - without Android dependencies for tests testImplementation "androidx.paging:paging-common:$paging_version" // optional - RxJava2 support implementation "androidx.paging:paging-rxjava2:$paging_version" // optional - RxJava3 support implementation "androidx.paging:paging-rxjava3:$paging_version" // optional - Guava ListenableFuture support implementation "androidx.paging:paging-guava:$paging_version" // optional - Jetpack Compose integration implementation "androidx.paging:paging-compose:3.3.0" }
Kotlin
dependencies { val paging_version = "3.3.0" implementation("androidx.paging:paging-runtime:$paging_version") // alternatively - without Android dependencies for tests testImplementation("androidx.paging:paging-common:$paging_version") // optional - RxJava2 support implementation("androidx.paging:paging-rxjava2:$paging_version") // optional - RxJava3 support implementation("androidx.paging:paging-rxjava3:$paging_version") // optional - Guava ListenableFuture support implementation("androidx.paging:paging-guava:$paging_version") // optional - Jetpack Compose integration implementation("androidx.paging:paging-compose:3.3.0") }
Informacje o korzystaniu z rozszerzeń Kotlin znajdziesz w dokumentacji ktx.
Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.
Opinia
Twoja opinia pomoże nam ulepszyć Jetpack. Daj nam znać, jeśli znajdziesz nowe wydania lub masz pomysły na ulepszenie tej biblioteki. Zanim utworzysz nową bibliotekę, przejrzyj problemy z tą biblioteką. Możesz oddać głos w ramach istniejącego problemu, klikając przycisk gwiazdki.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Wersja 3.3
Wersja 3.3.0
14 maja 2024 r.
Aplikacja androidx.paging:paging-*:3.3.0
została zwolniona. Wersja 3.3.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 3.2.0
PagingDataPresenter
jest teraz klasą publiczną. Wieloplatformowe prezentacje można teraz tworzyć na bazie elementówPagingDataPresenter
, zamiast wymagać wewnętrznych interfejsów API stronicowania lub interfejsuAsyncPagingDataDiffer
paging-runtime
.- Dodano nowe metody pomocnicze
LoadStates
iCombinedLoadStates
w metodachhasError
iisIdle
, aby sprawdzić, czyLoadStates
ma stan Błąd lubNotLoading
. W elemencieFlow<CombinedLoadStates>
dodano też nową metodę rozszerzenia KotlinawaitNotLoading()
, która czeka, aż obciążenie osiągnie stanNotLoading
lub Błąd. PagingData.empty()
domyślnie wysyła teraz stanyNotLoading
, chyba że do swojego konstruktora zostanie przekazany niestandardowy parametrLoadStates
. Ta wartość różni się od obecnego zachowania, w którym nie wysyła zdarzeńLoadStates
, gdy jest przesyłany doPagingDataAdapter
, lub wysyła stany wczytywania, gdy są zbierane jakoLazyPagingItems
. Po zebraniu danych jakoLazyPagingItems
natychmiast przy tworzeniu pierwszej kompozycji będzie także wyświetlana pusta lista.
Zgodność z Kotlin na wielu platformach
Obecnie funkcja stronicowania wysyła artefakty zgodne z platformą Kotlin Multiplatform, w dużej mierze dzięki kopiowaniu danych z projektu multiplatform-paging firmy CashApp.
- Pakiet
paging-common
przeniósł wszystkie interfejsy API Stron 3 docommon
i jest teraz zgodny nie tylko z Androidem, ale także z vm i iOS. - Kod w
paging-testing
został przeniesiony docommon
i jest teraz zgodny nie tylko z Androidem, ale także z JVM i iOS. paging-compose
przeniósł swój kod docommon
i wysyła artefakt Androida zgodnie z wieloplatformową obsługąandroidx.compose
.- Aplikacje
paging-runtime
,paging-guava
,paging-rxjava2
ipaging-rxjava3
będą nadal dostępne tylko na Androidzie.
Wersja 3.3.0-rc01
1 maja 2024 r.
Udostępniono wersję androidx.paging:paging-*:3.3.0-rc01
bez zmian w stronie Paging 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 opublikowana bez istotnych zmian. Wersja 3.3.0-beta01 zawiera te zatwierdzenia.
Wersja 3.3.0-alfa05
20 marca 2024 r.
Aplikacja androidx.paging:paging-*:3.3.0-alpha05
została zwolniona. Wersja 3.3.0-alpha05 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Strona korzysta teraz z adnotacji
@MainThread
adnotacji AndroidX dla wspólnego kodu. (I78f0d, b/327682438)
Wersja 3.3.0-alfa04
6 marca 2024 roku
Aplikacja androidx.paging:paging-*:3.3.0-alpha04
została zwolniona. Wersja 3.3.0-alpha04 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono drobne błędy w dokumentacji związane z dodaniem zgodności z wieloma platformami Kotlin. (Aosp/2950785)
Wersja 3.3.0-alfa03
7 lutego 2024 r.
Aplikacja androidx.paging:paging-*:3.3.0-alpha03
została zwolniona. Wersja 3.3.0-alpha03 zawiera te zatwierdzenia.
Nowe funkcje
PagingDataPresenter
jest teraz klasą publiczną. Wieloplatformowe prezentacje można teraz tworzyć na bazie elementówPagingDataPresenter
, zamiast wymagać wewnętrznych interfejsów API stronicowania lub interfejsuAsyncPagingDataDiffer
paging-runtime
. (Id1f74, b/315214786)- Dodano nowe metody pomocnicze
LoadStates
iCombinedLoadStates
, aby sprawdzić, czyLoadStates
ma stan Błąd lubNotLoading
. Dodano też nowy interfejs API, który czeka naLoadStateFlow
, dopóki obciążenie nie ustabilizuje się w stanieNotLoading
lub Błąd. (Id6c67).
Zmiana działania
PagingData.empty()
domyślnie wysyła teraz stanyNotLoading
, chyba że do swojego konstruktora zostanie przekazany niestandardowy parametrLoadStates
. Ta wartość różni się od obecnego zachowania, w którym nie wysyła zdarzeńLoadStates
, gdy jest przesyłany doPagingDataAdapter
, lub wysyła stany wczytywania, gdy są zbierane jakoLazyPagingItems
. Po zebraniu danych jakoLazyPagingItems
natychmiast przy tworzeniu pierwszej kompozycji będzie także wyświetlana pusta lista. (I4d11d, b/301833847)
Wersja 3.3.0-alfa02
20 września 2023 r.
Aplikacja androidx.paging:paging-*:3.3.0-alpha02
została zwolniona. Wersja 3.3.0-alpha02 zawiera te zatwierdzenia.
Zgodność z Kotlin na wielu platformach
Obecnie funkcja stronicowania wysyła artefakty zgodne z platformą Kotlin Multiplatform, w dużej mierze dzięki kopiowaniu danych z projektu multiplatform-paging firmy CashApp. Pozwoli nam to uniknąć rozbieżności między 2 repozytoriami i zapewnić ich zgodność.
- Pakiet
paging-common
przeniósł wszystkie interfejsy API Stron 3 docommon
i jest teraz zgodny nie tylko z Androidem, ale także z vm i iOS. - Kod w
paging-testing
został przeniesiony docommon
i jest teraz zgodny nie tylko z Androidem, ale także z JVM i iOS. paging-compose
przeniósł swój kod docommon
i wysyła artefakt Androida zgodnie z wieloplatformową obsługąandroidx.compose
.- Aplikacje
paging-runtime
,paging-guava
,paging-rxjava2
ipaging-rxjava3
będą nadal dostępne tylko na Androidzie.
Zmiany w interfejsie API
- Publiczny interfejs dziennika, który był przeznaczony tylko do użytku wewnętrznego, został wycofany (I16e95, b/288623117)
Wkład z zewnątrz
- Dziękujemy veyndan z firmy Cash App za pomoc w przeniesieniu Paging na Kotlin Multiplatform (#560, #561, #562, #573, #576, #577, #578, #578, #579, #579
Wersja 3.3.0-alfa01
20 września 2023 r.
- To pierwsza wieloplatformowa wersja bibliotek androidx.paging. Ta wersja zawiera tylko
*-jvm
i*-android
artefaktów. W przypadku wersji systemu macOS, iOS i Linux użyj3.3.0-alpha02
.
Wersja 3.2
Wersja 3.2.1
6 września 2023 r.
Aplikacja androidx.paging:paging-*:3.2.1
została zwolniona. Wersja 3.2.1 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono błąd, który powodował, że interfejs API
asSnapshot()
artefaktu testowania stron zawieszał się po przekazaniu przepływu utworzonego za pomocąPagingData.from(List)
, ponieważ interfejsasSnapshot()
nie miał żadnych informacji o po zakończeniu wczytywania (w przeciwieństwie do przeciążeniaPagingData.from(List, LoadStates)
). To rozwiązanie działa tylko w przypadku przepływów możliwych do uzupełniania (np.flowOf(PagingData.from(...))
). W przypadku przepływów, które nie są kompletne (np.MutableStateFlow
, użyj przeciążeniaPagingData.from
, które udostępniaLoadStates
. (I502c3) - Strona tworzenia wiadomości na stronę wewnętrzna korzysta teraz wewnętrznie z metody
AndroidUiDispatcher.Main
, by nowe dane były dostępne w tej samej ramce, w której zakończyło się wczytywanie. (Ia55af)
Wersja 3.2.0
26 lipca 2023 r.
Aplikacja androidx.paging:paging-*:3.2.0
została zwolniona. Wersja 3.2.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 3.1.0
- Tworzenie strony w trybie strony osiągnęło stabilność interfejsu API i zostało scalone z pozostałymi elementami strony, gdzie jego wersja pasuje teraz do wszystkich innych artefaktów Paging. Zmiany wprowadzone od wersji 3.1.0 obejmują:
- Obsługa wyświetlania podglądu listy fałszywych danych przez utworzenie
PagingData.from(fakeData)
i zapakowanie tej wartości w elemenciePagingData
w elemencieMutableStateFlow
(np.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Przekaż ten proces do elementu kompozycyjnego@Preview
jako odbiornik, aby wyświetlić jego podgląd w domeniecollectAsLazyPagingItems()
. - Obsługa wszystkich leniwch układów, takich jak
LazyVerticalGrid
iHorizontalPager
, oraz niestandardowych leniwch komponentów z bibliotek Wear i TV. Udało się to osiągnąć za pomocą nowych metod rozszerzeniaLazyPagingItems
niższego poziomuitemKey
iitemContentType
, które pomagają wdrożyć parametrykey
icontentType
w standardowych interfejsach APIitems
, które już istnieją w interfejsachLazyColumn
iLazyVerticalGrid
, a także ich odpowiednikach w interfejsach API takich jakHorizontalPager
. - Reguły
items(lazyPagingItems)
iitemsIndexed(lazyPagingItems)
, które obsługują tylkoLazyListScope
, zostały wycofane.
- Obsługa wyświetlania podglądu listy fałszywych danych przez utworzenie
- Nowy artefakt
paging-testing
, który udostępnia interfejsy API zaprojektowane pod kątem testowania jednostkowego każdej warstwy aplikacji oraz integracji tej funkcji z stronami w odizolowaniu. Obejmuje na przykład:- Klasa
TestPager
, która umożliwia sprawdzanie działania własnej niestandardowej implementacjiPagingSource
niezależnie od Pager i rzeczywistego interfejsu. asPagingSourceFactory
Interfejsy API do przekształceniaFlow<List<Value>>
lub statycznego elementuList<Value>
w elementPagingSourceFactory
, który można przekazać do pagera w testachasSnapshot
Rozszerzenie Kotlin wFlow<PagingData<Value>>
, co przekłada sięFlow<PagingData<Value>>
na bezpośrednieList<Value>
.asSnapshot lambda
umożliwia naśladowanie interfejsu aplikacji za pomocą interfejsów API takich jakscrollTo
czyappendScrollWhile
, dzięki czemu możesz sprawdzić, czy podsumowanie danych jest poprawne w dowolnym momencie zbioru danych stronicowanych.
- Klasa
- Dodaliśmy logi domyślne, aby udostępnić informacje na potrzeby debugowania stron na 2 poziomach:
VERBOSE
iDEBUG
. Logi można włączyć za pomocą poleceniaadb shell setprop log.tag.Paging [DEBUG|VERBOSE]
. Dotyczy to zarówno strony w widoku stron, jak i z widokiem strony Kopia. - Dodano konstruktory dla elementów
PagingDataAdapter
iAsyncPagingDataDiffer
, które akceptują konstruktoryCoroutineContext
zamiastCoroutineDispatcher
. - Dodaliśmy nowy, funkcjonalny interfejs
PagingSourceFactory
, który daje wyraźniejszy dostęp do interfejsu API niż poprzednie lambda () ->PagingSource
. Ta fabryka może służyć do tworzenia instancji pagera.
Wersja 3.2.0-rc01
21 czerwca 2023 r.
Aplikacja androidx.paging:paging-*:3.2.0-rc01
została zwolniona. Wersja 3.2.0-rc01 zawiera te zatwierdzenia.
Wkład z zewnątrz
Wersja 3.2.0-beta01
7 czerwca 2023 r.
Aplikacja androidx.paging:paging-*:3.2.0-beta01
została zwolniona. Wersja 3.2.0-beta01 zawiera te zatwierdzenia.
Paging Compose
- Tworzenie stronicowania oficjalnie osiągnęło stabilność interfejsu API. W związku z tym wersja
1.0.0-alpha20
została zaktualizowana, aby była zgodna z wersją wszystkich innych artefaktów stronicowania.
Zmiany w interfejsie API
- Usunęliśmy wycofane interfejsy API
items(LazyPagingItems)
iitemsIndexed(LazyPagingItems)
z strony Paging Compose. Przykładowe zastępcze interfejsy API możesz znaleźć w informacjach o wersji1.0.0-alpha20
tworzenia strony na potrzeby Paging Compose. (I9626e)
Wersja 3.2.0-alfa06
24 maja 2023 r.
Aplikacja androidx.paging:paging-*:3.2.0-alpha06
została zwolniona. Wersja 3.2.0-alpha06 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaliśmy nowy, funkcjonalny interfejs
PagingSourceFactory
, który zapewnia bardziej jawną powierzchnię interfejsu API niż dotychczasowe lambda typu() -> PagingSource
. Ta fabryka może służyć do utworzenia instancjiPager
. (I33165, b/280655188) - Dodano nowy interfejs API
paging-testing
o wartościList<Value>.asPagingSourceFactory()
, aby uzyskać interfejsPagingSourceFactory
, który wczytuje się tylko ze stałej listy danych. Dotychczasowe rozszerzenie w domenieFlow<List<Value>>
powinno nadal być używane do testowania z wieloma generacjami danych statycznych. (Id34d1, b/280655188)
Zmiany w interfejsie API
- Wszystkie publiczne interfejsy API w testowaniu stronicowania są teraz oznaczane adnotacjami
@VisibleForTesting
, aby zapewnić, że będą one używane tylko w testach. (I7db6e) - Interfejs API
asSnapshot
nie wymaga już przekazywaniaCoroutineScope
. Obecnie domyślnie używany jest kontekst odziedziczony z zakresu nadrzędnego. (Id0a78, b/282240990) - Zmieniono kolejność parametrów konstruktora
TestPager
tak, aby intuicyjnie odpowiadała kolejności rzeczywistych parametrów konstruktoraPager
(I6185a). - Użycie funkcji lambda typu
() -> PagingSource<Key, Value>
w testach stronicowania zostało przeniesione do typuPagingSourceFactory<Key, Value>
. (I4a950, b/280655188)
Zmiany w działaniu
- Główny dyspozytor nie musi już uruchamiać testów stronicowania
asSnapshot
. Ustawienie go nie powoduje już żadnych zmian w działaniu testowym. (Ie56ea)
Wersja 3.2.0-alfa05
3 maja 2023 r.
Aplikacja androidx.paging:paging-*:3.2.0-alpha05
została zwolniona. Wersja 3.2.0-alpha05 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Interfejs API Paging Testing dla interfejsu
asSnapshot
przyjmuje teraz domyślnie wartość lambda jako pustą wartość parametruloadOperations
. Umożliwia to wywoływanie funkcjiasSnapshot
bez przekazywania żadnych operacji wczytywania w celu pobrania danych z wstępnego wczytywania odświeżania. (Ied354, b/277233770)
Ulepszenia dokumentacji
- Zaktualizowaliśmy dokumentację dotyczącą
asPagingSourceFactory()
, aby wyjaśnić, że jest to metoda rozszerzeniaFlow
, która zwraca fabrykę wielokrotnego użytku do generowania instancjiPagingSource
. (I5ff4f, I705b5) - Zaktualizowaliśmy dokumentację konstruktora
LoadResult.Page
, aby wyjaśnić, że należy zastępować elementyitemsBefore
iitemsAfter
w celu obsługi skakania. (Ied354)
Treści opublikowane przez użytkowników z zewnątrz
- Dziękujemy Veyndan za wkład w odejście od specyfiki Androida/JVM. (#525, #523, #520, #519, #507, #506, #505, #499, #497, #4, #4
Wersja 3.2.0-alfa04
8 lutego 2023 r.
Aplikacja androidx.paging:paging-*:3.2.0-alpha04
została zwolniona. Wersja 3.2.0-alpha04 zawiera te zatwierdzenia.
Testowanie stronicowania
- Artefakt
paging-testing
zawiera teraz metodęasPagingSourceFactory
do tworzenia obiektupagingSourceFactory
z obiektuFlow<List<Value>>
, który ma zostać dostarczony do pagera. Każdy parametrList<Value>>
generowany przez przepływ reprezentuje generowanie danych z podziałem na strony. Ułatwia to testowanie stronicowania np. przekształceńPagingData
przez udawanie źródła danych, z którego pager może pobierać dane. (I6f230, b/235528239) Artefakt
paging-testing
został rozszerzony o nowe interfejsy API, które umożliwiają sprawdzanie, czy dane zawarte w zasadzieFlow<PagingData<T>>
są prawidłowe. Dzięki temu można na przykład potwierdzić dane wyjściowe funkcjiFlow<PagingData<T>>
z warstwy ViewModel.Użyjesz w tym celu rozszerzenia
asSnapshot
Kotlin wFlow<PagingData<Value>>
, które przekłada sięFlow<PagingData<Value>>
na bezpośrednieList<Value>
. Funkcja lambdaasSnapshot
umożliwia naśladowanie interfejsu aplikacji za pomocą interfejsów API takich jakscrollTo
czyappendScrollWhile
w powtarzalny i spójny sposób. Dzięki temu możesz sprawdzić, czy zrzut danych jest prawidłowy w dowolnym momencie zbioru danych stronowanych.// Create your ViewModel instance val viewModel = … // Get the Flow of PagingData from the ViewModel val data< Flow<PagingData<String>> = viewModel.data val snapshot: List<String> = data.asSnapshot { // Each operation inside the lambda waits for the data to settle before continuing scrollTo(index = 50) // While you can’t view the items within the asSnapshot call, // you can continuously scroll in a direction while some condition is true // i.e., in this case until you hit a placeholder item appendScrollWhile { item: String -> item != “Header 1” } } // With the asSnapshot complete, you can now verify that the snapshot // has the expected values
asSnapshot
to metodasuspend
, która powinna zostać uruchomiona w ciągurunTest
. Więcej informacji znajdziesz w artykule Testowanie kohort Kotlin na Androidzie. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic59,8/8}
Zmiany w interfejsie API
- Wywołania interfejsu
getItem
ipeek
wAsyncPagingDataDiffer
iPagingDataAdapter
są teraz prawidłowo oznaczane jako możliwe do wywołania tylko w wątku głównym. (I699b6) - Usunęliśmy symbole wieloznaczne z typów ogólnych używanych przez
TestPager
, co ułatwi korzystanie z wyników tych metod w kodzie napisanym w języku programowania Java. (I56c42)
Wersja 3.2.0-alfa03
24 października 2022 r.
Aplikacja androidx.paging:paging-*:3.2.0-alpha03
została zwolniona. Wersja 3.2.0-alpha03 zawiera te zatwierdzenia.
Testowanie stronicowania
Ta wersja zawiera nowy artefakt: paging-testing
. Ten artefakt udostępnia interfejsy API zaprojektowane z myślą o testowaniu jednostkowym każdej warstwy aplikacji oraz o jej integracji z otwieraniem stron.
Na przykład ta pierwsza wersja zawiera klasę TestPager
, która umożliwia sprawdzanie działania własnej niestandardowej implementacji PagingSource
niezależnie od Pager
i rzeczywistego interfejsu użytkownika, który normalnie jest potrzebny do symulowania kompleksowej integracji stron.
Element TestPager
powinien być uważany za fałszywy – podwójny wynik testowy, który odzwierciedla prawdziwą implementację obiektu Pager
, a jednocześnie zapewnia uproszczoną powierzchnię interfejsu API do testowania PagingSource
. Te interfejsy API są interfejsami API suspend
i powinny być uruchamiane w runTest
zgodnie z opisem w przewodniku testowania kotlin na Androidzie.
Przykłady użycia tych interfejsów API można znaleźć w testach room-paging
, których refaktoryzację przetworzono na TestPager
.
Zmiany w interfejsie API
- Umożliwia wygodne wykonywanie iteracji w trybie
LoadResult.Page.data
doLoadResult.Page.iterator()
. Pośrednio to zezwala na użycie metodyflatten
biblioteki standardowej Kotlin, gdy podano właściwośćList<LoadResult.Page>
, np. z właściwościpages
PagingState
przekazaną do metodyPagingSource.getRefreshKey
. (Ie0718)
Wersja 3.2.0-alfa02
10 sierpnia 2022 r.
Aplikacja androidx.paging:paging-*:3.2.0-alpha02
została zwolniona. Wersja 3.2.0-alpha02 zawiera te zatwierdzenia.
Nowe funkcje
- Strona strony udostępnia teraz logi za pomocą klas
AsyncPagingDataDiffer
lubPagingDataAdapter
, które udostępniają informacje debugowania zebrane zPagingData
. - Logi można włączyć za pomocą polecenia
adb shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE].
(b/235527159)
Poprawki błędów
- Usunięto brakujący błąd konstruktora
PagingDataDiffer
występujący w przypadku korzystania z zasadypaging-common:3.2.0-alpha01
w środowisku wykonawczympaging-runtime:3.1.1
lub starszym.(b/235256201)
Wersja 3.2.0-alfa01
1 czerwca 2022 r.
Aplikacja androidx.paging:paging-*:3.2.0-alpha01
została zwolniona. Wersja 3.2.0-alpha01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano konstruktory dla elementów
PagingDataAdapter
iAsyncPagingDataDiffer
, które akceptują konstruktoryCoroutineContext
zamiastCoroutineDispatcher
. (IDc878). - Domyślnie uprawnienia
PagingData.from()
iPagingData.empty()
nie będą już miały wpływu naCombinedLoadStates
po stronie prowadzącego. Dodaliśmy nowe przeciążenie, które umożliwia przekazywanie instrukcjisourceLoadStates
iremoteLoadStates
do tych konstruktorów, aby zachować dotychczasowe działanie ustawieniaLoadStates
, aby było w pełni końcowe (np.NotLoading(endOfPaginationReached = false)
) z możliwością dodania w razie potrzeby stanów zdalnych. Jeśli poleLoadStates
nie zostanie przekazane, poprzednia wartośćCombinedLoadStates
zostanie zachowana po stronie prowadzącego po otrzymaniu statycznego parametruPagingData
. (Ic3ce5, b/205344028)
Poprawki błędów
- Wynik funkcji
PagingSource.getRefreshKey()
ma teraz prawidłowy priorytet względem parametruinitialKey
w przypadkach, gdy zwróci wartość null, ale ustawiono niepustą wartośćinitialKey
. (Ic9542, b/230391606)
Wkład z zewnątrz
- Zaktualizowano :compose:ui:ui-test api (updateApi) w związku z migracją test-coroutines-lib (I3366d)
Wersja 3.1
Wersja 3.1.1
9 marca 2022 r.
Aplikacja androidx.paging:paging-*:3.1.1
została zwolniona. Wersja 3.1.1 zawiera te zatwierdzenia.
Poprawki błędów
- Usunięto pośrednie zdarzenia
LoadState.NotLoading
między generacjami, które zostały nieprawidłowo wstawione przez plik.cachedIn()
. Ta zmiana znacznie ułatwia reagowanie na zmiany w elemencieLoadState
przez usunięcie zbędnych zdarzeńLoadState.NotLoading
, które powstały między kolejnymi próbami nieudanego wczytania, podczas odświeżania lub unieważniania.
Wersja 3.1.0
17 listopada 2021 r.
Aplikacja androidx.paging:paging-*:3.1.0
została zwolniona. Wersja 3.1.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 3.0.0
- Interfejsy API
Flow<PagingData>.observable
iFlow<PagingData>.flowable
nie są już eksperymentalne - Zmiany w działaniu
LoadState
:endOfPaginationReached
to teraz zawszefalse
w przypadkuLoadType.REFRESH
zarówno w przypadkuPagingSource
, jak iRemoteMediator
- Ze strony
LoadStates
ze strony czekają teraz prawidłowe wartości ze źródełPagingSource
iRemoteMediator
, zanim będą przesyłane w dół. Nowe generacje funkcjiPagingData
będą teraz zawsze prawidłowo zaczynać odLoading
w stanie odświeżania, a w niektórych przypadkach nie będą resetowane do wartościNotLoading
. - Metody
.loadStateFlow
i.addLoadStateListener
w interfejsach API prowadzącego nie wysyłają już nadmiarowo początkowego parametruCombinedLoadStates
, który zawsze ma stan mediatora ustawiony nanull
- Anulowanie w poprzednich pokoleniach często ma miejsce w przypadku unieważnienia lub nowych pokoleń. Nie powinno już być wymagane używanie
.collectLatest
w systemieFlow<PagingData>
, ale nadal jest to zalecane. - Zapytanie
PagingSource.LoadResult.Invalid
zostało dodane jako nowy typ zwrotu zPagingSource.load
, co powoduje, że strona Paging odrzuca wszelkie oczekujące i przyszłe żądania wczytania do tego elementuPagingSource
i unieważnia go. Ten zwracany typ służy do obsługi potencjalnie nieprawidłowych lub nieaktualnych danych, które mogą zostać zwrócone z bazy danych lub sieci. - Dodano interfejsy API prezentacji
.onPagesPresented
i.addOnPagesUpdatedListener
, które uruchamiały się synchronicznie w miarę wyświetlania stron w interfejsie. Aktualizacje stron mogą odbywać się w tych sytuacjach:- Początkowe wczytywanie nowej generacji PagingData kończy się niezależnie od tego, czy nowa generacja zawiera jakiekolwiek zmiany w prezentowanych elementach, np. Nowa generacja, która ukończy wstępne wczytywanie bez aktualizacji, nadal będzie aktywować wywołanie zwrotne, ponieważ lista jest dokładnie taka sama.
- Strona zostanie wstawiona, nawet jeśli nie zawiera żadnych nowych elementów.
- Strona zostaje usunięta, nawet jeśli była pusta.
Wersja 3.1.0-rc01
3 listopada 2021 r.
Aplikacja androidx.paging:paging-*:3.1.0-rc01
została zwolniona. Wersja 3.1.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono warunek wyścigu + wyciek pamięci w funkcji .cachedIn() w przypadkach, gdy podczas strony w dół nie było kilku zdarzeń wczytywania, gdy nie było żadnych obserwacji lub między obserwatorem przełączania się na nowe dane PagingData. (Ib682e)
Wersja 3.1.0-beta01
13 października 2021 r.
Aplikacja androidx.paging:paging-*:3.1.0-beta01
została zwolniona. Wersja 3.1.0-beta01 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono problem, który powodował, że wiele szybkiego dostępu do elementów powodowało ich porzucanie na potrzeby wstępnego pobierania z wyprzedzeniem, co powodowało zatrzymanie wczytywania strony. Problem ten występuje szczególnie wtedy, gdy wiele elementów jest układanych jednocześnie w kolejności, w której wczytywanie odbywa się zgodnie z kierunkiem przewijania. Dostęp do tych elementów jest teraz buforowany i synchronicznie dzielony pod względem priorytetu, aby zapobiec ich utracie. (Aosp/1833273)
Wersja 3.1.0-alfa04
29 września 2021 r.
Aplikacja androidx.paging:paging-*:3.1.0-alpha04
została zwolniona. Wersja 3.1.0-alpha04 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Interfejsy API
Flow<PagingData>.observable
iFlow<PagingData>.flowable
nie są już eksperymentalne. (Ie0bdd)
Poprawki błędów
- W przypadku LoadStates
endOfPaginationReached
ma teraz zawsze wartośćfalse
dlaLoadType.REFRESH
. Wcześniej w przypadku elementu RemoteMediatorREFRESH
wartość endOfPaginationReached mogła wynosićtrue
, ale nie elementu PagingSource. To zachowanie jest teraz skonsolidowane i zawsze zwracafalse
, ponieważ nigdy nie ma sensu, aby polecenie REFRESH było terminalem. Jest to teraz udokumentowane w ramach umowy dotyczącej interfejsu API w LoadStates. Decydując o zakończeniu podziału na strony, pamiętaj, by zawsze to zrobić zgodnie z instrukcjami APPEND lub PREPEND. (I047b6) Obiekty LoadState z strony Paging oczekują teraz na prawidłowe wartości z obu metod, zanim zostaną przesłane między generacjami. Dzięki temu nowe generacje PagingData nie będą wysyłać wartości NotLoading in CommitedLoadStates.source.refresh, jeśli już to nastąpiło. Nowe generacje PagingData będą teraz zawsze prawidłowo rozpoczynały się od wczytywania w stanie odświeżania, a nie w niektórych przypadkach po raz pierwszy do nieprawidłowego stanu wczytywania.
Anulowanie w poprzednich pokoleniach często ma miejsce w przypadku unieważnienia lub nowych pokoleń. Nie powinno się już używać .collectLast on
Flow<PagingData>
, ale nadal jest to zdecydowanie zalecane (I0b2b5, b/177351336, b/195028524).Metody
.loadStateFlow
i.addLoadStateListener
w interfejsach API prowadzącego nie wysyłają już nadmiarowo początkowego parametruCombinedLoadStates
, który zawsze ma stan mediatora ustawiony nanull
, a stany źródła naNotLoading(endOfPaginationReached = false)
. Oznacza to, że:- jeśli używasz elementu RemoteMediator, stany mediatora będą zawsze wypełniane.
- Zarejestrowanie w
.loadStateFlow
nowego detektora loadState lub nowego kolektoru nie będzie już emitować bieżącej wartości, jeśli nie otrzyma prawdziwego parametruCombinedLoadStates
odPagingData
. Może się tak zdarzyć, jeśli kolektor lub detektor uruchomi się przed przesłaniem elementuPagingData
. (I1a748)
Wersja 3.1.0-alfa03
21 lipca 2021 r.
Aplikacja androidx.paging:paging-*:3.1.0-alpha03
została zwolniona. Wersja 3.1.0-alpha03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
Do parametru PagingSource dodano trzeci typ zwracany LoadResult.Invalid. Gdy parametr PagingSource.load zwraca wartość LoadResult.Invalid, stronicowanie spowoduje odrzucenie wczytanych danych i unieważnienie elementu PagingSource. Ten zwracany typ ma na celu obsługę potencjalnie nieprawidłowych lub nieaktualnych danych, które mogą zostać zwrócone z bazy danych lub sieci.
Jeśli na przykład baza danych jest zapisywana w bazie danych, ale źródło danych PagingSource nie unieważnia się na czas, może zwracać niespójne wyniki, gdy jej implementacja zależy od niezmienności zbioru danych, z którego wczytuje się baza danych (np. LIMIT OFFSET – implementacje bazy danych w stylu OFFSET). W takiej sytuacji zalecamy sprawdzenie po wczytaniu danych pod kątem unieważnienia i zwrócenie zdarzenia LoadResult.Invalid, co powoduje, że strona Paging odrzuca wszelkie oczekujące i przyszłe żądania obciążenia wysyłane do tego PagingSource i je unieważnia.
Ten zwracany typ jest również obsługiwany przez interfejs Paging2 API, który korzysta z LivePagedList lub RxPagedList. Gdy używasz elementu PagingSource z interfejsami API PagedList platformy Paging2, element PagedList zostaje natychmiast odłączony, co zatrzymuje dalsze próby wczytania danych na tej liście i wywołuje unieważnienie na stronie PagingSource.
LoadResult to zapieczętowana klasa, co oznacza, że jest to zmiana niekompatybilna ze źródłem, dlatego przypadki użycia bezpośrednio korzystające z wyników PagingSource.load będą obsługiwać LoadResult.Invalid podczas kompilacji. Na przykład użytkownicy Kotlin korzystający z informacji o tym, kiedy należy sprawdzić typ zwrotu, będą musieli dodać kontrolę pod kątem nieprawidłowego typu. (Id6bd3, b/191806126, b/192013267)
Poprawki błędów
- Wywołania zwrotne unieważniające dodane za pomocą PagingSource.enrollInvalidatedCallback lub DataSource.addInvalidatedCallback są teraz uruchamiane automatycznie, jeśli zostały zarejestrowane w źródle danych PagingSource lub DataSource, które były już nieprawidłowe. Rozwiązuje to warunek wyścigu, który powodował, że strony otrzymywały sygnały o nieprawidłowości i utknęły, gdy podane źródło było już nieprawidłowe podczas początkowego wczytywania. Dodatkowo unieważnione wywołania zwrotne są teraz prawidłowo usuwane po aktywowaniu, ponieważ są gwarantowane co najwyżej raz. (I27e69)
- Przesyłanie zmiennej początkowej wartości początkowej (InitialPagedList) z nowo utworzonego strumienia PagedList, np. LivePagedListBuilder lub RxPagedListBuilder nie będą już usuwać wczytanych wcześniej danych.
Wersja 3.1.0-alfa02
1 lipca 2021 r.
Aplikacja androidx.paging:paging-*:3.1.0-alpha02
została zwolniona. Wersja 3.1.0-alpha02 zawiera te zatwierdzenia.
Nowe funkcje
Dodano interfejsy API nasłuchiwania onPagesPresented i prezentacji przepływów, które uruchamiają się natychmiast po zaktualizowaniu prezentowanych stron w interfejsie.
Te aktualizacje są synchroniczne z interfejsem użytkownika, dlatego możesz wywoływać metody adaptera takie jak .snapshot czy .getItemCount, aby sprawdzić stan po zastosowaniu aktualizacji. Działanie funkcji .snapshot() zostało pominięte, ponieważ wykonanie jej przy każdej aktualizacji może być kosztowne.
Aktualizacje stron mogą odbywać się w tych sytuacjach:
- Wstępne wczytywanie nowej generacji PagingData zakończy się niezależnie od tego, czy nowa generacja zawiera jakiekolwiek zmiany w prezentowanych elementach. Nowa generacja, która ukończy wstępne wczytywanie bez aktualizacji, ponieważ lista będzie dokładnie taka sama, nadal będzie aktywować to wywołanie zwrotne.
- Strona jest wstawiona, nawet jeśli nie zawiera ona nowych elementów.
- Strona zostaje usunięta nawet wtedy, gdy była pusta (I272c9, b/189999634)
Poprawki błędów
- Uzyskanie dostępu do PagedList.dataSource z wartości początkowej wygenerowanej przez LivePagedList lub RxPagedList nie będzie już powodować niepoprawnego zgłaszania wyjątku IllegalStateException (I96707)
Wersja 3.1.0-alfa01
2 czerwca 2021 r.
Aplikacja androidx.paging:paging-*:3.1.0-alpha01
została zwolniona. Wersja 3.1.0-alpha01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Zajęcia udostępnione przez
paging-rxjava3
są teraz dostępne w pakiecieandroidx.paging.rxjava3
, więc nie kolidują one z klasąpaging-rxjava2
(Ifa7f6)
Poprawki błędów
- Naprawiono błąd polegający na tym, że strony czasami wysyłały do obiektu RecyclerView zdarzenia braku operacji, co mogło powodować wcześniejsze aktywowanie przez detektory. (Ic507f, b/182510751)
Wkład z zewnątrz
- Do artefaktu rxjava3 dodano wycofane interfejsy API PagedList compat (Id1ce2, b/182497591).
Paging Compose w wersji 1.0.0
Wersja 1.0.0-alfa20
24 maja 2023 r.
Aplikacja androidx.paging:paging-compose:1.0.0-alpha20
została zwolniona. Wersja 1.0.0-alpha20 zawiera te zatwierdzenia.
Nowe funkcje
- Strona tworzenia strony obsługuje teraz podgląd listy fałszywych danych przez utworzenie elementu
PagingData.from(fakeData)
i zapakowanie goPagingData
w elementMutableStateFlow
(np.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Wykorzystując te dane jako dane wejściowe do:@Preview
, wywołaniacollectAsLazyPagingItems()
udostępnią podglądLazyPagingItems
. (I8a78d, b/194544557)
Poprawki błędów
- Dane w pamięci podręcznej z
pager.flow.cachedIn
, które zostały zebrane wLazyPagingItems
, będą teraz dostępne natychmiast po przywróceniu stanu bez konieczności asynchronicznego zbierania danych. Oznacza to, że dane z pamięci podręcznej będą gotowe do prezentacji od razu po przywróceniu stanu początkowego. (I97a60, b/177245496)
Wersja 1.0.0-alfa19
3 maja 2023 r.
Aplikacja androidx.paging:paging-compose:1.0.0-alpha19
została zwolniona. Wersja 1.0.0-alfa19 zawiera te zatwierdzenia.
Obsługa wszystkich leniwych układów
Wcześniej funkcja stronicowania umożliwiała korzystanie z niestandardowych rozszerzeń items
i itemsIndexed
w LazyListScope
, co oznaczało, że nie można było używać tej funkcji z innymi leniwymi układami, takimi jak LazyVerticalGrid
, HorizontalPager
, ani innymi niestandardowymi leniwymi komponentami dostępnymi w bibliotekach Wear i TV. Ta nieelastyczność jest główną aktualizacją tej wersji.
Aby obsługiwać więcej leniwych układów, musieliśmy utworzyć interfejsy API w innej warstwie. Zamiast udostępniać niestandardowy interfejs API items
dla każdego leniwego układu, funkcja Paging Compose udostępnia teraz nieco niższe metody rozszerzenia w interfejsach LazyPagingItems
w itemKey
i itemContentType
. Te interfejsy API mają pomagać we wdrażaniu parametrów key
i contentType
w standardowych interfejsach API items
, które już istnieją w interfejsach LazyColumn
, LazyVerticalGrid
, a także o ich odpowiednikach w interfejsach API takich jak HorizontalPager
. (Ifa13b, Ib04f0, b/259385813)
Oznacza to, że obsługa elementu LazyVerticalGrid
wyglądałaby tak:
// This part is unchanged
val lazyPagingItems = pager.collectAsLazyPagingItems()
LazyVerticalGrid(columns = GridCells.Fixed(2)) {
// Here we use the standard items API
items(
count = lazyPagingItems.itemCount,
// Here we use the new itemKey extension on LazyPagingItems to
// handle placeholders automatically, ensuring you only need to provide
// keys for real items
key = lazyPagingItems.itemKey { it.uniqueId },
// Similarly, itemContentType lets you set a custom content type for each item
contentType = lazyPagingItems.itemContentType { "contentType" }
) { index ->
// As the standard items call provides only the index, we get the item
// directly from our lazyPagingItems
val item = lazyPagingItems[index]
PagingItem(item = item)
}
}
Więcej przykładów użycia tych nowych interfejsów API znajdziesz w naszych przykładach.
Po wprowadzeniu tych zmian przykłady LazyColumn
i LazyRow
wydłużą się o kilka wierszy, ale uznaliśmy, że spójność wszystkich leniwych układów będzie istotnym czynnikiem wpływającym na korzystanie z strony Stron Compose. Z tego powodu istniejące rozszerzenia LazyListScope
zostały wycofane. (I0c459, I92c8f, b/276989796)
Zmiany w interfejsie API
- Aby ułatwić migrację do nowych interfejsów API, funkcje rozszerzenia
items
iitemsIndexed
wLazyListScope
obsługują teraz parametrcontentType
, powielając obsługę nowych interfejsów API. (Ib1918, b/255283378)
Aktualizacje zależności
- Zależność strony tworzenia wiadomości z wersji 1.0.5 do tworzenia w wersji 1.2.1 została zaktualizowana. (Ib1918, b/255283378)
Wersja 1.0.0-alfa18
8 lutego 2023 r.
Aplikacja androidx.paging:paging-compose:1.0.0-alpha18
została wydana bez zmian. Wersja 1.0.0-alfa18 zawiera te zatwierdzenia.
Wersja 1.0.0-alfa17
24 października 2022 r.
Aplikacja androidx.paging:paging-compose:1.0.0-alpha17
została zwolniona. Wersja 1.0.0-alfa17 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaj obsługę niestandardowego elementu
CoroutineContext
podczas wywoływania funkcjicollectLazyPagingItems
. (I7a574, b/243182795, b/233783862)
Wersja 1.0.0-alfa16
10 sierpnia 2022 r.
Aplikacja androidx.paging:paging-compose:1.0.0-alpha16
została zwolniona. Wersja 1.0.0-alfa16 zawiera te zatwierdzenia.
Nowe funkcje
- Strona PagingData udostępnia teraz logi za pomocą klasy
LazyPagingItems
, aby udostępnić informacje debugowania zebrane z PagingData. - Logi można włączyć za pomocą polecenia
adb shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE]
. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
Poprawki błędów
- Naprawiono brakujący błąd konstruktora
PagingDataDiffer
podczas korzystania zpaging-compose:1.0.0-alpha15
zpaging-common:3.1.1
lub starszym.(b/235256201,b/239868768)
Wersja 1.0.0-alfa15
1 czerwca 2022 r.
Aplikacja androidx.paging:paging-compose:1.0.0-alpha15
została zwolniona. Wersja 1.0.0-alpha15 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano konstruktory dla elementów
PagingDataAdapter
iAsyncPagingDataDiffer
, które akceptują konstruktoryCoroutineContext
zamiastCoroutineDispatcher
. (IDc878).
Poprawki błędów
LazyPagingItems
ustawia teraz odświeżenieLoadState.Loading
w początkowej wartościloadState
. (I55043, b/224855902)
Wersja 1.0.0-alfa14
13 października 2021 r.
Aplikacja androidx.paging:paging-compose:1.0.0-alpha14
została zwolniona. Wersja 1.0.0-alfa14 zawiera te zatwierdzenia.
Wersja 1.0.0-alfa13
29 września 2021 r.
Aplikacja androidx.paging:paging-compose:1.0.0-alpha13
została zwolniona. Wersja 1.0.0-alfa13 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Funkcja
LazyPagingItems.snapshot()
została zastąpiona właściwościąLazyPagingItems.itemSnapshotList
(Ie2da8) - Wycofana zasada
LazyPagingItems.getAsState()
została usunięta (Ie65e4)
Wersja 1.0.0-alfa12
21 lipca 2021 r.
Aplikacja androidx.paging:paging-compose:1.0.0-alpha12
została zwolniona. Wersja 1.0.0-alpha12 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Parametry
items(lazyPagingItems)
iitemsIndexed(lazyPagingItems)
używane do łączenia strony z interfejsemLazyColumn/Row
akceptują teraz parametr klucza opcji, który pozwala określić stabilny klucz reprezentujący element. Więcej informacji o kluczach znajdziesz tutaj. (I7986d) - Funkcja
lazyPagingItems.getAsState(index)
została wycofana. Użyj w zamian zasadylazyPagingItems[index]
. (I086cb, b/187339372)
Wersja 1.0.0-alfa11
30 czerwca 2021 r.
Aplikacja androidx.paging:paging-compose:1.0.0-alpha11
została zwolniona. Wersja 1.0.0-alpha11 zawiera te zatwierdzenia.
Wersja 1.0.0-alfa10
2 czerwca 2021 r.
Aplikacja androidx.paging:paging-compose:1.0.0-alpha10
została zwolniona. Wersja 1.0.0-alpha10 zawiera te zatwierdzenia.
Wersja 1.0.0-alfa09
18 maja 2021 r.
Aplikacja androidx.paging:paging-compose:1.0.0-alpha09
została zwolniona. Wersja 1.0.0-alpha09 zawiera te zatwierdzenia.
Poprawki błędów
- Dostępna jest teraz obserwacja funkcji itemCount i metody pobierającej elementy LazyPagingItems, co pozwala jej też używać z LazyVerticalGrid (Ie2446, b/171872064, b/168285687).
Zgodność z wiadomością
- Funkcja
androidx.paging:paging-compose:1.0.0-alpha09
jest zgodna tylko z funkcją Utwórz w wersji1.0.0-beta07
i nowszych.
Wersja 1.0.0-alfa08
24 lutego 2021 r.
Aplikacja androidx.paging:paging-compose:1.0.0-alpha08
została zwolniona. Wersja 1.0.0-alpha08 zawiera te zatwierdzenia.
Zaktualizowano w celu integracji z funkcją Utwórz w wersji 1.0.0-beta01.
Wersja 1.0.0-alfa07
10 lutego 2021 r.
Aplikacja androidx.paging:paging-compose:1.0.0-alpha07
została zwolniona. Wersja 1.0.0-alpha07 zawiera te zatwierdzenia.
Zaktualizowano w celu integracji z funkcją Utwórz w wersji alfa12.
Wersja 1.0.0-alfa06
28 stycznia 2021 roku
Aplikacja androidx.paging:paging-compose:1.0.0-alpha06
została zwolniona. Wersja 1.0.0-alpha06 zawiera te zatwierdzenia.
Poprawki błędów
Zaktualizowano pod kątem tworzenia wiadomości w wersji 1.0.0-alfa11.
Wersja 1.0.0-alfa05
13 stycznia 2021 r.
Aplikacja androidx.paging:paging-compose:1.0.0-alpha05
została zwolniona. Wersja 1.0.0-alpha05 zawiera te zatwierdzenia.
Zaktualizowano pod kątem tworzenia wiadomości w wersji 1.0.0-alfa10.
Wersja 1.0.0-alfa04
16 grudnia 2020 roku
Aplikacja androidx.paging:paging-compose:1.0.0-alpha04
została zwolniona. Wersja 1.0.0-alpha04 zawiera te zatwierdzenia.
Poprawki błędów
- Zaktualizowaliśmy właściwości udogodnień
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
iCombinedLoadStates.append
, tak aby zmieniły się tylko zLoading
naNotLoading
, gdy stan mediatora i źródła wczytywania toNotLoading
. Ma to na celu zapewnienie, że zdalna aktualizacja została zastosowana. (I65619)
Wersja 1.0.0-alfa03
Grudzień 2, 2020
Aplikacja androidx.paging:paging-compose:1.0.0-alpha03
została zwolniona. Wersja 1.0.0-alpha03 zawiera te zatwierdzenia.
- Zaktualizowano w celu dopasowania do tworzenia 1.0.0-alfa08.
Wersja 1.0.0-alfa02
11 listopada 2020 roku
Aplikacja androidx.paging:paging-compose:1.0.0-alpha02
została zwolniona. Wersja 1.0.0-alpha02 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Do systemów
LazyPagingItem
dodaliśmy metody.peek()
,.snapshot()
,.retry()
i.refresh()
, które udostępniają te same funkcje co wAsyncPagingDataDiffer
/PagingDataAdapter
(Iddfe8, b/172041660)
Wersja 1.0.0-alfa01
28 października 2020 r.
Aplikacja androidx.paging:paging-compose:1.0.0-alpha01
została zwolniona. Wersja 1.0.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
Artefakt paging-compose
zapewnia integrację między biblioteką stronicowania a usługą Jetpack Compose. Prosty przykład użycia:
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
Wersja 3.0.1
Wersja 3.0.1
21 lipca 2021 r.
Aplikacja androidx.paging:paging-*:3.0.1
została zwolniona. Wersja 3.0.1 zawiera te zatwierdzenia.
Poprawki błędów
- Uzyskanie dostępu do
PagedList.dataSource
z poziomu początkowej wartości wygenerowanej przezLivePagedList
lubRxPagedList
nie będzie już powodować niepoprawnego zgłaszania wyjątku IllegalStateException (I96707)
Wersja 3.0.0
Wersja 3.0.0
5 maja 2021 roku
Aplikacja androidx.paging:paging-*:3.0.0
została zwolniona. Wersja 3.0.0 zawiera te zatwierdzenia.
Główne funkcje wersji 3.0.0
Większość istniejących interfejsów API w wersji 2.x.x została wycofana i zastąpiona nowymi interfejsami API Paging 3. Dzięki temu wprowadzisz te ulepszenia:
- Pierwsza klasa wsparcia dla współprogramów Kotlin i Flow
- Pomoc dotycząca anulowania
- Wbudowane sygnały stanu obciążenia i błędów
- Funkcja ponawiania i odświeżania
- Wszystkie 3 podklasy DataSource zostały połączone w ujednoliconą klasę PagingSource.
- Niestandardowe przekształcenia strony, w tym wbudowana funkcja dodawania separatorów
- Wczytuję nagłówki i stopki stanu
Wersja 3.0.0-rc01
21 kwietnia 2021 r.
Aplikacja androidx.paging:paging-*:3.0.0-rc01
została zwolniona. Wersja 3.0.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono błąd polegający na tym, że strony czasami wysyłały do obiektu RecyclerView zdarzenia braku operacji, co mogło powodować wcześniejsze aktywowanie przez detektory. (Ic507f, b/182510751)
Wersja 3.0.0-beta03
24 marca 2021 r.
Aplikacja androidx.paging:paging-*:3.0.0-beta03
została zwolniona. Wersja 3.0.0-beta03 zawiera te zatwierdzenia.
Poprawki błędów
- Ulepszyliśmy obsługę obiektów zastępczych podczas ponownego wczytywania listy, aby zapobiec nieoczekiwanym skokom w widoku RecyclerView. Więcej informacji znajdziesz na stronie NullPaddedDiffing.md. (If1490, b/170027529, b/177338149)
- Różne kreatory PagedList (stara ścieżka zgodności) nie wywołują już nieprawidłowo synchronicznie w wątku głównym elementu
DataSource.Factory.create()
, gdy następuje wywołanie metody.build()
. (b/182798948)
Wersja 3.0.0-beta02
10 marca 2021 r.
Aplikacja androidx.paging:paging-*:3.0.0-beta02
została zwolniona. Wersja 3.0.0-beta02 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Rozszerzenia Rx3 są teraz prawidłowo rozpowszechniane.
@ExperimentalCoroutinesApi
Wymaganie dotyczące zgody na udział w ankiecie. Wcześniej były one oznaczone metodą@get
, która jest ignorowana przez narzędzie Kotlin Compiler ze względu na: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)
Poprawki błędów
- Egzekwuj ograniczenia dotyczące publicznego użytkowania eksperymentalnych interfejsów API (I6aa29, b/174531520)
- Naprawiono błąd, przez który
PagingState
zawsze miał wartośćnull
przy wywołaniu zdalnego odświeżania. - Naprawiono błąd, który powodował, że puste strony zwracane przez stronę PagingSource mogły uniemożliwiać ponowne pobieranie strony w celu wypełnienia funkcji
prefetchDistance
, co powodowało zatrzymanie strony.
Wersja 3.0.0-beta01
10 lutego 2021 r.
Aplikacja androidx.paging:paging-*:3.0.0-beta01
została zwolniona. Wersja 3.0.0-beta01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Otoki Rx2 i Rx3 udostępniają teraz eksperymentalną adnotację, od której zależy. Jeśli używasz opakowań compat Rx w metodzie paging-rxjava2 lub paging-rxjava3, musisz dodać do użycia adnotacje
@OptIn(ExperimentalCoroutinesApi::class)
(Ib1f9d).
Poprawki błędów
- Usunięto błąd
IndexOutOfBoundsException: Inconsistency detected
, który czasem był zgłaszany w przypadku korzystania z interfejsów APIDataSource
w wersji 2 za pomocą ścieżek zgodności - Wywołanie funkcji
isInvalid
podczas inicjowania obiektuDataSource
, które jest używane za pomocą ścieżek zgodności, jest teraz poprawnie uruchamiane w metodzie fetchDispatcher, a nie w wątku głównym. Poprawia to błądIllegalStateException
wynikający z dostępu do baz danych w wątku głównym podczas korzystania z implementacjiPagingSource
dla pokoju.
Wersja 3.0.0-alfa13
27 stycznia 2021 r.
Aplikacja androidx.paging:paging-*:3.0.0-alpha13
została zwolniona. Wersja 3.0.0-alfa13 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Implementacja
PagingSource.getRefreshKey
nie jest już opcjonalna. Jest teraz funkcją abstrakcyjną bez domyślnej implementacji. Migrowanie użytkowników może kontynuować zwracanie implementacji domyślnej, która zwraca po prostu wartośćnull
, ale funkcjagetRefreshKey()
powinna mieć faktyczną implementację zwracającą klucz na podstawie bieżącego położenia przewijania. Umożliwi to w miarę możliwości kontynuowanie wczytywania strony na środku widocznego obszaru za pomocą funkcjiPagingState.anchorPosition
. (I4339a) InvalidatingPagingSourceFactory
to teraz ostatnia klasa (Ia3b0a)- Zezwalaj na konfigurowanie działania separatora terminali (nagłówek / stopka) z dodatkowym opcjonalnym parametrem SeparatorType. Dostępne są 2 opcje:
FULLY_COMPLETE
– dotychczasowe działanie. Zanim dodasz separatory terminali, poczekaj, aż PagingSource i RemoteMediator oznaczą wartość endOfPaginationReached. Jeśli nie używasz RemoteMediator, funkcja Remote loadState zostanie zignorowana. Przydaje się to głównie wtedy, gdy separatory sekcji mają być wyświetlane tylko po pełnym wczytaniu sekcji, w tym podczas pobierania ze źródła zdalnego, np. z sieci.SOURCE_COMPLETE
– zaczekaj, aż PagingSource oznaczy wartość endOfPaginationReached (nawet jeśli używana jest funkcja RemoteMediator). Dzięki temu nagłówki i stopki będą wyświetlać się synchronicznie wraz z początkowym wczytywaniem, dzięki czemu użytkownicy nie będą musieli przewijać terminala, by zobaczyć separatory terminali. (Ibe993, b/174700218)
Poprawki błędów
- Naprawiliśmy rzadki wyciek pamięci, który dochodzi do unieważnienia parametru PagingSource, zanim moduł PageFetcher może rozpocząć ładowanie z niego ładowania. (I9606b, b/174625633)
Wersja 3.0.0-alfa12
13 stycznia 2021 r.
Aplikacja androidx.paging:paging-*:3.0.0-alpha12
została zwolniona. Wersja 3.0.0-alpha12 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Nieprawidłowa klasa {4/}PagingSourceFactory nie jest już klasą abstrakcyjną, ponieważ nie miała żadnych metod abstrakcyjnych. (I4a8c4)
- Dodaliśmy przeciążenie .cachedIn(), które akceptuje obiekt ViewModel zamiast Lifecycle lub CoroutineScope w przypadku użytkowników Javy. (I97d81, b/175332619)
- Zezwalaj obiektom wywołującym w Javie na używanie operacji przekształcania PagingData w sposób asynchroniczny przez zaakceptowanie argumentów wykonawcy jako argumentu operatora przekształcenia. W przypadku wszystkich operatorów przekształcenia -Sync sufiks -Sync jest teraz usunięty, a użytkownicy Kotlin Coroutine będą musieli to rozróżnić, wywołując funkcję rozszerzenia, która zamiast tego akceptuje blok zawieszający.
Wszystkie operatory przekształcania PagingData zostały przeniesione do rozszerzeń w klasie statycznej PagingDataTransforms. Użytkownicy Javy będą musieli wywoływać
się za pomocą statycznych elementów pomocniczych,
PagingDataTransforms.map(pagingData, transform)
W przypadku użytkowników Kotlin składnia jest taka sama, ale musisz zaimportować funkcję. (If6885, b/172895919)
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że funkcja
RemoteMediator.load()
nie była wywoływana w czasieadapter.refresh()
, jeśli został już osiągnięty koniec podziału na strony.
Wersja 3.0.0-alfa11
16 grudnia 2020 roku
Aplikacja androidx.paging:paging-*:3.0.0-alpha11
została zwolniona. Wersja 3.0.0-alpha11 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaliśmy obsługę zapisywania stanu w następujących podstawowych przypadkach użycia (pełna obsługa, zwłaszcza w przypadku warstwowego przypadku źródłowego, jest wciąż w przygotowaniu):
- przepływ jest zapisywany w pamięci podręcznej, a aplikacja nie zostaje przerwana (np. przepływ jest buforowany w modelu widoku, a aktywność jest odtwarzana w procesie)
- źródło stronicowania jest zliczane, obiekty zastępcze są włączone, a układ nie jest rozłożony.
Zmiany w interfejsie API
PagingSource.getRefreshKey()
to teraz stabilny interfejs API (I22f6f, b/173530980)- Funkcja
PagingSource.invalidate
nie jest już otwarta. Jeśli chcesz otrzymywać powiadomienia o unieważnieniu, zamiast zastępowania unieważnienia możesz wywołać metodę signInvalidatedCallback. (I628d9, b/173029013, b/137971356) - Pager ma teraz 1 eksperymentalny konstruktor obok zwykłych konstruktorów, zamiast wyciekać eksperymentalne interfejsy API do nieeksperymentalnych publicznych interfejsów API za pomocą adnotacji dotyczącej zgody. (I9dc61, b/174531520)
- Zaktualizowaliśmy właściwości udogodnień
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
iCombinedLoadStates.append
, tak aby zmieniły się tylko zLoading
naNotLoading
, gdy stan mediatora i źródła wczytywania toNotLoading
. Ma to na celu zapewnienie, że zdalna aktualizacja została zastosowana. (I65619) Parametr LoadParams.pageSize został usunięty (został już wycofany). Zalecamy użycie w źródle stron docelowych elementu
LoadParams.loadSize
.LoadParams.loadSize
ma zawsze wartość równąPagingConfig.pageSize
, z wyjątkiem początkowego wywołania wczytywania, w którym jest równaPagingConfig.initialLoadSize
.Jeśli testujesz źródło danych Paging2 bez użycia pagera ani PagedList, parametr
pageSize
może nie być zgodny z wartościąPagingConfig.pageSize
, jeśli ustawiasz teżinitialLoadSize
. Jeśli jest to ważne w testach, spróbuj użyć elementu Pager/PagedList, który będzie wewnętrznie ustawiać prawidłowy rozmiar PageSize dla metod wczytywania DataSource. (I98ac7, b/149157296)
Poprawki błędów
- Naprawiliśmy awarię wywoływaną przez wyjątek IllegalStateException przy korzystaniu z separatorów z ustawionym plikiem PagingConfig.maxSize. (I0ed33, b/174787528)
- Poprawiliśmy błąd, który powodował, że stan wczytywania funkcji PREPEND / APPEND nie aktualizował się do
NotLoading(endOfPaginationReached = true)
natychmiast po wstępnym wczytaniu, jeśli ustawiono narzędzie RemoteMediator (I8cf5a). - Naprawiono błąd, który powodował, że interfejsy API po stronie prowadzącego, takie jak .snapshot(), .peek() itp., zwracały poprzednią (nieaktualną) listę w ramach aktualizacji ListUpdateCallback.
- Naprawiono błąd, który powodował, że operatory separatorów nie dodawały nagłówków ani stopek w przypadku użycia funkcji RemoteMediator.
- Naprawiono błąd, który powodował, że aktualizacje elementu LoadState na wartość NotLoading for RemoteMediator zatrzymywały się na etapie wczytywania.
- Naprawiono błąd, który powodował, że interfejs API zgodności Paging2.0 (
.asPagingSourceFactory()
) mógł zostać zainicjowany pod kątem interfejsuDataSource
w nieprawidłowym module CoroutineDispatcher. Rozwiązuje to problemy z awariami i możliwymi błędami ANR, zwłaszcza w przypadku korzystania z obecnej implementacji PagingSource w sali, która korzysta z tej ścieżki zgodności.
Wersja 3.0.0-alfa10
Grudzień 2, 2020
Aplikacja androidx.paging:paging-*:3.0.0-alpha10
została zwolniona. Wersja 3.0.0-alpha10 zawiera te zatwierdzenia.
Zmiany w interfejsie API
Wycofane interfejsy API
dataRefreshFlow
idataRefreshListener
zostały usunięte, ponieważ są nadmiarowe w przypadku aktualizacji loadStateFlow i detektorów. W przypadku tych migracji odpowiednikiem loadStateFlow jest:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
Poprawki błędów
- Parametr endOfPaginationReached for RemoteMediator
REFRESH
został prawidłowo przekazany do aktualizacji parametru LoadState i nie zezwala na uruchamianie zdalnych elementówAPPEND
iPREPEND
. (I94a3f, b/155290248) - Jeśli lista jest pusta z powodu pustej strony początkowej lub intensywnego filtrowania, nie będzie już uniemożliwiać uruchomienia wczytywania stron
PREPEND
aniAPPEND
. (I3e702, b/168169730) - Rozwiązaliśmy problem, który powodował, że funkcja
getRefreshKey
nie była wywoływana w kolejnych generacjach PagingSource w przypadku szybkiego następowania unieważnień. (I45460, b/170027530)
Wkład z zewnątrz
- Dodano nową klasę abstrakcyjną o nieprawidłowej klasy cząsteczkowej nieprawidłową w przypadku interfejsu API
.invalidate()
, która przekierowuje unieważnienie do wszystkich generowanych przez nią źródeł. Dziękuję za uwagę: @claraf3. (Ie71fc, b/160716447)
Znane problemy
- Nagłówki i stopki z przekształcenia .insertSeparators() mogą nie pojawiać się od razu, gdy używasz narzędzia RemoteMediator b/172254056.
- Użycie zdalnego zapośredniczenia może spowodować ukrycie urządzenia
LoadState
w przypadku unieważnieniaPagingSource.load(LoadParams.Refresh(...))
i zakończenia procesuRemoteMediator.load()
przed zwróceniem b/173717820
Wersja 3.0.0-alfa09
11 listopada 2020 roku
Aplikacja androidx.paging:paging-*:3.0.0-alpha09
została zwolniona. Wersja 3.0.0-alpha09 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Całkowicie wycofaj metody dataOdświeżFlow i detektor z klauzulą replaceWith. (I6e2dd)
Poprawki błędów
- Poprawiono wywoływanie obiektu
IllegalArgumentException
w przypadku używania separatorów z funkcją RemoteMediator i wywoływanie unieważniania podczas zdalnego wczytywania, które zwracałoby parametr endOfPagination (I3a260)
Wersja 3.0.0-alfa08
28 października 2020 r.
Aplikacja androidx.paging:paging-*:3.0.0-alpha08
została zwolniona. Wersja 3.0.0-alpha08 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Wersje Kotlin / Javy elementu
DataSource.InvalidatedCallback
zostały połączone przez włączenie konwersji SAM w Kotlin za pomocą funkcjonalnego interfejsu (dostępnego w Kotlin 1.4). Naprawiono też błąd, który powodował, że wariantkotlin unieważnionych wywołań zwrotnych nie był wywoływany po przekształceniu za pomocą funkcji.map
lub.mapByPage
. (I1f244, b/165313046)
Poprawki błędów
- Interakcja ze stroną Pager (strona w języku angielskim) została znacznie udoskonalona. W szczególności przyspieszenie nie będzie już anulować wywołania
RemoteMediator#load
z powodu unieważnienia strony. Nie będzie też już wysyłać żądania dołączenia/dołączenia na początku, jeśli wymagane jest ODŚWIEŻENIE, dopóki żądanie ODŚWIEŻENIE nie zostanie zrealizowane. (I6390b, b/162252536) - Sprawdzanie lint interfejsu API pod kątem brakującego GetterMatchingBuilder jest włączone w Androidzie (I4bbea, b/138602561)
- Naprawiliśmy błąd, który powodował awarię pomocników
.withLoadState*
ConcatAdapter
z powodu powiadamiania RecyclerView z wątku w tle (I18bb5, b/170988309) - Naprawiono błąd, który powodował, że wczytywanie bardzo małej, niepustej strony czasami uniemożliwiało prawidłowe uruchamianie wczytywania z wyprzedzeniem.Iffda3 b/169259468
Wersja 3.0.0-alfa07
1 października 2020 roku
Aplikacja androidx.paging:paging-*:3.0.0-alpha07
została zwolniona. Wersja 3.0.0-alpha07 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Asynchroniczne operatory PagingData oparte na Guawie akceptują teraz jako parametr Wykonawcę, co pozwala kontrolować kontekst wykonywania. (Id4372)
Poprawki błędów
- Poprawiono wyjątek IndexOutOfBounds w RemoteMediator z powodu warunku wyścigu. (I00b7f, b/165821814)
- Naprawiono warunek wyścigu w konwersji DataSource -> PagingSource, który mógł powodować, że wynikowe źródło PagingSource ignorowało sygnały unieważniania pochodzące z DataSource.
- Naprawiono błąd w logice pobierania strony, który czasami powodował, że do momentu wywołania metody PagingDataAdapter.refresh() nie pobierała nowych wersji PagingSource.
- Rozwiązano problem, który powodował, że w przypadku użycia źródła danych przekonwertowanego na element PagingSource (np. przez Room) w połączeniu z funkcją RemoteMediator czasami nie można było znaleźć pozycji przewijania.
Wkład z zewnątrz
- Dziękujemy @simonschiller za dodanie operatorów RxJava2, RxJava3 i asynchronicznych operatorów transformacji do PagingData.
Wersja 3.0.0-alfa06
2 września 2020 r.
Aplikacja androidx.paging:paging-*:3.0.0-alpha06
została zwolniona. Wersja 3.0.0-alpha06 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Komunikat
UnsupportedOperationException
z czytelniejszym komunikatem o braku obsługi stabilnych identyfikatorów jest teraz zgłaszany przy każdym wywołaniu metodyPagingDataAdapter.setHasStableIds
. (Ib3890, b/158801427)
Poprawki błędów
- Parametr insertSeparator nie odfiltrowuje już pustych stron, dzięki czemu prezenter może przestrzegać odległości pobierania z wyprzedzeniem nawet w przypadku, gdy wstawionych jest wiele pustych stron. (I9cff6, b/162538908)
Wersja 3.0.0-alfa05
19 sierpnia 2020 r.
Aplikacja androidx.paging:paging-*:3.0.0-alpha05
została zwolniona. Wersja 3.0.0-alpha05 zawiera te zatwierdzenia.
Poprawki błędów
- Obecnie prawidłowe strony są pobierane z wyprzedzeniem nawet wtedy, gdy prezentowane dane są mocno przefiltrowane
- Przywrócenie zasobu
LoadResult.Error
do ponowionego wczytania nie powoduje już, że próba uzyskania dostępu do produktu będzie ponownie powodować jego nieprawidłowe ponawianie
Wkład z zewnątrz
- Dziękujemy Clary F za pomoc w zrobieniu porządków w testach. (549612)
Wersja 3.0.0-alfa04
5 sierpnia 2020 r.
Aplikacja androidx.paging:paging-*:3.0.0-alpha04
została zwolniona. Wersja 3.0.0-alpha04 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- W interfejsach
AsyncPagingDataDiffer
iPagingDataAdapter
dodano interfejs APIpeek()
, aby umożliwić dostęp do prezentowanych danych bez wywoływania wczytywania stron. (I38898, b/159104197) - Do interfejsów
PagingDataAdapter
iAsyncPagingDataDiffer
dodano interfejs APIsnapshot()
, który umożliwia pobieranie prezentowanych elementów bez wywoływania pobierania strony. (I566b6, b/159104197) - Dodano konstruktor
PagingData.from(List<T>)
umożliwiający prezentowanie list statycznych, które można łączyć z ogólnym przepływem danych PagingData, aby wyświetlać listy statyczne w określonych stanach, np. przed wstępnym zakończeniem ODŚWIEŻENIA lub po prostu do testowania przekształceń. (Id134d). - Wycofano interfejsy API odświeżania Dataflow Flow / Listener, ponieważ miały pokazywać stan prezentowanych elementów przy ODŚWIEŻENIA, ale dzięki poprawie czasu wywołania zwrotnego loadState / Listener i właściwości itemCount jest to niepotrzebne (Ia19f3)
- Dodano kody zgodności RxJava3 w przypadku
PagingSource
iRemoteMediator
(I49ef3, b/161480176).
Poprawki błędów
- Zasób
PositionalDataSource
został przekonwertowany naPagingSource
za pomocą pomocytoPagingSourceFactory
, w tymPagingSource
wygenerowany przez Pokój wygenerowany przez Pokój, który prawidłowo jest teraz oznaczony do obsługi skakania. (I3e84c, b/162161201) - Naprawiliśmy błąd polegający na tym, że użycie synchronicznego wariantu danychsubmitData czasem prowadziło do wyścigu powodującego błąd
ClosedSendChannelException
(I4d702, b/160192222).
Wkład z zewnątrz
- Dziękujemy Zac Sweers za dodanie kodów zgodności z RxJava3 w imieniu Slacka. (I49ef3, b/161480176)
Wersja 3.0.0-alfa03
22 lipca 2020 r.
Aplikacja androidx.paging:paging-*:3.0.0-alpha03
została zwolniona. Wersja 3.0.0-alpha03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Konstruktor PagingState jest teraz publiczny, co powinno ułatwić testowanie implementacji metody getOdświeżKey() (I8bf15)
- Ukryto warianty funkcji mapy kotlin z DataSource z Javy, aby wyjaśnić niejasność między wariantami oryginalnymi i kotlinowymi. (If7b23, b/161150011)
- Zbędne interfejsy API, które mają zapewnić wygodę użytkownikom Kotlin, zostały oznaczone jako @JvmSynthetic (I56ae5)
- Dodano przeciążenia konstruktora LoadResult.Page, który ustawia domyślne wartości itemsBefore i itemsAfter na COUNT_UNDEFINED (I47849).
- Istniejące operatory PagingData akceptują metody zawieszania oraz wprowadziliśmy nowe, niezawieszone operatory mapSync, FlaMapSync i filterSync dla użytkowników Javy. Obecne metody przekształcania zostały przeniesione do funkcji rozszerzeń, więc użytkownicy Kotlin będą musieli je zaimportować. (I34239, b/159983232)
Poprawki błędów
- Funkcja Room (i PositionalDataSource) PagingSources teraz wyświetla separator wiodący jako część pierwszej strony, dzięki czemu użytkownik nie musi przewijać pierwszej strony, aby ją wyświetlić. (I6f747, b/160257628)
- Dostęp do elementu za pomocą obiektów zastępczych prawidłowo aktywuje teraz wczytywanie PagingSource, dopóki nie zostanie zwrócona strona, która spełnia żądany indeks po przekształceniu za pomocą funkcji PagingData.filter() (I95625, b/158763195)
- Poprawiliśmy błąd, który powodował, że czasami przewijanie po stronie PagingSource zwracało błąd, co uniemożliwiało ponowienie próby użycia strony PagingDataAdapter.retry(). (I1084f, b/160194384)
- Naprawia problem polegający na tym, że dostęp do elementu po usunięciu strony mógł nie być wczytywany, mimo że dostęp do elementu mieścił się w zakresie uprawnienia pobierania z wyprzedzeniem (Ie95ae, b/160038730)
- Ustawienie PagingConfig.maxSize nie włącza już obiektów zastępczych po zdarzeniu odrzucenia (I2be29, b/159667766).
Wersja 3.0.0-alfa02
24 czerwca 2020 r.
Aplikacja androidx.paging:paging-*:3.0.0-alpha02
została zwolniona. Wersja 3.0.0-alpha02 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano przeciążenia konstruktora
PagingConfig
z typowymi wartościami domyślnymi (I39c50, b/158576040). - Dodano przeciążenia konstruktorów
PagingDataAdapter
iAsyncPagingDataDiffer
z typowymi wartościami domyślnymi (Ie91f5). - Interfejsy API adaptera
dataRefreshFlow
idataRefreshListener
przekazują teraz wartość logiczną, aby zasygnalizować, czyPagingData
jest pusty (I6e37e, b/159054196). - Dodano interfejsy API RxJava i Guava do aplikacji RemoteMediator – RxRemoteMediator i ListenableFutureRemoteMediator.
- Dodano pomoce do PagingState umożliwiające dostęp do popularnych elementów, takich jak
isEmpty()
ifirstItemOrNull()
(I3b5b6, b/158892717)
Poprawki błędów
- Pager sprawdza teraz ponowne użycie PagingSource w fabryce, aby zapobiegać przypadkowemu ponownemu użyciu nieprawidłowych PagingSources, który spowodował niejasny błąd (I99809, b/158486430).
- Błędy związane z funkcją RemoteMediator REFRESH nie uniemożliwiają już wczytania elementu PagingSource (I38b1b, b/158892717)
- Niezawieszona wersja systemu
submitData
nie powoduje już awarii z powodu równoczesnego zbierania danych przez wiele elementówPagingData
, gdy jest wywoływane po zawieszeniu w wersjisubmitData
. (I26358, b/158048877) - Naprawiony wyjątek „nie można zbierać dwukrotnie z pagera”, który mógł występować po zmianie konfiguracji (I58bcc, b/158784811).
Wersja 3.0.0-alfa01
10 czerwca 2020 r.
Aplikacja androidx.paging:paging-*:3.0.0-alpha01
została zwolniona. Wersja 3.0.0-alpha01 zawiera te zatwierdzenia.
Biblioteka stronicowania została zaktualizowana do wersji 3.0, która zawiera kilka nowych, ważnych funkcji.
Nowe funkcje w wersji 3.0
- Pierwsza klasa wsparcia dla współprogramów Kotlin i Flow.
- Obsługa ładowania asynchronicznego z użyciem funkcji zawieszania współprogramów, elementów podstawowych RxJava Single lub Guava ListenableFuture.
- Wbudowane sygnały o stanie wczytywania i błędach na potrzeby elastycznego projektowania interfejsu, w tym funkcje ponawiania próby i odświeżania.
- Ulepszenia warstwy repozytorium
- Uproszczony interfejs źródła danych
- Uproszczona sieć + podział bazy danych na strony
- Pomoc w anulowaniu abonamentu
- Ulepszenia warstwy prezentacji
Znane problemy
- Pakowanie 3 dokumentów Java nie jest jeszcze dostępne. Tymczasem korzystaj z przewodników, do których linki znajdziesz powyżej, lub z dokumentacji Kotlin. (b/158614050)
Wersja 2.1.2
Wersja 2.1.2
18 marca 2020 r.
Aplikacja androidx.paging:paging:2.1.2
została zwolniona. Wersja 2.1.2 zawiera te zatwierdzenia w porównaniu z wersją 2.1.0.
Poprawki błędów
- Napraw błąd
IndexOutOfBoundsException
w rzadkich przypadkach, gdy konwersja pozycji jest unieważniona.
Problem z publikacją
Wersja strony
2.1.1
została opublikowana nieprawidłowo z nieprawidłowo skonfigurowanej gałęzi, przez co częściowo zaimplementowane interfejsy API i funkcje pojawiły się w kolejnej wersji.Strona
2.1.2
zawiera poprawkę związaną z centrowaniem obciążenia opublikowaną pierwotnie w wersji 2.1.1, ale tym razem została poprawnie wybrana w wersji 2.1.0. Jeśli korzystasz obecnie z wersji 2.1.1, zdecydowanie zalecamy uaktualnienie do tej wersji.
Wersja 2.1.1
Wersja 2.1.1
18 grudnia 2019 r.
Aplikacja androidx.paging:paging-*:2.1.1
została zwolniona. Wersja 2.1.1 zawiera te zatwierdzenia.
Poprawki błędów
- Ciągłe wczytywanie początkowe ze źródeł PositionalDataSources jest teraz wyśrodkowane na ostatnim dostępie po wyłączeniu obiektów zastępczych.
Wersja 2.1.0
Wersja 2.1.0
25 stycznia 2019 r.
Strona 2.1.0
została zwolniona bez zmian z 2.1.0-rc01
.
Wersja 2.1.0-rc01
6 grudnia 2018 r.
Strona 2.1.0-rc01
została zwolniona bez zmian z 2.1.0-beta01
.
Wersja 2.1.0-beta01
1 listopada 2018 r.
Strona 2.1.0-beta01
została zwolniona bez zmian z 2.1.0-alpha01
.
Wersja 2.1.0-alfa01
12 października 2018 r.
W przypadku 2.1.0-alpha01
stronicowania dodaliśmy 2 główne dodatki – pomijanie stron i biblioteki rozszerzeń KTX dla każdego artefaktu – a także kilka innych zmian w interfejsie API i poprawek błędów.
Zmiany w interfejsie API
- Dodano
PagedList.Config.Builder.setMaxSize()
w celu ograniczenia liczby wczytywanych elementów w pamięci. - Dodano:
androidx.paging.Config()
jako alternatywę Kotlin dla:PagedList.Config.Builder
- Dodano:
androidx.paging.PagedList()
jako alternatywę Kotlin dla:PagedList.Builder
- Dodano:
DataSourceFactory.toLiveData()
jako alternatywę Kotlin dla:LivePagedListBuilder
- Dodano
DataSourceFactory.toObservable()
itoFlowable()
jako alternatywy dla Kotlin dla:RxPagedListBuilder
- Dodano element
AsyncPagedListDiffer.addPagedListListener()
do nasłuchiwania w przypadku zamiany PagedList na inną. b/111698609 - Dodano
PagedListAdapter.onCurrentListChanged()
wariant, który przekazuje starą i nową listę, oraz wycofano poprzedni wariant. - Dodano
PagedListAdapter/AsyncPagedListDiffer.submitList()
wariantów, które przyjmują dodatkowe wywołanie zwrotne, jeśli wyświetlana jest lista stron po różnicy. Pozwala to na synchronizację zamiany PagedList z innymi aktualizacjami interfejsu użytkownika. b/73781068 - Dodano
PagedList.getLoadedCount()
, aby poinformować Cię, ile elementów jest w pamięci. Pamiętaj, że jeśli symbole zastępcze są wyłączone, wartość zwracana jest zawsze równa.size()
.
Poprawki błędów
- Poprawiono warunek wyścigu w przypadku różnicowania w przypadku ponownego użycia list b/111591017
PagedList.loadAround()
zwraca teraz błądIndexOutOfBoundsException
, gdy indeks jest nieprawidłowy. Wcześniej mógł ulec awarii z niejasnym innym wyjątkiem.- Rozwiązano problem, w którym bardzo mały rozmiar początkowy wczytywany w połączeniu z niezmienionymi danymi uniemożliwiał dalsze wczytywanie pliku b/113122599
Wersja 2.0.0
Wersja 2.0.0
1 października 2018 r.
Strona 2.0.0
została opublikowana z jedną poprawką.
Poprawki błędów
- Usunięto awarię, która mogła wystąpić w przypadku bardzo szybkiego przewijania przy użyciu elementu
PositionalDataSource
i obiektów zastępczych b/114635383.
Wersja 2.0.0-beta01
2 lipca 2018 r.
Poprawki błędów
- Naprawiono znikanie treści w niektórych przypadkach przedrostka (obiekty zastępcze wyłączone, PositionalDataSource) b/80149146
- (Już dostępna w wersji
1.0.1
) Naprawiono awarie, które powodowały, żePagedListAdapter
iAsyncPagedListDiffer
nie sygnalizowały zdarzeń przeniesienia. b/110711937
Zależności sprzed AndroidaX
W poniższych wersjach Paging (starszych niż AndroidX) należy uwzględnić te zależności:
dependencies {
def paging_version = "1.0.0"
implementation "android.arch.paging:runtime:$paging_version"
// alternatively - without Android dependencies for testing
testImplementation "android.arch.paging:common:$paging_version"
// optional - RxJava support
implementation "android.arch.paging:rxjava2:$paging_version"
}
Wersja 1.0.1
Wersja 1.0.1
26 czerwca 2018 r.
Strona 1.0.1
została opublikowana z jedną poprawką w wersji runtime
. Zdecydowanie zalecamy korzystanie z 1.0.1
ze względu na stabilność. Udostępniono również stronę rxJava2 1.0.1
, która jest identyczna jak 1.0.0-rc1
.
Poprawki błędów
- Naprawiono awarie, które powodowały, że
PagedListAdapter
iAsyncPagedListDiffer
nie sygnalizowały zdarzeń przeniesienia. b/110711937
RxJava2 w wersji 1.0.0
RxJava2 w wersji 1.0.0-rc1
16 maja 2018 r.
Strona 1.0.0-rc1
RxJava2 zostanie przeniesiona do wersji kandydującej do wdrożenia bez zmian w stosunku do początkowej wersji alfa.
Wersja 1.0.0
Wersja 1.0.0-rc1
19 kwietnia 2018 r. Kandydat do przejścia na nowe wersje
Nie mamy więcej znanych problemów ani nowych funkcji przeznaczonych dla etapu 1.0.0
. Uaktualnij projekty, aby używały 1.0.0-rc1
. Pomóż nam je przetestować, żebyśmy mogli wysłać solidny 1.0.0
.
Brak zmian w tej wersji. Jest taka sama jak w 1.0.0-beta1
.
Wersja 1.0.0-beta1
5 kwietnia 2018 r.
Przez krótki czas będzie ona dostępna w wersji beta, zanim zostanie udostępniona w wersji kandydującej do opublikowania.
Nie planujemy dalszych zmian w interfejsie API w przypadku Paging 1.0
, a jeśli chodzi o wszelkie zmiany w interfejsie API, jest bardzo wysoki.
Obsługa strony w języku alfa (RxJava2) na potrzeby obsługi stron docelowych została opublikowana jako osobny opcjonalny moduł (android.arch.paging:rxjava2:1.0.0-alpha1
) i tymczasowo będzie miała osobną wersję do momentu ustabilizowania się stanu.
Ta nowa biblioteka stanowi alternatywę dla języka LivePagedListBuilder
w języku RxJava2, która umożliwia tworzenie komponentów Observable
i Flowable
, przyjmując Scheduler
s zamiast Executor
:
Kotlin
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
Java
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
Nowe funkcje
- Element
RxPagedListBuilder
został dodany za pomocą nowego artefaktuandroid.arch.paging:rxjava2
.
Zmiany w interfejsie API
Zmiany w interfejsie API mające na celu wyjaśnienie roli wykonawców w kreatorach:
Zmieniono nazwę z
setBackgroundThreadExecutor()
nasetFetchExecutor()
(wPagedList.Builder
iLivePagedListBuilder
)Zmieniono nazwę
setMainThreadExecutor()
nasetNotifyExecutor()
(wPagedList.Builder
).
Zmieniono ustawienie
PagedList.mCallbacks
użytkownika jako prywatnego.
Poprawki błędów
LivePagedListBuilder
aktywuje początkowe obciążeniePagedList
we wskazanym wykonawcy, a nie na puli wątków operacji wejścia-wyjścia w komponentach Arch Komponenty.Naprawiono nieprawidłowe zachowanie w wewnętrznych kodach
DataSource
(używane do implementacji interfejsuDataSource.map
oraz ładowania funkcjiPositionalDataSource
z wyłączeniem zastępczym) b/77237534.
Wersja 1.0.0-alfa7
21 marca 2018 r.
Tempo 1.0.0-alpha7
jest dostępne razem z cyklami życia 1.1.1
. Strona alfa 7 zależy od przeniesienia klasy Function
opisanej powyżej, więc musisz zaktualizować zależność lifecycle:runtime
do android.arch.lifecycle:runtime:1.1.1
.
Strona alpha7
ma być ostatnią wersją przed premierami wersji beta.
Zmiany w interfejsie API
- Obiekty
DataSource.LoadParams
mają teraz publiczny konstruktor, a obiektyDataSource.LoadCallback
są teraz abstrakcyjne. Umożliwia to pakowanie funkcjiDataSource
lub bezpośrednie testowanieDataSource
z przykładowym wywołaniem zwrotnym. b/72600421 - twórcy map dla DataSource i DataSource.Factory,
map(Function<IN,OUT>)
umożliwia przekształcanie, zawijanie i dekorowanie wyników ładowanych przezDataSource
.mapByPage(<List<IN>,List<OUT>>)
umożliwia te same funkcje w przetwarzaniu wsadowym (np. jeśli elementy wczytane z SQL muszą dodatkowo wysyłać zapytania do oddzielnej bazy danych, można to zrobić w ramach wsadu).
- Dodano metodę
PagedList#getDataSource()
jako zapewniającą wygodę: b/72611341 - Wszystkie wycofane klasy zostały usunięte z interfejsu API, w tym pozostałości pakietu
recyclerview.extensions
iLivePagedListProvider
. - Język
DataSource.Factory
został zmieniony z interfejsu na klasę abstrakcyjną, aby umożliwić działanie mapy.
Poprawki błędów
- Zmieniono konstruktorów na ostateczne. b/70848565
- Implementacja pokoju
DataSource
jest teraz naprawiona, aby obsługiwać zapytania z wieloma tabelami – ta poprawka występuje w salach od wersji 1.1.0-beta1 (patrz wyżej). - Naprawiono błąd, który powodował, że funkcja
BoundaryCallback.onItemAtEndLoaded
nie była wywoływana w przypadku funkcjiPositionalDataSource
, gdy włączone są symbole zastępcze, a łączny rozmiar jest dokładną wielokrotnością rozmiaru strony.
Wersja 1.0.0-alfa5
22 stycznia 2018 r.
Poprawki błędów
- Naprawianie wczytywania strony, gdy obiekty zastępcze są wyłączone b/70573345
- Dodatkowe logowanie na potrzeby śledzenia błędu b/70360195 związanego z zasadą IllegalArgumentException (oraz spekulacyjna poprawka po stronie pokoju)
- Poprawki przykładowego kodu w języku Javadoc: b/70411933, b/71467637