Paging
Ta tabela zawiera wszystkie artefakty w grupie androidx.paging
.
Artefakt | Wersja stabilna | Wersja kandydująca | Wersja Beta | Wersja alfa |
---|---|---|---|---|
paging-* | 3.3.4 | - | - | - |
paging-compose | 3.3.4 | - | - | - |
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ą.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Wersja 3.3
Wersja 3.3.4
13 listopada 2024 r.
androidx.paging:paging-*:3.3.4
został zwolniony. Wersja 3.3.4 zawiera te komitowane zmiany.
Poprawki błędów
- Testy jednostek Androida korzystające z Paging 3.3 lub nowszej wersji nie będą już generować błędów takich jak
Method isLoggable in android.util.Log not mocked
. (Ia9400, b/331684448)
Wersja 3.3.2
7 sierpnia 2024 r.
androidx.paging:paging-*:3.3.2
został zwolniony. Wersja 3.3.2 zawiera te komitowane zmiany.
Nowe funkcje
- Do wersji
paging-common
ipaging-testing
dodano nowe cele Kotlin Multiplatform:watchos
,tvos
ilinuxArm64
(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 zRecyclerView
, nie mogły wywołać kolejnych załadowań po zaktualizowaniu źródła danych podczas przewijania. (I60ca5, b/352586078) - Usunięto błąd powodowany usuwaniem elementów z źródła danych podczas przewijania
RecyclerView
za pomocąPagingDataAdapter
lubAsyncPagingDataDiffer
. (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 interfejsuPagingDataPresenter
, zamiast używać wewnętrznych interfejsów API do przewijania lub interfejsuAsyncPagingDataDiffer
.paging-runtime
- Dodaliśmy nowe metody pomocnicze
LoadStates
iCombinedLoadStates
w klasachhasError
iisIdle
, aby sprawdzać, czy obiektLoadStates
jest w stanie Błąd czyNotLoading
. Dodano też nową metodę rozszerzeniaawaitNotLoading()
w Kotlinie, która czeka, aż wczytywanie osiągnie stanNotLoading
lub błąd.Flow<CombinedLoadStates>
PagingData.empty()
domyślnie wysyła stanyNotLoading
, chyba że do jego konstruktora zostaną przekazane niestandardowe wartościLoadStates
. Jest to inne zachowanie niż obecne, w którym nie wysyła sięLoadStates
, gdy jest ono przesłane doPagingDataAdapter
, lub wysyła się stany wczytywania, gdy są one zebrane jakoLazyPagingItems
. Gdy dane są zbierane jakoLazyPagingItems
, pusta lista będzie wyświetlana natychmiast po początkowym skomponowaniu.
Zgodność Kotlin Multiplatform
Strona Paging teraz dostarcza elementy zgodne z Kotlin Multiplatform, głównie dzięki pracy na poziomie upstream z projektu multiplatform-paging w CashApp.
paging-common
przeniósł wszystkie interfejsy API Paging 3 docommon
i jest teraz zgodny z jvm i iOS, a nie tylko z Androidem.paging-testing
przeniósł swój kod docommon
i jest teraz zgodny z jvm i iOS, a nie tylko z Androidem.paging-compose
przeniósł swój kod docommon
i wysyła artefakt Androida, który jest zgodny z obsługą wielu platform wandroidx.compose
.paging-runtime
,paging-guava
,paging-rxjava2
ipaging-rxjava3
pozostaną dostępne tylko na Androida.
Wersja 3.3.0-rc01
1 maja 2024 r.
androidx.paging:paging-*:3.3.0-rc01
jest wydana bez zmian w Paging 3.3.0-beta01. Wersja 3.3.0-rc01 zawiera te zatwierdzenia.
Wersja 3.3.0-beta01
3 kwietnia 2024 r.
androidx.paging:paging-*:3.3.0-beta01
jest publikowana bez istotnych zmian. Wersja 3.3.0-beta01 zawiera te komity.
Wersja 3.3.0-alpha05
20 marca 2024 r.
androidx.paging:paging-*:3.3.0-alpha05
został zwolniony. Wersja 3.3.0-alpha05 zawiera te komity.
Zmiany w interfejsie API
- Strona z przekierowaniami używa teraz adnotacji
@MainThread
AndroidX dla wspólnego kodu. (I78f0d, b/327682438)
Wersja 3.3.0-alpha04
6 marca 2024 roku
androidx.paging:paging-*:3.3.0-alpha04
został zwolniony. Wersja 3.3.0-alpha04 zawiera te komisy.
Poprawki błędów
- Naprawiono drobne błędy w dokumentacji związane z dodaniem obsługi Kotlina na wielu platformach. (aosp/2950785)
Wersja 3.3.0-alpha03
7 lutego 2024 r.
androidx.paging:paging-*:3.3.0-alpha03
został zwolniony. Wersja 3.3.0-alpha03 zawiera te commity.
Nowe funkcje
- Zajęcia
PagingDataPresenter
są teraz dostępne publicznie. Prezentacje na wielu platformach można teraz tworzyć na podstawie interfejsuPagingDataPresenter
, zamiast używać wewnętrznych interfejsów API do przewijania lub interfejsuAsyncPagingDataDiffer
.paging-runtime
(Id1f74, b/315214786) - Dodano nowe metody pomocnicze
LoadStates
iCombinedLoadStates
, które sprawdzają, czyLoadStates
jest w stanie Błąd czyNotLoading
. Dodano też nowy interfejs API, który czeka naLoadStateFlow
, dopóki wczytywanie nie osiągnie stanuNotLoading
lub błędu. (Id6c67)
Zmiany w zachowaniu
PagingData.empty()
domyślnie wysyła stanyNotLoading
, chyba że do jego konstruktora zostaną przekazane niestandardowe wartościLoadStates
. Jest to inne zachowanie niż obecne, w którym nie wysyła sięLoadStates
, gdy jest ono przesłane doPagingDataAdapter
, lub wysyła się stany wczytywania, gdy są one zebrane jakoLazyPagingItems
. Gdy dane są zbierane jakoLazyPagingItems
, pusta lista będzie wyświetlana natychmiast po początkowym skomponowaniu. (I4d11d, b/301833847)
Wersja 3.3.0-alpha02
20 września 2023 r.
androidx.paging:paging-*:3.3.0-alpha02
został zwolniony. Wersja 3.3.0-alpha02 zawiera te commity.
Zgodność Kotlin Multiplatform
Strona Paging teraz dostarcza elementy zgodne z Kotlin Multiplatform, głównie dzięki pracy na poziomie upstream z projektu multiplatform-paging w CashApp. Pozwoli nam to uniknąć rozbieżności między 2 repozytoriami i utrzymać ich kompatybilność.
paging-common
przeniósł wszystkie interfejsy API Paging 3 docommon
i jest teraz zgodny z jvm i iOS, a nie tylko z Androidem.paging-testing
przeniósł swój kod docommon
i jest teraz zgodny z jvm i iOS, a nie tylko z Androidem.paging-compose
przeniósł swój kod docommon
i wysyła artefakt Androida, który jest zgodny z obsługą wielu platform wandroidx.compose
.paging-runtime
,paging-guava
,paging-rxjava2
ipaging-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
- Dziękujemy veyndan z Cash App za pomoc w przełożeniu Pagingu na Kotlin Multiplatform (#560, #561, #562, #573, #576, #577, #578, #579, #580, #581, #583, #584, #586, #609)
Wersja 3.3.0-alpha01
20 września 2023 r.
- To pierwsza wieloplatformowa wersja bibliotek androidx.paging. Ta wersja zawiera tylko elementy
*-jvm
i*-android
. W przypadku wersji macOS, iOS i Linux użyj3.3.0-alpha02
.
Wersja 3.2
Wersja 3.2.1
6 września 2023 r.
androidx.paging:paging-*:3.2.1
został zwolniony. Wersja 3.2.1 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował zawieszanie się interfejsu API
asSnapshot()
artefaktu testowania strony po przekazaniu przepływu utworzonego za pomocąPagingData.from(List)
, ponieważasSnapshot()
nie miał żadnych informacji o zakończeniu wczytywania (w przeciwieństwie do przeciążeniaPagingData.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ążeniaPagingData.from
, które zapewniaLoadStates
. (I502c3) - Paging Compose używa teraz wewnętrznie funkcji
AndroidUiDispatcher.Main
, aby mieć pewność, że nowe dane będą dostępne w tym samym interwale, w którym zakończy się wczytywanie. (Ia55af)
Wersja 3.2.0
26 lipca 2023 r.
androidx.paging:paging-*:3.2.0
został zwolniony. Wersja 3.2.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 3.1.0
- Interfejs API Paging Compose osiągnął stabilność i został scalony z resztą pakietu Paging, gdzie jego wersja jest teraz zgodna z innymi artefaktami Paging. Zmiany od wersji 3.1.0:
- Obsługa podglądu listy fałszywych danych przez utworzenie
PagingData.from(fakeData)
i opakowanie tegoPagingData
wMutableStateFlow
(np.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Przekaż ten przepływ do komponentów@Preview
jako odbiornik dlacollectAsLazyPagingItems()
na potrzeby podglądu. - Obsługa wszystkich układów opóźnionych, takich jak
LazyVerticalGrid
iHorizontalPager
, 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 poziomieitemKey
iitemContentType
, które ułatwiają implementację parametrówkey
icontentType
w standardowych interfejsach APIitems
, które są już dostępne w przypadkuLazyColumn
iLazyVerticalGrid
, a także ich odpowiedników w interfejsach API, takich jakHorizontalPager
. - Atrybuty
items(lazyPagingItems)
iitemsIndexed(lazyPagingItems)
, które obsługują tylkoLazyListScope
, zostały wycofane.
- Obsługa podglądu listy fałszywych danych przez utworzenie
- 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 implementacjiPagingSource
niezależnie od Pagera i prawdziwego interfejsu użytkownika. - Interfejsy API
asPagingSourceFactory
do przekształcania obiektówFlow<List<Value>>
lub statycznychList<Value>
w obiektyPagingSourceFactory
, które można przekazywać do Pagera w testach asSnapshot
Rozszerzenie Kotlina wFlow<PagingData<Value>>
, które przekształcaFlow<PagingData<Value>>
w bezpośrednieList<Value>
.asSnapshot lambda
umożliwia naśladowanie interfejsu aplikacji za pomocą interfejsów API, takich jakscrollTo
lubappendScrollWhile
, dzięki czemu możesz w dowolnym momencie sprawdzić, czy zrzut danych jest prawidłowy.
- klasę
- Dodano dzienniki domyślne, aby udostępnić informacje debugowania na poziomie strony 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 z widokami, jak i strony z edytorem. - Dodano konstruktory
PagingDataAdapter
iAsyncPagingDataDiffer
, które przyjmująCoroutineContext
zamiastCoroutineDispatcher
. - Dodano nowy interfejs funkcyjny
PagingSourceFactory
, który zapewnia bardziej wyraźną powierzchnię interfejsu API niż poprzednie () ->PagingSource
funkcje lambda. Fabryki tej można używać do tworzenia instancji Pagera.
Wersja 3.2.0-rc01
21 czerwca 2023 r.
androidx.paging:paging-*:3.2.0-rc01
został zwolniony. Wersja 3.2.0-rc01 zawiera te zatwierdzenia.
Darowizna zewnętrzna
Wersja 3.2.0-beta01
7 czerwca 2023 r.
androidx.paging:paging-*:3.2.0-beta01
został zwolniony. Wersja 3.2.0-beta01 zawiera te commity.
Strona Nowy post
- Interfejs API Compose na stronach osiągnął oficjalnie stabilność. W związku z tym wersja została zaktualizowana z
1.0.0-alpha20
na taką, która jest zgodna z wersją wszystkich innych artefaktów strony.
Zmiany w interfejsie API
- Z interfejsu PagingCompose usunięto wycofane interfejsy API
items(LazyPagingItems)
iitemsIndexed(LazyPagingItems)
. Przykłady interfejsów API, które je zastępują, znajdziesz w informacjach o wersji Paging Compose1.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 klasyPager
. (I33165, b/280655188) - Dodano nowy interfejs API
paging-testing
List<Value>.asPagingSourceFactory()
, który umożliwia pobieraniePagingSourceFactory
tylko z niezmiennej listy danych. Do testowania z wieloma generacjami danych statycznych nadal należy używać dotychczasowego rozszerzeniaFlow<List<Value>>
. (Id34d1, b/280655188)
Zmiany w interfejsie API
- Wszystkie publiczne interfejsy API w testach przewijania są teraz opatrzone adnotacją
@VisibleForTesting
, aby zapewnić, że są one używane tylko w testach. (I7db6e) - Interfejs API
asSnapshot
nie wymaga już przekazywania parametruCoroutineScope
. 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 konstruktoraPager
(I6185a). - Przejście z typu lambda
() -> PagingSource<Key, Value>
na typPagingSourceFactory<Key, Value>
w przypadku testowania stronowania. (I4a950, b/280655188)
Zmiany w zachowaniu
- Do wykonywania testów
asSnapshot
nie jest już wymagany główny moduł rozsyłający. Ustawienie go nie powoduje już żadnych zmian w zachowaniu testu. (Ie56ea)
Wersja 3.2.0-alpha05
3 maja 2023 r.
androidx.paging:paging-*:3.2.0-alpha05
został zwolniony. Wersja 3.2.0-alpha05 zawiera te commity.
Zmiany w interfejsie API
- Interfejs API testowania stron
asSnapshot
ma teraz domyślnie parametrloadOperations
ustawiony na pustą lambda. Umożliwia to wywołanie funkcjiasSnapshot
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 funkcjiFlow
, która zwraca fabrykę do wielokrotnego użytku do generowania instancjiPagingSource
. (I5ff4f, I705b5) - Zaktualizowaliśmy dokumentację konstruktora
LoadResult.Page
, aby wyjaśnić, że aby umożliwić przeskakiwanie, należy zastąpić wartościitemsBefore
iitemsAfter
. (Ied354)
Wkład zewnętrzny
- Dziękujemy Veyndan za pomoc w przełożeniu strony PagedAnon z Androida/JVM. (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, #493)
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 obiektupagingSourceFactory
z obiektuFlow<List<Value>>
i przekazywanie go do pager. Każdy elementList<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 elementachFlow<PagingData<T>>
. Można go na przykład użyć do potwierdzenia danych wyjściowych funkcjiFlow<PagingData<T>>
z warstwy ViewModel.Jest to realizowane za pomocą rozszerzenia
asSnapshot
Kotlina w komponencieFlow<PagingData<Value>>
, które przekształcaFlow<PagingData<Value>>
w bezpośrednieList<Value>
. LambdaasSnapshot
umożliwia naśladowanie interfejsu użytkownika aplikacji za pomocą interfejsów API, takich jakscrollTo
lubappendScrollWhile
, w sposób powtarzalny i spójny, dzięki czemu możesz w dowolnym momencie w zbiorze danych na stronach sprawdzać, czy zrzut danych jest prawidłowy.// Create your ViewModel instance val viewModel = … // Get the Flow of PagingData from the ViewModel val data< Flow<PagingData<String>> = viewModel.data val snapshot: List<String> = data.asSnapshot { // Each operation inside the lambda waits for the data to settle before continuing scrollTo(index = 50) // While you can’t view the items within the asSnapshot call, // you can continuously scroll in a direction while some condition is true // i.e., in this case until you hit a placeholder item appendScrollWhile { item: String -> item != “Header 1” } } // With the asSnapshot complete, you can now verify that the snapshot // has the expected values
asSnapshot
to metodasuspend
, która powinna być wykonywana w ramachrunTest
. 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
getItem
ipeek
w funkcjachAsyncPagingDataDiffer
iPagingDataAdapter
są teraz prawidłowo oznaczone jako dostępne tylko w wątku głównym. (I699b6) - Usunięcie symboli zastępczych z typów ogólnych używanych przez
TestPager
, co ułatwia korzystanie z wyników tych metod w kodzie napisanym w języku programowania Java. (I56c42)
Wersja 3.2.0-alpha03
24 października 2022 r.
androidx.paging:paging-*:3.2.0-alpha03
został zwolniony. Wersja 3.2.0-alpha03 zawiera te commity.
Testowanie przewijania
Ta wersja zawiera nowy artefakt: paging-testing
. Ten artefakt udostępnia interfejsy API przeznaczone do testowania jednostkowego poszczególnych warstw aplikacji i jej integracji z Pagingiem.
Na przykład ta pierwsza wersja zawiera klasę TestPager
, która umożliwia sprawdzanie działania własnej implementacji PagingSource
niezależnie od Pager
i rzeczywistego interfejsu użytkownika, którego zwykle trzeba używać do symulowania kompleksowej integracji z systemem Paging.
TestPager
należy uznać za fałszywy – podwójny interfejs testowy, który odzwierciedla rzeczywistą implementację Pager
, a jednocześnie zapewnia uproszczony interfejs API do testowania PagingSource
. Te interfejsy API to interfejsy suspend
i powinny być uruchamiane w ramach runTest
zgodnie z opisem w przewodniku Testowanie coroutines Kotlin na Androidzie.
Przykłady użycia tych interfejsów API można znaleźć w testach room-paging
, które zostały przekształcone w celu użycia interfejsu TestPager
.
Zmiany w interfejsie API
- Umożliwia wygodne iterowanie od
LoadResult.Page.data
doLoadResult.Page.iterator()
. Pozwala to pośrednio na użycie metodyflatten
z standardowej biblioteki Kotlina, gdy podanoList<LoadResult.Page>
, na przykład z właściwościąpages
obiektuPagingState
, która jest przekazywana do metodyPagingSource.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
lubPagingDataAdapter
, aby udostępnić 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
- Usunęliśmy błąd konstruktora
PagingDataDiffer
, który występował podczas używaniapaging-common:3.2.0-alpha01
z czasem wykonywaniapaging-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
PagingDataAdapter
iAsyncPagingDataDiffer
, które przyjmująCoroutineContext
zamiastCoroutineDispatcher
. (Idc878) - Domyślnie
PagingData.from()
iPagingData.empty()
nie mają już wpływu naCombinedLoadStates
po stronie prezentera. Dodano nowe przeciążenie, które umożliwia przekazywanie do tych konstruktorów wartościsourceLoadStates
iremoteLoadStates
, aby zachować dotychczasowe zachowanie polegające na ustawieniuLoadStates
jako całkowicie terminalnej (tzn.NotLoading(endOfPaginationReached = false)
) z opcją uwzględnienia w razie potrzeby także stanów zdalnych. JeśliLoadStates
nie zostaną przekazane, poprzednieCombinedLoadStates
będą utrzymywane po stronie prezentera, gdy otrzyma on statycznePagingData
. (Ic3ce5, b/205344028)
Poprawki błędów
- Wynik funkcji
PagingSource.getRefreshKey()
jest teraz prawidłowo priorytetyzowany nad funkcjąinitialKey
w przypadkach, gdy zwraca ona wartość null, ale została ustawiona wartość niebędąca nullem w przypadku funkcjiinitialKey
. (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 wLoadState
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>.observable
iFlow<PagingData>.flowable
nie są już eksperymentalne - Zmiana zachowania na
LoadState
:- Wartość
endOfPaginationReached
jest teraz zawsze ustawiona nafalse
w przypadkuLoadType.REFRESH
w przypadku zarównoPagingSource
, jak iRemoteMediator
LoadStates
z Paging teraz oczekuje na prawidłowe wartości zarówno wPagingSource
, jak iRemoteMediator
, zanim wyemituje dane na dalszych etapach. Nowe generacjePagingData
będą teraz zawsze prawidłowo rozpoczynać się odLoading
w przypadku stanu odświeżania, zamiast w niektórych przypadkach nieprawidłowo resetować się doNotLoading
.- Interfejsy API
.loadStateFlow
i.addLoadStateListener
dla prezenterów nie wysyłają już niepotrzebnie początkowegoCombinedLoadStates
, którego stan mediatora zawsze ma wartośćnull
.
- Wartość
- Anulowanie poprzednich generacji odbywa się teraz chętnie w przypadku unieważnienia lub nowych generacji. Użycie tagu
.collectLatest
w taguFlow<PagingData>
nie powinno być już wymagane, ale nadal zalecamy to robić. - Dodano
PagingSource.LoadResult.Invalid
jako nowy typ zwracany przezPagingSource.load
, co powoduje, że funkcja paging odrzuca i unieważnia wszystkie oczekujące lub przyszłe żądania wczytania dla tegoPagingSource
. Ten typ zwracania danych jest przeznaczony do obsługi potencjalnie nieprawidłowych lub nieaktualnych danych, które mogą zostać zwrócone z bazy danych lub sieci. - Dodano interfejsy API dla prowadzących
.onPagesPresented
i.addOnPagesUpdatedListener
, które są wywoływane synchronicznie podczas wyświetlania stron w interfejsie. Aktualizacje stron mogą mieć miejsce w tych sytuacjach:- Początkowe wczytanie nowej generacji PagingData jest zakończone, niezależnie od tego, czy nowa generacja zawiera jakiekolwiek zmiany w prezentowanych elementach. Nowa generacja, która zakończy wczytywanie początkowe bez żadnych zmian, ponieważ lista jest dokładnie taka sama, nadal wywoła tę funkcję.
- Strona jest wstawiana, nawet jeśli nie zawiera żadnych nowych elementów.
- strona jest pomijana, nawet jeśli była pusta;
Wersja 3.1.0-rc01
3 listopada 2021 r.
androidx.paging:paging-*:3.1.0-rc01
został zwolniony. Wersja 3.1.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązano problem z warunkiem wyścigu i wyciekiem pamięci w funkcji .cachedIn() w przypadkach, gdy Paging wysyłał wiele zdarzeń wczytywania, gdy nie było obserwatorów, lub między momentami, gdy obserwator przełączał się na nowe dane PagingData. (Ib682e)
Wersja 3.1.0-beta01
13 października 2021 r.
androidx.paging:paging-*:3.1.0-beta01
został zwolniony. Wersja 3.1.0-beta01 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problem, w którym wiele szybkich prób dostępu do elementów mogło spowodować ich odrzucenie w ramach prefetchDistance, co powodowało zablokowanie wczytywania strony. Jest to szczególnie istotne, gdy wiele elementów jest rozmieszczonych jednocześnie w taki sposób, że priorytetem jest wczytywanie elementów w zależności od kierunku przewijania przez użytkownika. Dostęp do tych elementów jest teraz buforowany i synchronicznie priorytetyzowany, aby zapobiec ich utracie. (aosp/1833273)
Wersja 3.1.0-alpha04
29 września 2021 r.
androidx.paging:paging-*:3.1.0-alpha04
został zwolniony. Wersja 3.1.0-alpha04 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Interfejsy API
Flow<PagingData>.observable
iFlow<PagingData>.flowable
nie są już eksperymentalne. (Ie0bdd)
Poprawki błędów
- W przypadku stanu wczytywania
endOfPaginationReached
jest teraz zawszefalse
w przypadkuLoadType.REFRESH
. Wcześniej wartość endOfPaginationReached mogła byćtrue
w przypadku RemoteMediatorREFRESH
, ale nie w przypadku PagingSource. To zachowanie jest teraz konsolidowane, aby zawsze zwracaćfalse
, ponieważ nie ma sensu, aby polecenie odświeżania było terminalne. Jest to teraz opisane w ramach umowy dotyczącej interfejsu API w LoadStates. Decydując, czy paginacja została zakończona, należy zawsze kierować się wskazówkami dotyczącymi instrukcji DODAWANIA lub DODAWANIA NA POCZĄTKU. (I047b6) Stany ładowania z Paging teraz oczekują na prawidłowe wartości zarówno z PagingSource, jak i RemoteMediator, zanim wyemitują dane na dalszych generacjach. Zapobiega to wysyłaniu przez nowe generacje PagingData wartości NotLoading w CombinedLoadStates.source.refresh, jeśli była już ona ustawiona na Loading. Nowe generacje PagingData będą teraz zawsze prawidłowo rozpoczynać się od wartości Loading w stanie odświeżania zamiast w niektórych przypadkach błędnie resetować się do wartości NotLoading.
Anulowanie poprzednich generacji odbywa się teraz chętnie w przypadku nieważności / nowych generacji. Użycie funkcji .collectLatest w funkcji
Flow<PagingData>
nie powinno już być wymagane, ale nadal jest wysoce zalecane (I0b2b5, b/177351336, b/195028524).Interfejsy API prezentera
.loadStateFlow
i.addLoadStateListener
nie wysyłają już niepotrzebnie początkowegoCombinedLoadStates
, który zawsze ma stan mediatoranull
, a stan źródłaNotLoading(endOfPaginationReached = false)
. Oznacza to, że:- Jeśli używasz interfejsu RemoteMediator, stany mediatora będą zawsze wypełnione.
- Zarejestrowanie nowego listenera loadState lub nowego kolektora w
.loadStateFlow
nie spowoduje już natychmiastowego wyemitowania bieżącej wartości, jeśli nie zostanie otrzymana rzeczywista wartośćCombinedLoadStates
zPagingData
. Może się tak zdarzyć, jeśli zbierający lub słuchacz rozpocznie działanie, zanim zostanie przesłany elementPagingData
. (I1a748)
Wersja 3.1.0-alpha03
21 lipca 2021 r.
androidx.paging:paging-*:3.1.0-alpha03
został zwolniony. Wersja 3.1.0-alpha03 zawiera te commity.
Zmiany w interfejsie API
Do PagingSource dodano trzeci typ zwracany przez LoadResult, czyli LoadResult.Invalid. Gdy metoda PagingSource.load zwróci wartość LoadResult.Invalid, paging odrzuci załadowane dane i unieważni PagingSource. Ten typ zwracanych danych jest przeznaczony do obsługi potencjalnie nieprawidłowych lub nieaktualnych danych, które mogą zostać zwrócone z bazy danych lub sieci.
Jeśli na przykład do bazy danych źródłowej zostaną wpisane dane, ale PagingSource nie zostanie unieważniony na czas, może zwracać niespójne wyniki, jeśli jego implementacja zależy od niezmienności ładowanego przez niego zbioru danych (np. LIMIT OFFSET styl implementacji bazy danych). W takim przypadku zalecamy sprawdzenie, czy pobieranie nie zostało unieważnione, i zwrócenie wartości LoadResult.Invalid, co spowoduje, że Paging odrzuci wszystkie oczekujące lub przyszłe żądania załadowania do tego obiektu PagingSource i unieważni je.
Ten typ zwracanych danych jest też obsługiwany przez interfejs Paging2 API, który korzysta z interfejsu LivePagedList lub RxPagedList. Gdy używasz interfejsów PagedList z Paging2 w źródle PagingSource, lista PagedList jest natychmiast odłączana, co uniemożliwia dalsze próby wczytania danych z tej listy i powoduje unieważnienie źródła PagingSource.
LoadResult to klasa zamknięta, co oznacza, że jest to zmiana niezgodna ze źródłem, która wymaga, aby przypadki użycia bezpośrednio korzystające z wyników PagingSource.load musiały obsługiwać LoadResult.Invalid w czasie kompilacji. Na przykład użytkownicy Kotlina, którzy korzystają z exhaustive-when do sprawdzania typu zwracanego, będą musieli dodać sprawdzanie typu Invalid. (Id6bd3, b/191806126, b/192013267)
Poprawki błędów
- Funkcje zwracane przez wywołania zwrotne dotyczące unieważnienia, dodane za pomocą PagingSource.registerInvalidatedCallback lub DataSource.addInvalidatedCallback, są teraz automatycznie wywoływane, jeśli zostały zarejestrowane w źródle PagingSource / DataSource, które było już nieważne. Rozwiązano problem z konkurencyjnością, który powodował, że Paging ignorował sygnały unieważnienia i zawieszał się, gdy podano źródło, które było już nieprawidłowe podczas początkowego wczytywania. Dodatkowo wywołania zwrotne invalidate są teraz prawidłowo usuwane po wywołaniu, ponieważ są wywoływane co najwyżej raz. (I27e69)
- Przesyłanie początkowej wartości zastępczej (InitialPagedList) z nowo utworzonego strumienia PagedList, np. Klasy LivePagedListBuilder i RxPagedListBuilder nie będą już czyścić wcześniej wczytanych danych.
Wersja 3.1.0-alpha02
1 lipca 2021 r.
androidx.paging:paging-*:3.1.0-alpha02
został zwolniony. Wersja 3.1.0-alpha02 zawiera te commity.
Nowe funkcje
Dodano interfejsy API onPagesPresented listener i flow presenter, które są wywoływane natychmiast po zaktualizowaniu prezentowanych stron w interfejsie.
Te aktualizacje są synchroniczne z interfejsem użytkownika, więc możesz wywoływać metody adaptera, takie jak .snapshot czy .getItemCount, aby sprawdzić stan po wprowadzeniu aktualizacji. Zwróć uwagę, że wywołanie metody .snapshot() zostało pozostawione do wywołania wprost, ponieważ wywoływanie jej przy każdej aktualizacji może być kosztowne.
Aktualizacje strony mogą mieć miejsce w tych sytuacjach:
- Początkowe wczytanie nowej generacji PagingData jest zakończone, niezależnie od tego, czy nowa generacja zawiera jakiekolwiek zmiany w prezentowanych elementach. Przykład: Nowe pokolenie, które zakończy wczytywanie początkowe bez żadnych zmian, ponieważ lista jest dokładnie taka sama, nadal wywoła tę funkcję.
- strona jest wstawiana, nawet jeśli nie zawiera żadnych nowych elementów;
- strona jest usuwana, nawet jeśli była pusta (I272c9, b/189999634);
Poprawki błędów
- Dostęp do PagedList.dataSource z wartości początkowej utworzonej przez LivePagedList lub RxPagedList nie będzie już nieprawidłowo wywoływać IllegalStateException (I96707)
Wersja 3.1.0-alpha01
2 czerwca 2021 r.
androidx.paging:paging-*:3.1.0-alpha01
został zwolniony. Wersja 3.1.0-alpha01 zawiera te commity.
Zmiany w interfejsie API
- Zajęcia oferowane przez
paging-rxjava3
są teraz dostępne w ramach pakietuandroidx.paging.rxjava3
, aby nie wchodziły w konflikt zpaging-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 tegoPagingData
wMutableStateFlow
(np.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Korzystając z tych danych jako danych wejściowych do funkcji@Preview
, możesz wyświetlić podglądLazyPagingItems
w przypadku wywołania funkcjicollectAsLazyPagingItems()
. (I8a78d, b/194544557)
Poprawki błędów
- Dane z poziomu 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 zbierania danych asynchronicznie. Oznacza to, że dane w pamięci podręcznej będą gotowe do wyświetlenia natychmiast po początkowym sformułowaniu po przywróceniu stanu. (I97a60, b/177245496)
Wersja 1.0.0-alpha19
3 maja 2023 r.
androidx.paging:paging-compose:1.0.0-alpha19
został zwolniony. Wersja 1.0.0-alpha19 zawiera te commity.
Obsługa wszystkich układów z opóźnionym ładowaniem
Wcześniej funkcja komponowania stron udostępniała niestandardowe rozszerzenia items
i itemsIndexed
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 key
i contentType
w standardowych interfejsach API items
, które są już dostępne w przypadku LazyColumn
i LazyVerticalGrid
, 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 LazyColumn
i LazyRow
są o kilka linii dłuższe, uznaliśmy, że spójność wszystkich layoutów z opóźnionym wczytywaniem jest ważnym czynnikiem dla osób, które będą używać komponowania na stronach. Z tego powodu dotychczasowe rozszerzenia LazyListScope
zostały wycofane. (I0c459, I92c8f, b/276989796)
Zmiany w interfejsie API
- Aby ułatwić migrację do nowych interfejsów API, funkcje rozszerzenia
items
iitemsIndexed
w interfejsieLazyListScope
obsługują teraz parametrcontentType
, 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 funkcjicollectLazyPagingItems
. (I7a574, b/243182795, b/233783862)
Wersja 1.0.0-alpha16
10 sierpnia 2022 r.
androidx.paging:paging-compose:1.0.0-alpha16
został zwolniony. Wersja 1.0.0-alpha16 zawiera te commity.
Nowe funkcje
- Paging udostępnia teraz dzienniki za pomocą klasy
LazyPagingItems
, aby udostępniać informacje debugowania zebrane z PagingData. - Logi można włączyć za pomocą polecenia
adb shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE]
. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
Poprawki błędów
- Usunięto błąd konstruktora
PagingDataDiffer
, który występował podczas używania funkcjipaging-compose:1.0.0-alpha15
w wersjipaging-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
PagingDataAdapter
iAsyncPagingDataDiffer
, które przyjmująCoroutineContext
zamiastCoroutineDispatcher
. (Idc878)
Poprawki błędów
LazyPagingItems
ustawia teraz początkowyloadState
na odświeżanieLoadState.Loading
. (I55043, b/224855902)
Wersja 1.0.0-alpha14
13 października 2021 r.
androidx.paging:paging-compose:1.0.0-alpha14
został zwolniony. Wersja 1.0.0-alpha14 zawiera te zatwierdzenia.
Wersja 1.0.0-alpha13
29 września 2021 r.
androidx.paging:paging-compose:1.0.0-alpha13
został zwolniony. Wersja 1.0.0-alpha13 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Funkcja
LazyPagingItems.snapshot()
została zastąpiona właściwościąLazyPagingItems.itemSnapshotList
(Ie2da8). - Wycofany element
LazyPagingItems.getAsState()
został usunięty (Ie65e4)
Wersja 1.0.0-alpha12
21 lipca 2021 r.
androidx.paging:paging-compose:1.0.0-alpha12
został zwolniony. Wersja 1.0.0-alpha12 zawiera te commity.
Zmiany w interfejsie API
- Parametry
items(lazyPagingItems)
iitemsIndexed(lazyPagingItems)
używane do łączenia funkcji Paging zLazyColumn/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żyjlazyPagingItems[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 wersji1.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 zLoading
naNotLoading
następowało dopiero po osiągnięciu stanuNotLoading
w przypadku zarówno pośrednika, jak i źródła, co gwarantuje, że aktualizacja zdalna została zastosowana. (I65619)
Wersja 1.0.0-alpha03
2 grudnia 2020 r.
androidx.paging:paging-compose:1.0.0-alpha03
został zwolniony. Wersja 1.0.0-alpha03 zawiera te commity.
- Zaktualizowano, aby dopasować do wersji Compose 1.0.0-alpha08.
Wersja 1.0.0-alpha02
11 listopada 2020 roku
androidx.paging:paging-compose:1.0.0-alpha02
został zwolniony. Wersja 1.0.0-alpha02 zawiera te commity.
Zmiany w interfejsie API
- Do metod
LazyPagingItem
dodano metody.peek()
,.snapshot()
,.retry()
i.refresh()
, które udostępniają te same funkcje co metodyAsyncPagingDataDiffer
/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 stron z 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.
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 przezLivePagedList
lubRxPagedList
nie będzie już nieprawidłowo wywoływać wyjątku IllegalStateException (I96707).
Wersja 3.0.0
Wersja 3.0.0
5 maja 2021 roku
androidx.paging:paging-*:3.0.0
został zwolniony. Wersja 3.0.0 zawiera te commity.
Najważniejsze funkcje wersji 3.0.0
Większość dotychczasowych interfejsów API z wersji 2.x.x została wycofana na rzecz nowych interfejsów Paging 3, aby wprowadzić te ulepszenia:
- pierwszorzędna obsługa coroutines i Flow w Kotlinie;
- Pomoc dotycząca anulowania
- Wbudowane sygnały stanu wczytywania i błędów
- Funkcja ponownego próbowania i odświeżania
- Wszystkie 3 podklasy DataSource zostały połączone w jedną klasę PagingSource.
- niestandardowe przekształcenia strony, w tym wbudowane przekształcenie do dodawania separatorów;
- Wczytuję nagłówki i stopki stanu
Wersja 3.0.0-rc01
21 kwietnia 2021 r.
androidx.paging:paging-*:3.0.0-rc01
został zwolniony. Wersja 3.0.0-rc01 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problem, który polegał na tym, że Paging czasami wysyłał do RecyclerView zdarzenia no-op differ, co mogło powodować przedwczesne wywołanie niektórych słuchaczy. (Ic507f, b/182510751)
Wersja 3.0.0-beta03
24 marca 2021 r.
androidx.paging:paging-*:3.0.0-beta03
został zwolniony. Wersja 3.0.0-beta03 zawiera te commity.
Poprawki błędów
- Zmieniliśmy sposób obsługi placeholderów podczas ponownego wczytywania listy, aby zapobiec nieoczekiwanym przeskokom w RecyclerView. Więcej informacji znajdziesz w pliku NullPaddedDiffing.md. (If1490, b/170027529, b/177338149)
- Różne konstruktory PagedList (stara ścieżka zgodności) nie wywołują już nieprawidłowo synchronicznie funkcji
DataSource.Factory.create()
w wątku głównym, gdy wywoływana jest funkcja.build()
. (b/182798948)
Wersja 3.0.0-beta02
10 marca 2021 r.
androidx.paging:paging-*:3.0.0-beta02
został zwolniony. Wersja 3.0.0-beta02 zawiera te commity.
Zmiany w interfejsie API
- Rozszerzenia Rx3 są teraz prawidłowo propagowane
@ExperimentalCoroutinesApi
Wymóg wyrażenia zgody. Wcześniej były one oznaczane w metodzie@get
, która jest ignorowana przez kompilator Kotlina z powodu tego: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)
Poprawki błędów
- Wdrożenie ograniczeń dotyczących publicznego używania eksperymentalnych interfejsów API (I6aa29, b/174531520)
- Naprawiliśmy błąd, który powodował, że
PagingState
zawsze przyjmowało wartośćnull
, gdy wywoływano odświeżanie zdalne. - Usunięto błąd, który powodował, że puste strony zwracane przez PagingSource mogły uniemożliwiać ponowne pobieranie danych przez Paging, aby spełnić wymagania funkcji
prefetchDistance
, co powodowało „zawieszanie się” Paging.
Wersja 3.0.0-beta01
10 lutego 2021 r.
androidx.paging:paging-*:3.0.0-beta01
został zwolniony. Wersja 3.0.0-beta01 zawiera te commity.
Zmiany w interfejsie API
- Opakowania Rx2 i Rx3 zawierają teraz eksperymentalne adnotacje, od których zależą. Jeśli używasz opakowań zgodności Rx w paging-rxjava2 lub paging-rxjava3, musisz teraz dodać adnotacje do ich użycia za pomocą
@OptIn(ExperimentalCoroutinesApi::class)
(Ib1f9d).
Poprawki błędów
- Naprawiono błąd
IndexOutOfBoundsException: Inconsistency detected
, który czasami występował podczas korzystania z interfejsów API w wersji 2DataSource
w ścieżkach zgodności - Wywołanie
isInvalid
podczas inicjowaniaDataSource
, 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łądIllegalStateException
spowodowany dostępem do bazy danych w wątku głównym podczas korzystania z implementacjiPagingSource
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 prostunull
, alegetRefreshKey()
powinna mieć rzeczywistą implementację zwracającą klucz na podstawie bieżącej pozycji przewijania użytkownika, co pozwala usłudze Paging kontynuować wczytywanie, aby w miarę możliwości mieścić się w obszarze widoku za pomocąPagingState.anchorPosition
. (I4339a) InvalidatingPagingSourceFactory
ma teraz klasę końcową (Ia3b0a).- Umożliwienie konfigurowania zachowania separatora terminala (nagłówka / stopki) za pomocą dodatkowego opcjonalnego parametru SeparatorType. Do wyboru masz 2 opcje:
FULLY_COMPLETE
– dotychczasowe działanie; przed dodaniem separatorów końcowych poczekaj, aż zarówno PagingSource, jak i RemoteMediator odnotują osiągnięcie końca strony. Jeśli nie używasz interfejsu RemoteMediator, stan wczytywania zdalnego jest ignorowany. Jest to przydatne przede wszystkim, gdy chcesz wyświetlać separatory sekcji tylko wtedy, gdy sekcja jest w pełni załadowana, w tym pobierana ze źródła zewnętrznego, np. sieci.SOURCE_COMPLETE
– czekaj tylko na oznaczenie przez PagingSource końca obsługiwanej strony, nawet jeśli używany jest RemoteMediator. Dzięki temu nagłówki i stopki są wyświetlane synchronicznie z pierwszym wczytywaniem, co eliminuje konieczność przewijania, aby zobaczyć separatory terminala. (Ibe993, b/174700218)
Poprawki błędów
- Usunęliśmy rzadki wyciek pamięci, który występował, gdy PagingSource został unieważniony, zanim PageFetcher mógł zacząć wczytywać dane z tego obiektu. (I9606b, b/174625633)
Wersja 3.0.0-alpha12
13 stycznia 2021 r.
androidx.paging:paging-*:3.0.0-alpha12
został zwolniony. Wersja 3.0.0-alpha12 zawiera te commity.
Zmiany w interfejsie API
- InvalidatingPagingSourceFactory nie jest już klasą abstrakcyjną, ponieważ nigdy nie miała abstrakcyjnych metod. (I4a8c4)
- Dodano przeciążenie metody .cachedIn(), która dla użytkowników Javy przyjmuje parametr ViewModel zamiast Lifecycle lub CoroutineScope. (I97d81, b/175332619)
- Zezwól wywołującym w Javie na używanie operacji przetwarzania PagingData w sposób asynchroniczny, przyjmując Executora jako argument operatora transform. Z wszystkich operatorów transformacji -Sync usunięto sufiks -Sync, a użytkownicy coroutine w Kotlinie będą musieli usunąć niejednoznaczność, wywołując funkcję rozszerzenia, która zamiast tego akceptuje blok zawieszania.
Wszystkie operatory funkcji PagingData zostały przeniesione do rozszerzeń w ramach statycznej klasy PagingDataTransforms. Użytkownicy Java będą musieli wywoływać je za pomocą statycznych helperów, np.
PagingDataTransforms.map(pagingData, transform)
Użytkownicy Kotlina mogą użyć tej samej składni, ale muszą zaimportować funkcję. (If6885, b/172895919)
Poprawki błędów
- Naprawiliśmy błąd polegający na tym, że funkcja
RemoteMediator.load()
nie była wywoływana w funkcjiadapter.refresh()
, jeśli koniec podziału na strony został już osiągnięty.
Wersja 3.0.0-alpha11
16 grudnia 2020 roku
androidx.paging:paging-*:3.0.0-alpha11
został zwolniony. Wersja 3.0.0-alpha11 zawiera te commity.
Nowe funkcje
- Dodaliśmy obsługę zapisanego stanu w przypadku tych podstawowych zastosowań: (pełna obsługa, zwłaszcza w przypadku warstwowego źródła, jest nadal opracowywana):
- przepływ jest przechowywany w pamięci podręcznej, a aplikacja nie jest zabijana (np. przepływ jest przechowywany w pamięci podręcznej w ramach modelu widoku, a działalność jest ponownie tworzona w ramach procesu);
- Źródło stron jest zliczane, a miejsca substytucyjne są włączone, ale układ nie jest rozłożony.
Zmiany w interfejsie API
- Interfejs API
PagingSource.getRefreshKey()
jest teraz stabilny (I22f6f, b/173530980). - Funkcja
PagingSource.invalidate
nie jest już dostępna. Jeśli chcesz otrzymywać powiadomienia o unieważnieniu, zamiast zastąpić metodę invalidate, użyj metody registerInvalidatedCallback. (I628d9, b/173029013, b/137971356) - Pager ma teraz 1 eksperymentalny konstruktor obok zwykłych konstruktorów, a nie udostępnia eksperymentalnych interfejsów API w interfejsach publicznych za pomocą adnotacji z opcją włączenia. (I9dc61, b/174531520)
- Zaktualizowano właściwości ułatwiające korzystanie z usługi:
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
,CombinedLoadStates.append
, aby przejście zLoading
naNotLoading
następowało dopiero po osiągnięciu stanuNotLoading
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ównePagingConfig.pageSize
, z wyjątkiem wywołania wczytywania początkowego, w którym jest równePagingConfig.initialLoadSize
.Jeśli testujesz źródło danych Paging2 bez użycia Pagera lub PagedList,
pageSize
może nie pasować doPagingConfig.pageSize
, jeśli ustawiasz teżinitialLoadSize
. Jeśli jest to ważne w przypadku Twoich testów, użyj zamiast tego Pager/PagedList, który wewnętrznie ustawi odpowiednią wartość PageSize dla metod ładowania DataSource. (I98ac7, b/149157296)
Poprawki błędów
- Rozwiązaliśmy problem z awarią spowodowany wyjątkiem IllegalStateException podczas używania separatorów z ustawioną wartością PagingConfig.maxSize. (I0ed33, b/174787528)
- Usunęliśmy błąd, który powodował, że stan wczytywania w przypadku metod DODAJ NA POCZĄTKU i DODAJ NA KONIEC nie był aktualizowany do wartości
NotLoading(endOfPaginationReached = true)
natychmiast po początkowym wczytaniu, jeśli ustawiono RemoteMediator (I8cf5a). - Naprawiliśmy błąd, który powodował, że interfejsy API po stronie prezentera, takie jak .snapshot(), .peek() itp., zwracały poprzednią (nieaktualną) listę w aktualizacjach ListUpdateCallback.
- Naprawiono błąd polegający na tym, że operatory separatorów nie dodawały nagłówków ani stopek podczas używania z RemoteMediator.
- Usunęliśmy błąd polegający na tym, że aktualizacja LoadState do NotLoading w przypadku RemoteMediator utknęła w stanie Loading.
- Naprawiono błąd, który powodował, że interfejs API zgodności z Paging2.0,
.asPagingSourceFactory()
, mógł spowodować zainicjowanie podrzędnegoDataSource
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
dataRefreshFlow
idataRefreshListener
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 }
Poprawki błędów
- Wartość endOfPaginationReached dla RemoteMediator
REFRESH
jest teraz prawidłowo rozpowszechniana w ramach aktualizacji LoadState i zapobiega uruchamianiu funkcji zdalnychAPPEND
iPREPEND
. (I94a3f, b/155290248) - Wyświetlanie pustej listy z powodu pustej strony początkowej lub intensywnego filtrowania nie będzie już uniemożliwiać wczytywania
PREPEND
lubAPPEND
. (I3e702, b/168169730) - Rozwiązaliśmy problem polegający na tym, że funkcja
getRefreshKey
nie jest wywoływana w kolejnych generacjach PagingSource, gdy unieważnienia występują szybko. (I45460, b/170027530)
Darowizna zewnętrzna
- Dodano nową abstrakcyjną klasę InvalidatingPagingSourceFactory z interfejsem API
.invalidate()
, który przekazuje sygnał o utracie ważności wszystkim generowanym przez siebie obiektom PagingSource. Dziękujemy @claraf3! (Ie71fc, b/160716447)
Znane problemy
- Nagłówki i stopki z transformacji .insertSeparators() mogą nie pojawić się od razu, gdy używasz RemoteMediator b/172254056
- Użycie RemoteMediator może spowodować zablokowanie zdalnego
LoadState
, jeśli unieważnienie iPagingSource.load(LoadParams.Refresh(...))
zostaną zakończone, zanimRemoteMediator.load()
zwróci wartość b/173717820
Wersja 3.0.0-alpha09
11 listopada 2020 roku
androidx.paging:paging-*:3.0.0-alpha09
został zwolniony. Wersja 3.0.0-alpha09 zawiera te commity.
Zmiany w interfejsie API
- Całkowicie wycofać metody dataRefreshFlow / Listener za pomocą klauzuli replaceWith. (I6e2dd)
Poprawki błędów
- Rozwiązanie problemu z wyrzucaniem wyjątku
IllegalArgumentException
podczas używania separatorów z RemoteMediator i wyzwolenia anulowania, gdy nadal trwa wczytywanie zdalne, które zwróci endOfPagination (I3a260)
Wersja 3.0.0-alpha08
28 października 2020 r.
androidx.paging:paging-*:3.0.0-alpha08
został zwolniony. Wersja 3.0.0-alpha08 zawiera te commity.
Zmiany w interfejsie API
- Wersje
DataSource.InvalidatedCallback
w Kotlinie i w Javie zostały połączone przez umożliwienie konwersji SAM w Kotlinie za pomocą interfejsu funkcyjnego (dostępnego w Kotlinie 1.4). Rozwiązaliśmy też błąd polegający na tym, że wersja Kotlina wywołania zwrotnego invalidate nie była wywoływana po przekształceniu przez.map
lub.mapByPage
. (I1f244, b/165313046)
Poprawki błędów
- Znacznie ulepszono obsługę przewijania w ViewPager. W szczególności usługa Paging nie będzie już anulować wywołania
RemoteMediator#load
z powodu unieważnienia strony. Dopóki żądanie odświeżenia nie zostanie zrealizowane, nie będzie też wysyłać żądania dodawania ani dołączania danych (jeśli jest wymagane). (I6390b, b/162252536) - Sprawdzanie lint interfejsu API pod kątem braku metody gettera pasującego do Buildera jest włączone w androidx (I4bbea, b/138602561).
- Naprawiono błąd, który powodował, że pomocnicze klasy
.withLoadState*
ConcatAdapter
ulegały awarii z powodu powiadomienia RecyclerView z wątku w tle (I18bb5, b/170988309) - Naprawiono błąd, który powodował, że wczytywanie bardzo małej, niepustej strony czasami uniemożliwiało prawidłowe wywołanie wczytywania wstępnego.Iffda3 b/169259468
Wersja 3.0.0-alpha07
1 października 2020 roku
androidx.paging:paging-*:3.0.0-alpha07
został zwolniony. Wersja 3.0.0-alpha07 zawiera te commity.
Zmiany w interfejsie API
- Operatory oparte na Guavie, które korzystają z interfejsu PagingData, obsługują teraz parametr Executor do kontrolowania kontekstu wykonania. (Id4372)
Poprawki błędów
- Naprawiono wyjątek IndexOutOfBounds zgłaszany w RemoteMediatorze z powodu warunku wyścigu. (I00b7f, b/165821814)
- Naprawiliśmy warunek wyścigu w konwersji DataSource -> PagingSource, który mógł powodować, że wynikowy PagingSource ignorował sygnały nieważności pochodzące z DataSource.
- Rozwiązaliśmy problem z logiką pobierania strony, który czasami powodował, że nie można było pobrać nowych generacji PagingSource, dopóki nie wywołano metody PagingDataAdapter.refresh().
- Rozwiązaliśmy problem, który powodował, że pozycja przewijania była czasami tracona podczas używania źródła danych przekonwertowanego na źródło strony (np. wygenerowane przez Room) w połączeniu z interfejsem RemoteMediator.
Darowizna zewnętrzna
- Dziękujemy użytkownikowi @simonschiller za dodanie do PagingData operatorów asynchronicznych przekształceń RxJava2, RxJava3 i Guava.
Wersja 3.0.0-alpha06
2 września 2020 r.
androidx.paging:paging-*:3.0.0-alpha06
został zwolniony. Wersja 3.0.0-alpha06 zawiera te commity.
Zmiany w interfejsie API
UnsupportedOperationException
z bardziej czytelnymi komunikatami dotyczącymi braku obsługi stabilnych identyfikatorów. Teraz, gdy wywoływana jest funkcjaPagingDataAdapter.setHasStableIds
, zgłaszany jest błąd. (Ib3890, b/158801427)
Poprawki błędów
- Funkcja insertSeparators nie wyklucza już pustych stron, dzięki czemu prezenter może uwzględniać odstęp domyślny nawet wtedy, gdy wstawiono wiele pustych stron. (I9cff6, b/162538908)
Wersja 3.0.0-alpha05
19 sierpnia 2020 r.
androidx.paging:paging-*:3.0.0-alpha05
został zwolniony. Wersja 3.0.0-alpha05 zawiera te commity.
Poprawki błędów
- Strony są teraz poprawnie pobierane z pamięci podręcznej, nawet jeśli wyświetlane dane są mocno przefiltrowane
- Zwracanie wartości
LoadResult.Error
podczas ponownego wczytywania nie powoduje już nieprawidłowego ponownego wywoływania prób dostępu do elementu.
Darowizna zewnętrzna
- Dziękujemy Clarze F. za pomoc w usuwaniu testów. (549612)
Wersja 3.0.0-alpha04
5 sierpnia 2020 r.
androidx.paging:paging-*:3.0.0-alpha04
został zwolniony. Wersja 3.0.0-alpha04 zawiera te commity.
Zmiany w interfejsie API
- Dodano interfejs API
peek()
do interfejsówAsyncPagingDataDiffer
iPagingDataAdapter
, aby umożliwić dostęp do prezentowanych danych bez uruchamiania wczytywania strony. (I38898, b/159104197) - Do interfejsu API
PagingDataAdapter
iAsyncPagingDataDiffer
dodaliśmy interfejs APIsnapshot()
, aby umożliwić pobieranie prezentowanych produktów bez wywoływania pobierania strony. (I566b6, b/159104197) - Dodano konstruktor
PagingData.from(List<T>)
, aby umożliwić wyświetlanie list statycznych, które można łączyć z ogólnym przepływem danych PagingData, aby wyświetlać listy statyczne w określonych stanach, np. przed zakończeniem początkowego odświeżania lub po prostu w celu testowania przekształceń. (Id134d) - Wycofanie interfejsów API dataRefresh Flow / Listener, ponieważ miały one służyć do udostępniania stanu prezentowanych elementów w przypadku odświeżania, ale dzięki ulepszeniu czasu wywołania zwrotnego loadState Flow / Listener oraz właściwości itemCount są zbędne (Ia19f3)
- Dodano pakiety zgodności RxJava3 dla
PagingSource
iRemoteMediator
(I49ef3, b/161480176).
Poprawki błędów
PositionalDataSource
przekształcone wPagingSource
za pomocą pomocnikatoPagingSourceFactory
, w tymPagingSource
wygenerowane przez Room, są teraz prawidłowo oznaczone, aby umożliwić przeskoki. (I3e84c, b/162161201)- Naprawiono błąd, który powodował, że używanie synchronicznego wariantu submitData czasami prowadziło do kolizji powodującej błąd
ClosedSendChannelException
(I4d702, b/16019222)
Darowizna zewnętrzna
- Dziękujemy Zacowi Sweersowi za dodanie w imieniu Slacka owijatek zgodności RxJava3. (I49ef3, b/161480176)
Wersja 3.0.0-alpha03
22 lipca 2020 r.
androidx.paging:paging-*:3.0.0-alpha03
został zwolniony. Wersja 3.0.0-alpha03 zawiera te commity.
Zmiany w interfejsie API
- Konstruktor PagingState jest teraz publiczny, co powinno ułatwić testowanie implementacji funkcji getRefreshKey() (I8bf15)
- ukryto w Java warianty funkcji mapowania DataSource w Kotlinie, aby rozwiązać problem niejednoznaczności między oryginalnymi a wersjami Kotlina; (If7b23, b/161150011)
- Zbędne interfejsy API przeznaczone dla użytkowników Kotlina zostały oznaczone jako @JvmSynthetic (I56ae5).
- Dodano przeciążenia konstruktora LoadResult.Page, w których domyślne wartości parametrów itemsBefore i itemsAfter to COUNT_UNDEFINED (I47849).
- Istniejące operatory PagingData akceptują teraz metody zawieszania i wprowadziliśmy dla użytkowników Javy nowe operatory mapSync, flatMapSync i filterSync, które nie zawieszają. Istniejące metody przekształcania zostały przeniesione do funkcji rozszerzenia, więc użytkownicy Kotlina będą musieli je zaimportować. (I34239, b/159983232)
Poprawki błędów
- Źródła stron (i źródła danych pozycyjnych) w ramach pokoju będą teraz wyświetlać separator wiodący na pierwszej stronie, dzięki czemu użytkownik nie będzie musiał przewijać, aby go zobaczyć. (I6f747, b/160257628)
- Dostęp do elementów w miejscach do wklejenia teraz prawidłowo powoduje wczytywanie PagingSource, dopóki nie zostanie zwrócona strona, która spełnia wymagany indeks po przekształceniu przez funkcję PagingData.filter() (I95625, b/158763195)
- Naprawiono błąd, który powodował, że przewijanie po zwróceniu błędu przez PagingSource mogło uniemożliwić ponowne wywołanie metody PagingDataAdapter.retry(). (I1084f, b/160194384)
- Rozwiązanie problemu polegającego na tym, że po usunięciu strony mogły nie wczytywać się strony, mimo że dostęp do elementu był w zakresie prefetchDistance (Ie95ae, b/160038730)
- Ustawienie PagingConfig.maxSize nie włącza już placeholderów po zdarzeniu usunięcia (I2be29, b/159667766)
Wersja 3.0.0-alpha02
24 czerwca 2020 r.
androidx.paging:paging-*:3.0.0-alpha02
został zwolniony. Wersja 3.0.0-alpha02 zawiera te commity.
Zmiany w interfejsie API
- Dodano przeciążenia konstruktora
PagingConfig
z powszechnie używanymi wartościami domyślnymi (I39c50, b/158576040) - Dodano przeciążenia konstruktorów
PagingDataAdapter
iAsyncPagingDataDiffer
z powszechnie używanymi wartościami domyślnymi (Ie91f5) - Interfejsy API adaptera,
dataRefreshFlow
idataRefreshListener
przekazują teraz wartość logiczną, aby sygnalizować, czyPagingData
jest pusty (I6e37e, b/159054196) - Dodano interfejsy API RxJava i Guava dla RemoteMediator – RxRemoteMediator i ListenableFutureRemoteMediator.
- Dodaliśmy do PagingState pomocnicze funkcje umożliwiające dostęp do typowych elementów, takich jak
isEmpty()
ifirstItemOrNull()
(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ówPagingData
, gdy jest wywoływana po wersjisubmitData
, 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
- Pierwszorzędna obsługa coroutines i Flow w Kotlinie.
- Obsługa asynchronicznego ładowania za pomocą funkcji zawieszania coroutines, RxJava Single lub prymitywów Guava ListenableFuture.
- Wbudowane sygnały stanu wczytywania i błędów do tworzenia responsywnego interfejsu użytkownika, w tym funkcji ponownego próbowania i odświeżania.
- Ulepszenia warstwy repozytorium
- Uproszczony interfejs źródła danych
- Uproszczone strony z bazy danych i sieci
- Pomoc dotycząca anulowania
- Ulepszenia warstwy prezentacji
Znane problemy
- Dokumentacja Javadoc dla strony 3 nie jest jeszcze dostępna. W międzyczasie możesz korzystać z przewodników podanych powyżej lub z dokumentacji Kotlina. (b/158614050)
Wersja 2.1.2
Wersja 2.1.2
18 marca 2020 r.
androidx.paging:paging:2.1.2
został zwolniony. Wersja 2.1.2 zawiera te komity w porównaniu z 2.1.0.
Poprawki błędów
- Naprawiono błąd
IndexOutOfBoundsException
występujący w rzadkich przypadkach podczas konwertowania pozycji podczas unieważniania.
Problem z wersją
Wersja
2.1.1
strony z przekierowaniami została nieprawidłowo opublikowana z nieprawidłowo skonfigurowanej gałęzi, co spowodowało ujawnienie częściowo zaimplementowanych interfejsów API i funkcji, które pojawią się w przyszłej wersji.Paging
2.1.2
zawiera poprawkę dotyczącą wyśrodkowania ładowania, która została pierwotnie wydana w wersji 2.1.1, ale tym razem została poprawnie wybrana spośród wersji 2.1.0. Jeśli używasz obecnie wersji 2.1.1, zdecydowanie zalecamy uaktualnienie do tej wersji.
Wersja 2.1.1
Wersja 2.1.1
18 grudnia 2019 r.
androidx.paging:paging-*:2.1.1
został zwolniony. Wersja 2.1.1 zawiera te zatwierdzenia:
Poprawki błędów
- Ciągłe wstępne wczytywanie z PositionalDataSource jest teraz wyśrodkowane wokół ostatniego dostępu, gdy obiekty zastępcze są wyłączone
Wersja 2.1.0
Wersja 2.1.0
25 stycznia 2019 r.
Strony 2.1.0
są publikowane bez zmian w porównaniu z wersją 2.1.0-rc01
.
Wersja 2.1.0-rc01
6 grudnia 2018 r.
Strony 2.1.0-rc01
są publikowane bez zmian w porównaniu z wersją 2.1.0-beta01
.
Wersja 2.1.0-beta01
1 listopada 2018 r.
Strony 2.1.0-beta01
są publikowane bez zmian w porównaniu z wersją 2.1.0-alpha01
.
Wersja 2.1.0-alpha01
12 października 2018 r.
W wersji 2.1.0-alpha01
dodano 2 ważne funkcje: pomijanie stron i biblioteki rozszerzeń KTX dla każdego artefaktu. Dodano też kilka innych zmian w interfejsie API i poprawki błędów.
Zmiany w interfejsie API
- Dodano
PagedList.Config.Builder.setMaxSize()
, aby ograniczyć liczbę elementów wczytanych do pamięci. - Dodano
androidx.paging.Config()
jako alternatywę dlaPagedList.Config.Builder
w języku Kotlin - Dodano
androidx.paging.PagedList()
jako alternatywę dlaPagedList.Builder
w języku Kotlin - Dodano
DataSourceFactory.toLiveData()
jako alternatywę dlaLivePagedListBuilder
w języku Kotlin - Dodano
DataSourceFactory.toObservable()
itoFlowable()
jako alternatywy dla funkcjiRxPagedListBuilder
w Kotlinie - Dodano
AsyncPagedListDiffer.addPagedListListener()
, aby słuchać, gdy PagedList jest zamieniany. b/111698609 - Dodano wariant
PagedListAdapter.onCurrentListChanged()
, który spełnia wymagania starej i nowej listy. Wcześniejszy wariant został wycofany. - Dodano warianty
PagedListAdapter/AsyncPagedListDiffer.submitList()
, które wywołują dodatkową funkcję wywołania zwrotnego, która jest wywoływana po wyświetleniu listy stron po porównaniu. Umożliwia to synchronizowanie wymiany PagedList z innymi aktualizacjami interfejsu użytkownika. b/73781068 PagedList.getLoadedCount()
dodano, aby poinformować, ile elementów znajduje się w pamięci. Pamiętaj, że jeśli zaimki są wyłączone, zwracana wartość zawsze wynosi.size()
.
Poprawki błędów
- Rozwiązano problem z konkurencją podczas porównywania, jeśli listy są używane ponownie b/111591017
- Funkcja
PagedList.loadAround()
zwraca teraz błądIndexOutOfBoundsException
, 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, gdyPagedListAdapter
iAsyncPagedListDiffer
nie mogły przekazać sygnału o przenoszeniu zdarzeń. b/110711937
Zależności sprzed AndroidX
W przypadku wersji Paging, które pojawiły się przed Androidem X, uwzględnij te zależności:
dependencies {
def paging_version = "1.0.0"
implementation "android.arch.paging:runtime:$paging_version"
// alternatively - without Android dependencies for testing
testImplementation "android.arch.paging:common:$paging_version"
// optional - RxJava support
implementation "android.arch.paging:rxjava2:$paging_version"
}
Wersja 1.0.1
Wersja 1.0.1
26 czerwca 2018 r.
Paging 1.0.1
został wydany z jednym poprawką błędu w wersji runtime
. Zdecydowanie zalecamy używanie 1.0.1
ze względu na stabilność. Wersja Paging RxJava2 1.0.1
została również wydana i jest identyczna z wersją 1.0.0-rc1
.
Poprawki błędów
- Rozwiązaliśmy problemy z awariami, które występowały, gdy
PagedListAdapter
iAsyncPagedListDiffer
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 Observable
i Flowable
, 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 artefaktuandroid.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()
nasetFetchExecutor()
(w elementachPagedList.Builder
iLivePagedListBuilder
)Nazwa
setMainThreadExecutor()
została zmieniona nasetNotifyExecutor()
(w elemenciePagedList.Builder
).
Ustawienie członkostwa
PagedList.mCallbacks
jako prywatnego zostało naprawione.
Poprawki błędów
LivePagedListBuilder
inicjuje początkowePagedList
w wyznaczonym wykonawcy, a nie w poolu wątków IO komponentów Arch.Naprawiono zachowanie unieważnienia w wewnętrznych obudowach
DataSource
(używanych do implementacjiDataSource.map
, a także wczytywaniaPositionalDataSource
z wyłączonymi miejscem na dane) b/77237534
Wersja 1.0.0-alpha7
21 marca 2018 r.
Funkcja przekierowywania 1.0.0-alpha7
została wydana razem z cyklem życia 1.1.1
. Funkcja Paging alpha7 zależy od przeniesienia wspomnianej powyżej klasy Function
, dlatego musisz zaktualizować zależność lifecycle:runtime
na android.arch.lifecycle:runtime:1.1.1
.
Paging alpha7
ma być ostatnią wersją przed wydaniem wersji beta.
Zmiany w interfejsie API
- Obiekty
DataSource.LoadParams
mają teraz publiczny konstruktor, a obiektyDataSource.LoadCallback
są abstrakcyjne. Umożliwia to owinięcieDataSource
lub bezpośrednie przetestowanieDataSource
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 przezDataSource
.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 elementuLivePagedListProvider
. - 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 funkcjiPositionalDataSource
, 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