Paging
Ta tabela zawiera listę wszystkich artefaktów w grupie androidx.paging.
| Artefakt | Wersja stabilna | Wersja kandydująca do publikacji | Wersja beta | Wersja alfa |
|---|---|---|---|---|
| paging-* | 3.5.1 | - | - | - |
| paging-compose | 3.5.1 | - | - | - |
Deklarowanie zależności
Aby dodać zależność od biblioteki Paging, musisz dodać do projektu repozytorium Maven Google. Więcej informacji znajdziesz w artykule Repozytorium Maven Google.
Dodaj zależności dotyczące potrzebnych artefaktów w pliku build.gradle aplikacji lub modułu:
Groovy
dependencies { def paging_version = "3.5.1" implementation "androidx.paging:paging-runtime:$paging_version" // alternatively - without Android dependencies for tests testImplementation "androidx.paging:paging-common:$paging_version" // optional - RxJava2 support implementation "androidx.paging:paging-rxjava2:$paging_version" // optional - RxJava3 support implementation "androidx.paging:paging-rxjava3:$paging_version" // optional - Guava ListenableFuture support implementation "androidx.paging:paging-guava:$paging_version" // optional - Jetpack Compose integration implementation "androidx.paging:paging-compose:3.5.1" }
Kotlin
dependencies { val paging_version = "3.5.1" implementation("androidx.paging:paging-runtime:$paging_version") // alternatively - without Android dependencies for tests testImplementation("androidx.paging:paging-common:$paging_version") // optional - RxJava2 support implementation("androidx.paging:paging-rxjava2:$paging_version") // optional - RxJava3 support implementation("androidx.paging:paging-rxjava3:$paging_version") // optional - Guava ListenableFuture support implementation("androidx.paging:paging-guava:$paging_version") // optional - Jetpack Compose integration implementation("androidx.paging:paging-compose:3.5.1") }
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.
Prześlij opinię
Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli odkryjesz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nową kartę, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Aby oddać głos na istniejący problem, kliknij przycisk gwiazdki.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Wersja 3.5
Wersja 3.5.1
12 sierpnia 2026 r.
Publikacja androidx.paging:paging-*:3.5.1 Wersja 3.5.1 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem z nieprawidłowym podawaniem przez
PagingSource.getRefreshKeyzbyt dużegoanchorPositionpodczas odświeżania strony z separatorami podczas przewijania do elementów zastępczych. (I475f0, b/516565503)
Wersja 3.5.0
6 maja 2026 r.
Publikacja androidx.paging:paging-*:3.5.0 Wersja 3.5.0 zawiera te zmiany.
Ważne zmiany od wersji 3.4.0:
Dodano operator
Flow<PagingData>.asItemSnapshotListFlow, aby przekształcićFlow<PagingData>wFlow<ItemSnapshotList>. Oznacza to, że do wczytanych danych można teraz uzyskać dostęp poza warstwą interfejsu, co pozwala łączyćFlow<ItemSnapshotList>z innymi źródłami danych, buforować i modyfikować dane podzielone na strony lokalnie lub udostępniać dane podzielone na strony jako część stanu interfejsu i nie tylko.Dodaliśmy funkcje rozszerzeń
Pager.appendiPager.prepend, które umożliwiają ręczne wczytywanie większej ilości danych bez przewijania.Dodano funkcje rozszerzenia
Pager.refreshiPaging.retry, które umożliwiają odzyskiwanie danych po błędach wczytywania podczas korzystania z interfejsuasItemSnapshotListFlowAPI.
Wersja 3.5.0-rc01
22 kwietnia 2026 r.
Publikacja androidx.paging:paging-*:3.5.0-rc01 Wersja 3.5.0-rc01 zawiera te zmiany.
Bez zmian
- W porównaniu z wersją
3.5.0-beta01nie ma znaczących zmian.
Wersja 3.5.0-beta01
8 kwietnia 2026 r.
Publikacja androidx.paging:paging-*:3.5.0-beta01 Wersja 3.5.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Interfejs
Flow<PagingData>.asStateAPI został zmieniony naFlow<PagingData>.asItemSnapshotListFlow(I0dc11, b/496548025).
Wersja 3.5.0-alpha01
11 marca 2026 r.
Publikacja androidx.paging:paging-*:3.5.0-alpha01 Wersja 3.5.0-alpha01 zawiera te zmiany.
Nowe funkcje
Artefakt
paging-commonzawiera teraz nowy operator przepływuasStatewFlow<PagingData>, który przekształca go wFlow<ItemSnapshotList>. Dzięki temu możesz korzystać z takich funkcji jak:- łączyć przepływ
ItemSnapshotListz innymi źródłami danych, - udostępnianie procesu wielu osobom zbierającym dane bez
cachedIn - lokalne buforowanie danych podzielonych na strony,
- modyfikować dane stronicowane w pamięci,
- udostępniać dane podzielone na strony w ramach stanu interfejsu,
// In your ViewModel val pager = Pager(pagingConfig, pagingSourceFactory) val pagerFlow = pager.flow.asState() // alterantively convert the flow to a SharedFlow val pagerFlow = pager.flow.asState().stateIn() // In presenter layer val snapshotFlow = viewModel.pagerFlow.collectAsStateWithLifecycle(initialList) val snapshot = itemsFlow.value LazyColumn { items(items = snapshot.items) { ... } }- łączyć przepływ
Artefakt
paging-commonzawiera też interfejsy APIPager.appendiPager.prepend, które umożliwiają ręczne wywoływanie wczytywania na obu końcach wczytanych elementów.- W połączeniu z tagiem
paging-runtimelubpaging-composezapewnia alternatywę dla przewijania w celu wczytania większej ilości danych. - W przypadku używania nowego interfejsu
asStateAPI jest to jedyny sposób na wczytanie większej ilości danych.
LazyColumn { item { /** * Load more items when users scroll near the top of loaded items. */ LaunchedEffect(viewModel) { viewModel.prepend() } } items(snapshot.items) { item -> Text("Item: $item") } item { /** * Load more items when users scroll near the bottom of loaded items. */ LaunchedEffect(viewModel) { viewModel.append() } } }- W połączeniu z tagiem
Dodano
Pager.refreshiPager.retry, aby przywrócić działanie po błędach wczytywania podczas korzystania z interfejsuasStateAPI. Więcej przykładów użycia nowych interfejsów API znajdziesz w tym dokumencie. (I1e1e9, If3c87, Idbd48, Id1e1d, I816fe)
Wersja 3.4
Wersja 3.4.2
11 marca 2026 r.
Publikacja androidx.paging:paging-*:3.4.2 Wersja 3.4.2 zawiera te zmiany.
Bez zmian
- Ta wersja nie wprowadza żadnych zmian w interfejsie API ani w zachowaniu w porównaniu z wersją 3.4.1.
Wersja 3.4.1
11 lutego 2026 r.
Publikacja androidx.paging:paging-*:3.4.1 Wersja 3.4.1 zawiera te zmiany.
Aktualizacja zależności
- Zaktualizowano zależność guava w paging-guava z wersji 31.1 do 32.0.1.
Wersja 3.4.0
28 stycznia 2026 r.
Publikacja androidx.paging:paging-*:3.4.0 Wersja 3.4.0 zawiera te zmiany.
Ważne zmiany od wersji 3.3.0:
- Dodano więcej platform docelowych KMP do
paging-common,paging-testingipaging-compose. Obecnie wszystkie obsługują JVM(Android i komputery), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) i Web (JavaScript, WasmJS). paging-common,paging-testingipaging-composeusunęły obsługęmacosX64,iosX64,watchosX64itvosX64, aby dostosować się do wycofania przez Jetbrains docelowych platform macosX64.- Dodaliśmy nowy interfejs
PagingStateAPIclosestItemAroundPosition, który umożliwia pobieranie wczytanego elementu znajdującego się najbliżej pozycji docelowej i spełniającego warunek wejściowy. Można go używać do generowania kluczy odświeżania opartych na elementach, gdy idealny element, który można zakotwiczyć, znajduje się w pobliżu, ale nie w dokładnej pozycji docelowej.
Wersja 3.4.0-rc01
14 stycznia 2026 r.
Publikacja androidx.paging:paging-*:3.4.0-rc01 Wersja 3.4.0-rc01 zawiera te zmiany.
Nowe funkcje
- Usunęliśmy obsługę tych platform KMP:
macosX64,iosX64,watchosX64itvosX64, aby dostosować się do wycofania przez Jetbrains docelowych platform macosX64. (7cb9a4)
Wersja 3.4.0-beta01
17 grudnia 2025 r.
Publikacja androidx.paging:paging-*:3.4.0-beta01 Wersja 3.4.0-beta01 zawiera te zmiany.
Poprawki błędów
- Naprawiono wyścig między wczytaniami
RecyclerViewiRefresh, który powodowałIndexOutOfBoundsExceptionwRecyclerView. Przerwane aktualizacje interfejsu z powodu ciągłego wczytywaniaRefreshmogą spowodować rozsynchronizowanie stanu stronicowania zRecyclerView. Problem ten rozwiązuje przywrócenie stanu sprzed odświeżenia w przypadku przerwania odświeżania (np. przez kolejne wczytanieRefresh). (I771b0, b/409809768)
Wersja 3.4.0-alpha04
10 września 2025 r.
Publikacja androidx.paging:paging-*:3.4.0-alpha04 Wersja 3.4.0-alpha04 zawiera te zmiany.
Zmiany w interfejsie API
- Dodaliśmy nowy interfejs
PagingStateAPIclosestItemAroundPosition, który umożliwia pobieranie wczytanego elementu znajdującego się najbliżej pozycji docelowej i spełniającego warunek wejściowy. Można go używać do generowania kluczy odświeżania opartych na elementach, gdy idealny element, który można zakotwiczyć, znajduje się w pobliżu, ale nie w dokładnej pozycji docelowej. (I96e5c, b/440187139)
Wersja 3.4.0-alpha03
27 sierpnia 2025 roku
Publikacja androidx.paging:paging-*:3.4.0-alpha03 Wersja 3.4.0-alpha03 zawiera te zmiany.
Nowe funkcje
- Biblioteka Paging-common dodała platformę desktop jako nowy cel Kotlin Multiplatform (KMP). Obsługuje teraz łącznie JVM(Android i komputery), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) i Web (JavaScript, WasmJS). (Id2483, b/436884811)
- Biblioteka Paging-testing ma nowe platformy docelowe Kotlin Multiplatform (KMP). Obsługuje teraz łącznie JVM(Android i komputery), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) i Web (JavaScript, WasmJS). (I0c543, b/435014650)
- Biblioteka Paging-compose ma nowe platformy docelowe Kotlin Multiplatform (KMP). Obsługuje teraz łącznie JVM(Android i komputery), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) i Web (JavaScript, WasmJS). (I70d44, b/436884801)
Zmiany w interfejsie API
- Przeniesienie domyślnego minSdk z API 21 na API 23 (Ibdfca, b/380448311, b/435705964, b/435705223)
Wersja 3.4.0-alpha02
30 lipca 2025 r.
Publikacja androidx.paging:paging-*:3.4.0-alpha02 Wersja 3.4.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
PagingData.fromumożliwia teraz ustawienie wartościplaceholdersBeforeiplaceholdersAfter. Pamiętaj, że przewijanie tych elementów zastępczych nie powoduje wczytywania. (I06983)
Wersja 3.4.0-alpha01
2 lipca 2025 r.
Publikacja androidx.paging:paging-*:3.4.0-alpha01 Wersja 3.4.0-alpha01 zawiera te zmiany.
Nowe funkcje
- Biblioteka Paging obsługuje teraz te platformy KMP: watchos, tvos, mingwX64, watchosDeviceArm64 i linuxArm64. (I237dd, Ia62b3, b/368046982, Icf15d, b/364652024, I139d3, b/338268719)
Poprawki błędów
- Testy jednostkowe na Androidzie korzystające z biblioteki Paging w wersji 3.3 lub nowszej nie będą już zgłaszać błędów z
PagingLogger(Ia9400, b/331684448). - Naprawiono błąd, w którym
RecyclerViewzgłaszałIndexOutOfBoundsException, gdy użytkownik przewijał stronę podczas aktualizowaniaRecyclerView(Id1f16, b/381024738) - Rozwiązaliśmy problem polegający na tym, że podczas odświeżania w trakcie przewijania stronicowanie nie mogło wywołać kolejnych wczytań. (I60ca5, b/352586078)
- Rozwiązanie problemu z awarią podczas przewijania podczas odświeżania elementów stronicowania. (I8c65a, b/347649763)
Wersja 3.3
Wersja 3.3.6
12 lutego 2025 r.
Publikacja androidx.paging:paging-*:3.3.6 Wersja 3.3.6 zawiera te zmiany.
Poprawki błędów
- Sygnały odświeżania i ponawiania wysyłane podczas początkowego odświeżania będą teraz przechowywane i automatycznie wysyłane ponownie, gdy prezenter stronicowania będzie gotowy.
Wkład zewnętrzny
Wersja 3.3.5
11 grudnia 2024 r.
Publikacja androidx.paging:paging-*:3.3.5 Wersja 3.3.5 zawiera te zmiany.
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że funkcja
RecyclerViewzgłaszała błądIndexOutOfBoundsException, gdy użytkownik przewijał stronę podczas aktualizowaniaRecyclerView. (Id1f16, b/381024738)
Wersja 3.3.4
13 listopada 2024 r.
Publikacja androidx.paging:paging-*:3.3.4 Wersja 3.3.4 zawiera te zmiany.
Poprawki błędów
- Testy jednostkowe Androida korzystające z biblioteki Paging w wersji 3.3 lub nowszej nie będą już zgłaszać błędów, takich jak
Method isLoggable in android.util.Log not mocked. (Ia9400, b/331684448)
Wersja 3.3.2
7 sierpnia 2024 r.
Publikacja androidx.paging:paging-*:3.3.2 Wersja 3.3.2 zawiera te zmiany.
Nowe funkcje
paging-commonipaging-testingdodano nowe platformy Kotlin Multiplatform:watchos,tvosilinuxArm64(90c9768), (53e0eca)
Wersja 3.3.1
24 lipca 2024 r.
Publikacja androidx.paging:paging-*:3.3.1 Wersja 3.3.1 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że interfejs
AsyncPagingDataDifferlub interfejsy API oparte na nim, takie jakPagingDataAdapterużywany zRecyclerView, nie mogły wywoływać większej liczby wczytań, gdy źródło danych pomocniczych odświeżało się podczas przewijania. (I60ca5, b/352586078) - Naprawiono błąd powodujący awarię, który występował, gdy podczas przewijania elementu
RecyclerViewza pomocą elementuPagingDataAdapterlubAsyncPagingDataDifferusuwano elementy z bazowego źródła danych. (I8c65a, b/347649763)
Wersja 3.3.0
14 maja 2024 r.
Publikacja androidx.paging:paging-*:3.3.0 Wersja 3.3.0 zawiera te zmiany.
Ważne zmiany od wersji 3.2.0
PagingDataPresenterto teraz klasa publiczna. Prezenterzy wieloplatformowi mogą być teraz tworzeni na podstawiePagingDataPresenterzamiast wymagać wewnętrznych interfejsów Paging API lubpaging-runtimeAsyncPagingDataDiffer.- Dodaliśmy nowe metody pomocnicze
LoadStatesiCombinedLoadStateswhasErroriisIdle, aby sprawdzić, czyLoadStatesjest w stanie Error lubNotLoading. Dodaliśmy też nowąawaitNotLoading()metodę rozszerzenia Kotlin wFlow<CombinedLoadStates>, która czeka, aż wczytywanie osiągnie stanNotLoadinglub Error. PagingData.empty()domyślnie wysyła stanyNotLoading, chyba że do jego konstruktora zostaną przekazane niestandardowe elementyLoadStates. Różni się to od dotychczasowego działania, w przypadku którego nie wysyłaLoadStates, gdy jest przesyłany doPagingDataAdapter, lub wysyła stany wczytywania, gdy jest zbierany jakoLazyPagingItems. Gdy jest zbierana jakoLazyPagingItems, od razu po utworzeniu wyświetla pustą listę.
Zgodność z Kotlin Multiplatform
Biblioteka Paging zawiera teraz artefakty zgodne z Kotlin Multiplatform, w dużej mierze dzięki pracy nad projektem multiplatform-paging zespołu CashApp.
paging-commonprzeniósł wszystkie interfejsy Paging 3 API docommoni jest teraz zgodny z platformami JVM i iOS, a także z Androidem.paging-testingprzeniósł swój kod docommoni jest teraz zgodny z jvm i iOS, a także z Androidem.paging-composeprzeniosło swój kod docommoni dostarcza artefakt Androida, który jest zgodny z obsługą wielu platform wandroidx.compose.paging-runtime,paging-guava,paging-rxjava2ipaging-rxjava3pozostaną dostępne tylko na Androidzie.
Wersja 3.3.0-rc01
1 maja 2024 r.
androidx.paging:paging-*:3.3.0-rc01 została wydana bez zmian w bibliotece Paging w wersji 3.3.0-beta01. Wersja 3.3.0-rc01 zawiera te zmiany.
Wersja 3.3.0-beta01
3 kwietnia 2024 r.
Wersja androidx.paging:paging-*:3.3.0-beta01 została opublikowana bez znaczących zmian. Wersja 3.3.0-beta01 zawiera te zmiany.
Wersja 3.3.0-alpha05
20 marca 2024 r.
Publikacja androidx.paging:paging-*:3.3.0-alpha05 Wersja 3.3.0-alpha05 zawiera te zmiany.
Zmiany w interfejsie API
- Biblioteka Paging korzysta teraz z adnotacji
@MainThreadAndroidX Annotation w przypadku wspólnego kodu. (I78f0d, b/327682438)
Wersja 3.3.0-alpha04
6 marca 2024 roku
Publikacja androidx.paging:paging-*:3.3.0-alpha04 Wersja 3.3.0-alpha04 zawiera te zmiany.
Poprawki błędów
- Naprawiliśmy drobne błędy w dokumentacji związane z dodaniem zgodności z Kotlin Multiplatform. (aosp/2950785)
Wersja 3.3.0-alpha03
7 lutego 2024 r.
Publikacja androidx.paging:paging-*:3.3.0-alpha03 Wersja 3.3.0-alpha03 zawiera te zatwierdzenia.
Nowe funkcje
PagingDataPresenterto teraz klasa publiczna. Prezenterzy wieloplatformowi mogą być teraz tworzeni na podstawiePagingDataPresenterzamiast wymagać wewnętrznych interfejsów Paging API lubpaging-runtimeAsyncPagingDataDiffer. (Id1f74, b/315214786)- Dodaliśmy nowe metody pomocnicze
LoadStatesiCombinedLoadStates, aby sprawdzić, czyLoadStatesjest w stanie Error lubNotLoading. Dodaliśmy też nowy interfejs API, który czeka naLoadStateFlow, aż zadanie zostanie zakończone w stanieNotLoadinglub Error. (Id6c67)
Zmiana zachowania
PagingData.empty()domyślnie wysyła stanyNotLoading, chyba że do jego konstruktora zostaną przekazane niestandardowe elementyLoadStates. Różni się to od dotychczasowego działania, w przypadku którego nie wysyłaLoadStates, gdy jest przesyłany doPagingDataAdapter, lub wysyła stany wczytywania, gdy jest zbierany jakoLazyPagingItems. Gdy jest zbierana jakoLazyPagingItems, od razu po utworzeniu wyświetla pustą listę. (I4d11d, b/301833847)
Wersja 3.3.0-alpha02
20 września 2023 r.
Publikacja androidx.paging:paging-*:3.3.0-alpha02 Wersja 3.3.0-alpha02 zawiera te zatwierdzenia.
Zgodność z Kotlin Multiplatform
Biblioteka Paging zawiera teraz artefakty zgodne z Kotlin Multiplatform, w dużej mierze dzięki pracy nad projektem multiplatform-paging zespołu CashApp. Pozwoli nam to uniknąć rozbieżności między dwoma repozytoriami i zapewnić ich kompatybilność.
paging-commonprzeniósł wszystkie interfejsy Paging 3 API docommoni jest teraz zgodny z platformami JVM i iOS, a także z Androidem.paging-testingprzeniósł swój kod docommoni jest teraz zgodny z jvm i iOS, a także z Androidem.paging-composeprzeniosło swój kod docommoni dostarcza artefakt Androida, który jest zgodny z obsługą wielu platform wandroidx.compose.paging-runtime,paging-guava,paging-rxjava2ipaging-rxjava3pozostaną dostępne tylko na Androidzie.
Zmiany w interfejsie API
- Publiczny interfejs Logger, który był przeznaczony tylko do użytku wewnętrznego, został wycofany (I16e95, b/288623117).
Wkład zewnętrzny
- Dziękujemy veyndanowi z Cash App za pomoc w przeniesieniu biblioteki Paging 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 artefakty
*-jvmi*-android. W przypadku systemów macOS, iOS i Linux użyj znaku3.3.0-alpha02.
Wersja 3.2
Wersja 3.2.1
6 września 2023 r.
Publikacja androidx.paging:paging-*:3.2.1 Wersja 3.2.1 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował zawieszanie się interfejsu
asSnapshot()API artefaktu testowania stronicowania po przekazaniu do niego obiektu Flow utworzonego za pomocą funkcjiPagingData.from(List), ponieważ funkcjaasSnapshot()nie miała 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
AndroidUiDispatcher.Main, aby zapewnić, że nowe dane będą dostępne w tej samej ramce, w której zakończy się wczytywanie. (Ia55af)
Wersja 3.2.0
26 lipca 2023 r.
Publikacja androidx.paging:paging-*:3.2.0 Wersja 3.2.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 3.1.0
- Biblioteka Paging Compose osiągnęła stabilność interfejsu API i została ponownie scalona z pozostałą częścią biblioteki Paging, w której jej wersja jest teraz zgodna ze wszystkimi innymi artefaktami Paging. Zmiany od wersji 3.1.0:
- Obsługa podglądu listy danych testowych przez utworzenie
PagingData.from(fakeData)i umieszczenie go wPagingDatawMutableStateFlow(np.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Przekaż ten przepływ do funkcji kompozycyjnych@Previewjako odbiorcęcollectAsLazyPagingItems(), aby wyświetlić podgląd. - Obsługa wszystkich układów leniwych, takich jak
LazyVerticalGridiHorizontalPager, a także niestandardowych komponentów leniwych z bibliotek Wear i TV. Udało się to osiągnąć dzięki nowym metodom rozszerzeń niższego poziomuLazyPagingItemsiitemKeyorazitemContentType, które pomagają wdrażać parametrykeyicontentTypew standardowych interfejsach APIitems, które są już dostępne w przypadkuLazyColumniLazyVerticalGrid, a także ich odpowiedników w interfejsach API, takich jakHorizontalPager. items(lazyPagingItems)iitemsIndexed(lazyPagingItems), które obsługują tylkoLazyListScope, zostały wycofane.
- Obsługa podglądu listy danych testowych przez utworzenie
- Nowy
paging-testingartefakt, który udostępnia interfejsy API zaprojektowane z myślą o testowaniu jednostkowym każdej warstwy aplikacji i jej integracji z biblioteką Paging w izolacji. Na przykład obejmuje:TestPager, która umożliwia sprawdzanie działania własnej implementacjiPagingSourceniezależnie od komponentu Pager i rzeczywistego interfejsu.-
asPagingSourceFactoryinterfejsy API do przekształcaniaFlow<List<Value>>lub statycznegoList<Value>wPagingSourceFactory, który można przekazać do komponentu Pager w testach; asSnapshotrozszerzenie Kotlin naFlow<PagingData<Value>>, które tłumaczyFlow<PagingData<Value>>na bezpośrednieList<Value>.asSnapshot lambdaumożliwia naśladowanie interfejsu aplikacji za pomocą interfejsów API, takich jakscrollToczyappendScrollWhile, dzięki czemu możesz w dowolnym momencie sprawdzić, czy migawka danych jest prawidłowa w zestawie danych podzielonych na strony.
- Dodaliśmy domyślne logi, aby udostępniać informacje na potrzeby debugowania stronicowania na 2 poziomach:
VERBOSEiDEBUG. Dzienniki można włączyć za pomocą poleceniaadb shell setprop log.tag.Paging [DEBUG|VERBOSE]. Dotyczy to zarówno stronicowania z widokami, jak i stronicowania z funkcją Compose. - Dodano konstruktory dla
PagingDataAdapteriAsyncPagingDataDiffer, które akceptująCoroutineContextzamiastCoroutineDispatcher. - Dodaliśmy nowy
PagingSourceFactoryinterfejs funkcyjny, który zapewnia bardziej jednoznaczny interfejs API niż poprzednie lambdy () ->PagingSource. Za pomocą tej fabryki można utworzyć instancję klasy Pager.
Wersja 3.2.0-rc01
21 czerwca 2023 r.
Publikacja androidx.paging:paging-*:3.2.0-rc01 Wersja 3.2.0-rc01 zawiera te zatwierdzenia.
Wkład zewnętrzny
- Dziękujemy Veyndanowi za pomoc w odchodzeniu od specyfiki Androida i JVM w przypadku biblioteki Paging. (#553, #554, #555, #559)
Wersja 3.2.0-beta01
7 czerwca 2023 r.
Publikacja androidx.paging:paging-*:3.2.0-beta01 Wersja 3.2.0-beta01 zawiera te zatwierdzenia.
Paging Compose
- Biblioteka Paging Compose osiągnęła oficjalnie stabilność interfejsu API. W związku z tym wersja została zaktualizowana z
1.0.0-alpha20, aby była zgodna z wersją wszystkich innych artefaktów stronicowania.
Zmiany w interfejsie API
- Usunięto wycofane interfejsy API
items(LazyPagingItems)iitemsIndexed(LazyPagingItems)z biblioteki Paging Compose. Przykłady interfejsów API, które je zastępują, znajdziesz w informacjach o wersji biblioteki Paging Compose1.0.0-alpha20. (I9626e)
Wersja 3.2.0-alpha06
24 maja 2023 r.
Publikacja androidx.paging:paging-*:3.2.0-alpha06 Wersja 3.2.0-alpha06 zawiera te zmiany.
Nowe funkcje
- Dodaliśmy nowy
PagingSourceFactoryinterfejs funkcyjny, który zapewnia bardziej jednoznaczny interfejs API niż dotychczasowe wyrażenia lambda() -> PagingSource. Za pomocą tej fabryki można utworzyć instancję klasyPager. (I33165, b/280655188) - Dodano nowy
paging-testinginterfejs APIList<Value>.asPagingSourceFactory(), który umożliwia uzyskaniePagingSourceFactory, które wczytuje dane tylko z niezmiennej listy. Do testowania z użyciem wielu generacji danych statycznych należy nadal używać dotychczasowego rozszerzenia wFlow<List<Value>>. (Id34d1, b/280655188)
Zmiany w interfejsie API
- Wszystkie publiczne interfejsy API w paging-testing są teraz oznaczone adnotacją
@VisibleForTesting, aby zapewnić, że będą one używane tylko w testach. (I7db6e) - Interfejs
asSnapshotAPI 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 intuicyjnie pasowała do kolejności rzeczywistych parametrów konstruktoraPager(I6185a). - Zmieniliśmy typ funkcji lambda
() -> PagingSource<Key, Value>w przypadku testowania stronicowania na typPagingSourceFactory<Key, Value>. (I4a950, b/280655188)
Zmiany w zachowaniu
- Główny dyspozytor nie jest już wymagany do przeprowadzania
asSnapshottestów stronicowania. Ustawienie tego parametru nie powoduje już żadnych zmian w działaniu testu. (Ie56ea)
Wersja 3.2.0-alpha05
3 maja 2023 r.
Publikacja androidx.paging:paging-*:3.2.0-alpha05 Wersja 3.2.0-alpha05 zawiera te zmiany.
Zmiany w interfejsie API
- Interfejs Paging Testing API w
asSnapshotdomyślnie ustawia parametrloadOperationsna pustą lambdę. Umożliwia to wywołanieasSnapshotbez przekazywania żadnych operacji wczytywania w celu pobrania danych z początkowego wczytywania odświeżania. (Ied354, b/277233770)
Ulepszenia dokumentacji
- Zaktualizowaliśmy dokumentację dotyczącą
asPagingSourceFactory(), aby wyjaśnić, że jest to metoda rozszerzająca wFlow, która zwraca fabrykę wielokrotnego użytku do generowania instancjiPagingSource. (I5ff4f, I705b5) - Zaktualizowaliśmy dokumentację konstruktora
LoadResult.Page, aby wyjaśnić, że w celu obsługi skakania należy zastąpić funkcjeitemsBeforeiitemsAfter. (Ied354)
Treści zewnętrzne
- Dziękujemy Veyndanowi za pomoc w odchodzeniu od specyfiki Androida i JVM w przypadku biblioteki Paging. (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, #493)
Wersja 3.2.0-alpha04
8 lutego 2023 r.
Publikacja androidx.paging:paging-*:3.2.0-alpha04 Wersja 3.2.0-alpha04 zawiera te zatwierdzenia.
Testowanie stronicowania
- Artefakt
paging-testingzawiera teraz metodęasPagingSourceFactory, która tworzy obiektpagingSourceFactoryz obiektuFlow<List<Value>>, który ma być dostarczony do komponentu Pager. Każdy sygnałList<Value>>emitowany przez Flow reprezentuje wygenerowanie danych podzielonych na strony. Ułatwia to testowanie stronicowania, np.PagingDataprzekształceń, poprzez symulowanie źródła danych, z którego moduł stronicowania może zbierać dane. (I6f230, b/235528239) paging-testingzostał rozszerzony o nowe interfejsy API, które umożliwiają weryfikację poprawności danych zawartych wFlow<PagingData<T>>. Możesz jej użyć np. do potwierdzenia danych wyjściowychFlow<PagingData<T>>z warstwy ViewModel.Odbywa się to za pomocą
asSnapshotrozszerzenia Kotlin naFlow<PagingData<Value>>, które przekształcaFlow<PagingData<Value>>w bezpośredniList<Value>. FunkcjaasSnapshotlambda umożliwia naśladowanie interfejsu aplikacji za pomocą interfejsów API, takich jakscrollTolubappendScrollWhile, w powtarzalny i spójny sposób, dzięki czemu możesz w dowolnym momencie sprawdzić, czy migawka danych jest prawidłowa w zestawie danych podzielonych na strony.// 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 valuesasSnapshotto metodasuspend, która powinna być uruchamiana wrunTest. Więcej informacji znajdziesz w artykule Testowanie współprogramów Kotlin na Androidzie. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)
Zmiany w interfejsie API
- Wywołania interfejsu
getItemipeekwAsyncPagingDataDifferiPagingDataAdaptersą teraz prawidłowo oznaczane jako wywoływane tylko w głównym wątku. (I699b6) - Usunięto symbole wieloznaczne 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.
Publikacja androidx.paging:paging-*:3.2.0-alpha03 Wersja 3.2.0-alpha03 zawiera te zatwierdzenia.
Testowanie stronicowania
Ta wersja zawiera nowy artefakt: paging-testing. Ten artefakt udostępnia interfejsy API zaprojektowane pod kątem testów jednostkowych każdej warstwy aplikacji i jej integracji z biblioteką Paging w izolacji.
Na przykład ta pierwsza wersja zawiera klasę TestPager, która umożliwia weryfikowanie działania własnej implementacji niestandardowej PagingSource niezależnie od Pager i rzeczywistego interfejsu, którego zwykle używasz do symulowania kompleksowej integracji biblioteki Paging.
TestPager należy uznać za fałszywy – podwójny obiekt testowy, który odzwierciedla rzeczywistą implementację Pager, a jednocześnie udostępnia uproszczony interfejs API do testowania PagingSource. Są to interfejsy API suspend, które należy uruchamiać w ramach runTest zgodnie z przewodnikiem Testowanie współprogramów Kotlin na Androidzie.
Przykład użycia tych interfejsów API można znaleźć w room-paging testach, które zostały zmodyfikowane, aby korzystać z TestPager.
Zmiany w interfejsie API
- Umożliwia wygodne iterowanie po
LoadResult.Page.dataza pomocąLoadResult.Page.iterator(). Umożliwia to pośrednio użycie metody biblioteki standardowej Kotlinflatten, gdy podany jestList<LoadResult.Page>, np. we właściwościpageselementuPagingState, która jest przekazywana do metodyPagingSource.getRefreshKey. (Ie0718)
Wersja 3.2.0-alpha02
10 sierpnia 2022 r.
Publikacja androidx.paging:paging-*:3.2.0-alpha02 Wersja 3.2.0-alpha02 zawiera te zatwierdzenia.
Nowe funkcje
- Biblioteka Paging udostępnia teraz dzienniki za pomocą klas
AsyncPagingDataDifferlubPagingDataAdapter, aby udostępniać informacje na potrzeby debugowania zebrane zPagingData. - Dzienniki można włączyć za pomocą polecenia
adb shelladb shell setprop log.tag.Paging [DEBUG|VERBOSE].(b/235527159).
Poprawki błędów
- Usunęliśmy błąd braku konstruktora
PagingDataDifferpodczas używaniapaging-common:3.2.0-alpha01z wersją środowiska wykonawczegopaging-runtime:3.1.1lub starszą.(b/235256201)
Wersja 3.2.0-alpha01
1 czerwca 2022 r.
Publikacja androidx.paging:paging-*:3.2.0-alpha01 Wersja 3.2.0-alpha01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano konstruktory dla klas
PagingDataAdapteriAsyncPagingDataDiffer, które akceptują typCoroutineContextzamiastCoroutineDispatcher. (Idc878) - Domyślnie zasady
PagingData.from()iPagingData.empty()nie mają już wpływu naCombinedLoadStatespo stronie prezentera. Dodaliśmy nowe przeciążenie, które umożliwia przekazywanie wartościsourceLoadStatesiremoteLoadStatesdo tych konstruktorów, aby zachować dotychczasowe działanie polegające na ustawianiu wartościLoadStatesjako w pełni końcowej (tzn.NotLoading(endOfPaginationReached = false)), z możliwością uwzględnienia w razie potrzeby także stanów zdalnych. JeśliLoadStatesnie zostaną przekazane, poprzednieCombinedLoadStateszostaną zachowane po stronie prezentera, gdy otrzyma on statycznyPagingData. (Ic3ce5, b/205344028)
Poprawki błędów
- Wynik funkcji
PagingSource.getRefreshKey()ma teraz prawidłowy priorytet w stosunku do funkcjiinitialKeyw przypadkach, gdy zwraca wartość null, ale ustawiono wartośćinitialKeyinną niż null. (Ic9542, b/230391606)
Wkład zewnętrzny
- Zaktualizowano interfejs API :compose:ui:ui-test (updateApi) z powodu migracji biblioteki test-coroutines-lib (I3366d)
Wersja 3.1
Wersja 3.1.1
9 marca 2022 r.
Publikacja androidx.paging:paging-*:3.1.1 Wersja 3.1.1 zawiera te zatwierdzenia.
Poprawki błędów
- Usunięto pośrednie zdarzenia
LoadState.NotLoadingmiędzy generacjami, które zostały nieprawidłowo wstawione przez.cachedIn(). Ta zmiana znacznie ułatwia reagowanie na zmianyLoadState, ponieważ usuwa zbędne zdarzeniaLoadState.NotLoading, które były generowane między ponownymi próbami nieudanych wczytań, podczas odświeżania lub unieważniania.
Wersja 3.1.0
17 listopada 2021 r.
Publikacja androidx.paging:paging-*:3.1.0 Wersja 3.1.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 3.0.0
- Interfejsy API
Flow<PagingData>.observableiFlow<PagingData>.flowablenie są już eksperymentalne - Zmiany w działaniu
LoadState:endOfPaginationReachedto teraz zawszefalsew przypadkuLoadType.REFRESHzarówno wPagingSource, jak i wRemoteMediator.LoadStatesz Pagingu oczekuje teraz prawidłowych wartości zPagingSourceiRemoteMediator, zanim wyśle je dalej. Nowe generacjePagingDatabędą teraz zawsze prawidłowo zaczynać się odLoadingw przypadku stanu odświeżania, zamiast w niektórych przypadkach nieprawidłowo resetować się doNotLoading..loadStateFlowi.addLoadStateListenerw interfejsach API prezentera nie wysyłają już nadmiarowo początkowegoCombinedLoadStates, który zawsze ma stany pośrednika ustawione nanull
- Anulowanie poprzednich generacji następuje teraz natychmiast po unieważnieniu lub wygenerowaniu nowych treści. Nie powinno być już konieczne używanie
.collectLatestw przypadkuFlow<PagingData>, chociaż nadal zalecamy to robić. PagingSource.LoadResult.Invalidzostał dodany jako nowy typ zwracany zPagingSource.load, co powoduje, że biblioteka Paging odrzuca wszystkie oczekujące lub przyszłe żądania wczytania do tegoPagingSourcei unieważnia go. Ten zwracany typ został zaprojektowany do obsługi potencjalnie nieprawidłowych lub nieaktualnych danych, które mogą być zwracane z bazy danych lub sieci.- Dodano interfejsy API prowadzących
.onPagesPresentedi.addOnPagesUpdatedListener, które są wywoływane synchronicznie podczas wyświetlania stron w interfejsie. Aktualizacje strony mogą nastąpić w tych sytuacjach:- Początkowe wczytywanie nowej generacji PagingData zostanie zakończone niezależnie od tego, czy nowa generacja zawiera jakiekolwiek zmiany w prezentowanych elementach. Wywołanie zwrotne zostanie wywołane nawet wtedy, gdy nowa generacja zakończy wczytywanie początkowe bez aktualizacji, ponieważ lista jest dokładnie taka sama.
- Strona jest wstawiana nawet wtedy, gdy nie zawiera nowych elementów.
- Strona jest pomijana, nawet jeśli była pusta.
Wersja 3.1.0-rc01
3 listopada 2021 r.
Publikacja androidx.paging:paging-*:3.1.0-rc01 Wersja 3.1.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązano problem z sytuacją wyścigu i wyciekiem pamięci w funkcji .cachedIn() w przypadkach, gdy Paging wysyłał wiele zdarzeń wczytywania w dół strumienia, gdy nie było obserwatorów lub gdy obserwator przełączał się na nowe PagingData. (Ib682e)
Wersja 3.1.0-beta01
13 października 2021 r.
Publikacja androidx.paging:paging-*:3.1.0-beta01 Wersja 3.1.0-beta01 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, w którym wiele szybkich dostępów do elementów mogło powodować ich pomijanie podczas obliczania wartości prefetchDistance, co prowadziło do wstrzymania wczytywania strony. Jest to szczególnie problematyczne, gdy wiele elementów jest ułożonych jednocześnie w kolejności, która priorytetowo traktuje ładowanie w kierunku przeciwnym do kierunku przewijania przez użytkownika. Dostęp do tych elementów jest teraz buforowany i synchronicznie traktowany priorytetowo, aby zapobiec ich utracie. (aosp/1833273)
Wersja 3.1.0-alpha04
29 września 2021 r.
Publikacja androidx.paging:paging-*:3.1.0-alpha04 Wersja 3.1.0-alpha04 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Interfejsy
Flow<PagingData>.observableiFlow<PagingData>.flowableAPI nie są już eksperymentalne. (Ie0bdd)
Poprawki błędów
- W przypadku LoadStates wartość
endOfPaginationReachedjest teraz zawsze równafalsew przypadkuLoadType.REFRESH. Wcześniej w przypadku elementu RemoteMediator wartość endOfPaginationReached mogła wynosićtrue, ale nie w przypadku elementu PagingSource.REFRESHTo zachowanie zostało teraz ujednolicone, aby zawsze zwracaćfalse, ponieważ odświeżanie nigdy nie powinno być końcowe. Jest ono teraz udokumentowane w ramach umowy API w LoadStates. Decydując o zakończeniu paginacji, zawsze rób to w odniesieniu do kierunków APPEND lub PREPEND. (I047b6) Obiekty LoadStates z biblioteki Paging oczekują teraz prawidłowych wartości z obiektów PagingSource i RemoteMediator, zanim wyemitują dane do dalszego przetwarzania między generacjami. Zapobiega to wysyłaniu przez nowe generacje PagingData stanu NotLoading w CombinedLoadStates.source.refresh, jeśli był już w stanie Loading. Nowe generacje PagingData będą teraz zawsze prawidłowo rozpoczynać od stanu Loading dla stanu odświeżania, zamiast najpierw nieprawidłowo resetować się do stanu NotLoading w niektórych przypadkach.
Anulowanie poprzednich generacji następuje teraz natychmiast po unieważnieniu lub wygenerowaniu nowych treści. Nie powinno być już konieczne używanie funkcji .collectLatest na
Flow<PagingData>, chociaż nadal jest to wysoce zalecane. (I0b2b5, b/177351336, b/195028524)Interfejsy API
.loadStateFlowi.addLoadStateListenerna potrzeby prezentujących nie wysyłają już nadmiarowo początkowego parametruCombinedLoadStates, który zawsze ma stany pośrednika ustawione nanull, a stany źródła naNotLoading(endOfPaginationReached = false). Oznacza to, że:- Jeśli używasz klasy RemoteMediator, stany pośrednika będą zawsze wypełniane.
- Rejestrowanie nowego odbiorcy loadState lub nowego kolektora na
.loadStateFlownie będzie już natychmiast emitować bieżącej wartości jeśli nie otrzymał on rzeczywistegoCombinedLoadStateszPagingData. Może się tak zdarzyć, jeśli zbierający lub detektor zostanie uruchomiony przed przesłaniemPagingData. (I1a748)
Wersja 3.1.0-alpha03
21 lipca 2021 r.
Publikacja androidx.paging:paging-*:3.1.0-alpha03 Wersja 3.1.0-alpha03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
Do klasy PagingSource dodano trzeci typ zwracany LoadResult: LoadResult.Invalid. Gdy funkcja PagingSource.load zwraca LoadResult.Invalid, biblioteka do stronicowania odrzuca wczytane dane i unieważnia PagingSource. Ten zwracany typ został zaprojektowany do obsługi potencjalnie nieprawidłowych lub nieaktualnych danych, które mogą być zwracane z bazy danych lub sieci.
Jeśli na przykład dane w bazie danych zostaną zmienione, ale obiekt PagingSource nie zostanie w odpowiednim czasie unieważniony, może zwrócić niespójne wyniki, jeśli jego implementacja zależy od niezmienności zbioru danych, z którego pobiera dane (np. implementacje bazy danych w stylu LIMIT OFFSET). W takim przypadku zalecamy sprawdzenie, czy po wczytaniu nie doszło do unieważnienia, i zwrócenie wartości LoadResult.Invalid, co spowoduje odrzucenie przez bibliotekę Paging wszystkich oczekujących lub przyszłych żądań wczytania do tego obiektu PagingSource i jego unieważnienie.
Ten typ zwracany jest też obsługiwany przez interfejs Paging2 API, który korzysta z LivePagedList lub RxPagedList. Jeśli używasz elementu PagingSource z interfejsami PagedList API biblioteki Paging2, element PagedList jest natychmiast odłączany, co powoduje zatrzymanie dalszych prób wczytania danych do tego elementu PagedList i wywołuje unieważnienie w elemencie PagingSource.
LoadResult to klasa zamknięta, co oznacza, że jest to zmiana niezgodna ze źródłem, więc przypadki użycia bezpośrednio korzystające z wyników PagingSource.load będą musiały obsługiwać LoadResult.Invalid w czasie kompilacji. Na przykład użytkownicy języka Kotlin korzystający z funkcji exhaustive-when do sprawdzania zwracanego typu będą musieli dodać sprawdzenie typu Invalid. (Id6bd3, b/191806126, b/192013267)
Poprawki błędów
- Wywołania zwrotne unieważnienia dodane za pomocą funkcji PagingSource.registerInvalidatedCallback lub DataSource.addInvalidatedCallback są teraz automatycznie wywoływane, jeśli zostały zarejestrowane w obiekcie PagingSource lub DataSource, który był już nieprawidłowy. Rozwiązuje to problem z sytuacją wyścigu, który powodował, że biblioteka Paging odrzucała sygnały unieważnienia i zawieszała się, gdy podczas początkowego wczytywania podano jej źródło, które było już nieprawidłowe. Dodatkowo wywołania zwrotne invalidate są teraz prawidłowo usuwane po wywołaniu, ponieważ są wywoływane co najwyżej raz. (I27e69)
- Przesłanie początkowej wartości zastępczej (InitialPagedList) z nowo utworzonego strumienia PagedList, np. LivePagedListBuilder lub RxPagedListBuilder, nie spowoduje już wyczyszczenia wcześniej wczytanych danych.
Wersja 3.1.0-alpha02
1 lipca 2021 r.
Publikacja androidx.paging:paging-*:3.1.0-alpha02 Wersja 3.1.0-alpha02 zawiera te zatwierdzenia.
Nowe funkcje
Dodano interfejsy API onPagesPresented i flowPresenter, które są wywoływane natychmiast po zaktualizowaniu wyświetlanych stron w interfejsie.
Ponieważ te aktualizacje są synchroniczne z interfejsem, możesz wywoływać metody adaptera, takie jak .snapshot czy .getItemCount, aby sprawdzić stan po zastosowaniu aktualizacji. Pamiętaj, że wywołanie funkcji .snapshot() zostało pozostawione do jawnego wywołania, ponieważ może być kosztowne przy każdej aktualizacji.
Aktualizacje strony mogą wystąpić w tych sytuacjach:
- Początkowe wczytywanie nowej generacji PagingData zostanie zakończone niezależnie od tego, czy nowa generacja zawiera zmiany w prezentowanych elementach. Nowa generacja, która zakończy wczytywanie początkowe bez aktualizacji, ponieważ lista jest dokładnie taka sama, nadal wywoła to wywołanie zwrotne.
- Strona jest wstawiana, nawet jeśli nie zawiera 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 wygenerowanej przez LivePagedList lub RxPagedList nie będzie już nieprawidłowo powodować zgłaszania wyjątku IllegalStateException (I96707).
Wersja 3.1.0-alpha01
2 czerwca 2021 r.
Publikacja androidx.paging:paging-*:3.1.0-alpha01 Wersja 3.1.0-alpha01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Klasy dostarczane przez
paging-rxjava3znajdują się teraz w pakiecieandroidx.paging.rxjava3, dzięki czemu nie kolidują zpaging-rxjava2(Ifa7f6).
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że biblioteka Paging czasami wysyłała do elementu RecyclerView zdarzenia no-op differ, co mogło powodować wcześniejsze wywoływanie niektórych odbiorników. (Ic507f, b/182510751)
Wkład zewnętrzny
- Dodano do artefaktu rxjava3 wycofane interfejsy API zgodności PagedList (Id1ce2, b/182497591)
Biblioteka Paging Compose w wersji 1.0.0
Wersja 1.0.0-alpha20
24 maja 2023 r.
Publikacja androidx.paging:paging-compose:1.0.0-alpha20 Wersja 1.0.0-alpha20 zawiera te zmiany.
Nowe funkcje
- Paging Compose obsługuje teraz wyświetlanie podglądu listy danych testowych przez utworzenie
PagingData.from(fakeData)i umieszczenie goPagingDatawMutableStateFlow(np.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Używając tych danych jako danych wejściowych w@Preview, wywołaniacollectAsLazyPagingItems()będą zapewniać podglądLazyPagingItems. (I8a78d, b/194544557)
Poprawki błędów
- Dane z
pager.flow.cachedInzapisane w pamięci podręcznej i zebrane wLazyPagingItemsbędą teraz dostępne natychmiast po przywróceniu stanu bez konieczności asynchronicznego zbierania. Oznacza to, że dane z pamięci podręcznej będą gotowe do wyświetlenia od razu po początkowym utworzeniu kompozycji po przywróceniu stanu. (I97a60, b/177245496)
Wersja 1.0.0-alpha19
3 maja 2023 r.
Publikacja androidx.paging:paging-compose:1.0.0-alpha19 Wersja 1.0.0-alpha19 zawiera te zmiany.
Obsługa wszystkich układów leniwych
Wcześniej biblioteka Paging Compose udostępniała niestandardowe rozszerzenia items i itemsIndexed w LazyListScope, co oznaczało, że nie można było jej używać z innymi układami ładowanymi na żądanie, takimi jak LazyVerticalGrid, HorizontalPager czy inne niestandardowe komponenty ładowane na żądanie z bibliotek Wear i TV. Główną zmianą w tej wersji jest rozwiązanie problemu z brakiem elastyczności.
Aby obsługiwać więcej układów leniwych, musieliśmy utworzyć interfejsy API na innej warstwie – zamiast udostępniać niestandardowy interfejs API items dla każdego układu leniwego, Paging Compose udostępnia teraz nieco niższe metody rozszerzające na LazyPagingItems w itemKey i itemContentType. Te interfejsy API pomagają wdrażać parametry key i contentType w standardowych interfejsach API items, które są już dostępne w przypadku LazyColumn, LazyVerticalGrid oraz ich odpowiedników w interfejsach API, takich jak HorizontalPager. (Ifa13b, Ib04f0, b/259385813)
Oznacza to, że obsługa znaku 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 wydłużają przykłady LazyColumn i LazyRow o kilka wierszy, uznaliśmy, że spójność we wszystkich układach ładowanych z opóźnieniem jest ważnym czynnikiem dla osób, które w przyszłości będą korzystać z biblioteki Paging Compose. 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 rozszerzeń
itemsiitemsIndexedwLazyListScopeobsługują teraz parametrcontentType, co jest odzwierciedleniem obsługi w nowych interfejsach API. (Ib1918, b/255283378)
Aktualizacje zależności
- Biblioteka Paging Compose zaktualizowała zależność z Compose 1.0.5 na Compose 1.2.1. (Ib1918, b/255283378)
Wersja 1.0.0-alpha18
8 lutego 2023 r.
androidx.paging:paging-compose:1.0.0-alpha18 zostaje opublikowany bez zmian. Wersja 1.0.0-alpha18 zawiera te zatwierdzenia.
Wersja 1.0.0-alpha17
24 października 2022 r.
Publikacja androidx.paging:paging-compose:1.0.0-alpha17 Wersja 1.0.0-alpha17 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaliśmy obsługę niestandardowego parametru
CoroutineContextpodczas wywoływania funkcjicollectLazyPagingItems. (I7a574, b/243182795, b/233783862)
Wersja 1.0.0-alpha16
10 sierpnia 2022 r.
Publikacja androidx.paging:paging-compose:1.0.0-alpha16 Wersja 1.0.0-alpha16 zawiera te zatwierdzenia.
Nowe funkcje
- Biblioteka Paging udostępnia teraz logi za pomocą klasy
LazyPagingItems, aby udostępniać informacje o debugowaniu zebrane z obiektu PagingData. - Dzienniki można włączyć za pomocą polecenia
adb shelladb shell setprop log.tag.Paging [DEBUG|VERBOSE]. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
Poprawki błędów
- Naprawiliśmy błąd braku konstruktora
PagingDataDifferpodczas używaniapaging-compose:1.0.0-alpha15zpaging-common:3.1.1lub starszymi wersjami.(b/235256201,b/239868768)
Wersja 1.0.0-alpha15
1 czerwca 2022 r.
Publikacja androidx.paging:paging-compose:1.0.0-alpha15 Wersja 1.0.0-alpha15 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano konstruktory dla
PagingDataAdapteriAsyncPagingDataDiffer, które akceptująCoroutineContextzamiastCoroutineDispatcher. (Idc878)
Poprawki błędów
LazyPagingItemsustawia teraz początkową wartośćloadStatenaLoadState.Loading. (I55043, b/224855902)
Wersja 1.0.0-alpha14
13 października 2021 r.
Publikacja androidx.paging:paging-compose:1.0.0-alpha14 Wersja 1.0.0-alpha14 zawiera te zatwierdzenia.
Wersja 1.0.0-alpha13
29 września 2021 r.
Publikacja androidx.paging:paging-compose:1.0.0-alpha13 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) - Nieużywana funkcja
LazyPagingItems.getAsState()została usunięta (Ie65e4)
Wersja 1.0.0-alpha12
21 lipca 2021 r.
Publikacja androidx.paging:paging-compose:1.0.0-alpha12 Wersja 1.0.0-alpha12 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Funkcje
items(lazyPagingItems)iitemsIndexed(lazyPagingItems)używane do łączenia paginacji zLazyColumn/Rowakceptują teraz parametr klucza opcji, 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. Użyj w zamian zasadylazyPagingItems[index]. (I086cb, b/187339372)
Wersja 1.0.0-alpha11
30 czerwca 2021 r.
Publikacja androidx.paging:paging-compose:1.0.0-alpha11 Wersja 1.0.0-alpha11 zawiera te zatwierdzenia.
Wersja 1.0.0-alpha10
2 czerwca 2021 r.
Publikacja androidx.paging:paging-compose:1.0.0-alpha10 Wersja 1.0.0-alpha10 zawiera te zatwierdzenia.
Wersja 1.0.0-alpha09
18 maja 2021 r.
Publikacja androidx.paging:paging-compose:1.0.0-alpha09 Wersja 1.0.0-alpha09 zawiera te zatwierdzenia.
Poprawki błędów
- Wartości itemCount i funkcja pobierania elementów w LazyPagingItems są teraz możliwe do obserwowania, co pozwala na używanie ich również w LazyVerticalGrid (Ie2446, b/171872064, b/168285687).
Zgodność z Compose
androidx.paging:paging-compose:1.0.0-alpha09jest zgodny tylko z Compose w wersji1.0.0-beta07lub nowszej.
Wersja 1.0.0-alpha08
24 lutego 2021 r.
Publikacja androidx.paging:paging-compose:1.0.0-alpha08 Wersja 1.0.0-alpha08 zawiera te zatwierdzenia.
Zaktualizowano integrację z Compose w wersji 1.0.0-beta01.
Wersja 1.0.0-alpha07
10 lutego 2021 r.
Publikacja androidx.paging:paging-compose:1.0.0-alpha07 Wersja 1.0.0-alpha07 zawiera te zatwierdzenia.
Zaktualizowano integrację z Compose w wersji alfa12.
Wersja 1.0.0-alpha06
28 stycznia 2021 roku
Publikacja androidx.paging:paging-compose:1.0.0-alpha06 Wersja 1.0.0-alpha06 zawiera te zatwierdzenia.
Poprawki błędów
Zaktualizowano, aby zależał od Compose w wersji 1.0.0-alpha11.
Wersja 1.0.0-alpha05
13 stycznia 2021 r.
Publikacja androidx.paging:paging-compose:1.0.0-alpha05 Wersja 1.0.0-alpha05 zawiera te zatwierdzenia.
Zaktualizowano, aby zależał od Compose w wersji 1.0.0-alpha10.
Wersja 1.0.0-alpha04
16 grudnia 2020 roku
Publikacja androidx.paging:paging-compose:1.0.0-alpha04 Wersja 1.0.0-alpha04 zawiera te zatwierdzenia.
Poprawki błędów
- Zaktualizowano właściwości wygody:
CombinedLoadStates.refresh,CombinedLoadStates.prepend,CombinedLoadStates.append, aby przechodziły ze stanuLoadingdo stanuNotLoadingdopiero po tym, jak stany wczytywania zarówno pośrednika, jak i źródła będą miały wartośćNotLoading. Dzięki temu zdalna aktualizacja zostanie zastosowana. (I65619)
Wersja 1.0.0-alpha03
2 grudnia 2020 r.
Publikacja androidx.paging:paging-compose:1.0.0-alpha03 Wersja 1.0.0-alpha03 zawiera te zatwierdzenia.
- Zaktualizowano, aby pasował do wersji Compose 1.0.0-alpha08.
Wersja 1.0.0-alpha02
11 listopada 2020 roku
Publikacja androidx.paging:paging-compose:1.0.0-alpha02 Wersja 1.0.0-alpha02 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano metody
.peek(),.snapshot(),.retry()i.refresh()do interfejsuLazyPagingItems, które udostępniają te same funkcje co interfejsyAsyncPagingDataDiffer/PagingDataAdapter(Iddfe8, b/172041660).
Wersja 1.0.0-alpha01
28 października 2020 r.
Publikacja androidx.paging:paging-compose:1.0.0-alpha01 Wersja 1.0.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
Artefakt paging-compose zapewnia integrację między biblioteką paginowania a Jetpack Compose. Prosty przykład użycia:
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
Wersja 3.0.1
Wersja 3.0.1
21 lipca 2021 r.
Publikacja androidx.paging:paging-*:3.0.1 Wersja 3.0.1 zawiera te zatwierdzenia.
Poprawki błędów
- Dostęp do
PagedList.dataSourcez wartości początkowej wygenerowanej przezLivePagedListlubRxPagedListnie będzie już nieprawidłowo powodować zgłaszania wyjątku IllegalStateException (I96707).
Wersja 3.0.0
Wersja 3.0.0
5 maja 2021 roku
Publikacja androidx.paging:paging-*:3.0.0 Wersja 3.0.0 zawiera te zatwierdzenia.
Główne funkcje wersji 3.0.0
Większość dotychczasowego interfejsu API z biblioteki Paging w wersji 2.x.x została wycofana na rzecz nowych interfejsów API Paging 3, aby wprowadzić te ulepszenia:
- Pełna obsługa współprogramów i środowiska Flow w języku Kotlin
- Pomoc dotycząca anulowania
- Wbudowane sygnały stanu wczytywania i błędu
- Funkcja ponawiania i odświeżania
- Wszystkie 3 podklasy DataSource zostały połączone w jedną klasę PagingSource.
- Niestandardowe przekształcenia stron, w tym wbudowane przekształcenie do dodawania separatorów
- Wczytywanie nagłówków i stopek stanu
Wersja 3.0.0-rc01
21 kwietnia 2021 r.
Publikacja androidx.paging:paging-*:3.0.0-rc01 Wersja 3.0.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że biblioteka Paging czasami wysyłała do elementu RecyclerView zdarzenia no-op differ, co mogło powodować wcześniejsze wywoływanie niektórych odbiorników. (Ic507f, b/182510751)
Wersja 3.0.0-beta03
24 marca 2021 r.
Publikacja androidx.paging:paging-*:3.0.0-beta03 Wersja 3.0.0-beta03 zawiera te zatwierdzenia.
Poprawki błędów
- Zmieniliśmy sposób obsługi elementów zastępczych podczas ponownego wczytywania listy, aby zapobiec nieoczekiwanym przeskokom w widoku RecyclerView. Szczegółowe informacje znajdziesz w 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 głównym wątku, gdy wywoływana jest funkcja.build(). (b/182798948)
Wersja 3.0.0-beta02
10 marca 2021 r.
Publikacja androidx.paging:paging-*:3.0.0-beta02 Wersja 3.0.0-beta02 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Rozszerzenia Rx3 prawidłowo propagują teraz wymaganie
@ExperimentalCoroutinesApiOpt-In. Wcześniej były one oznaczane w metodzie@get, która jest ignorowana przez kompilator Kotlin z tych powodów: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)
Poprawki błędów
- Wymuszanie ograniczeń dotyczących publicznego korzystania z eksperymentalnych interfejsów API (I6aa29, b/174531520)
- Naprawiliśmy błąd, który powodował, że po wywołaniu zdalnego odświeżania wartość
PagingStatezawsze wynosiłanull. - Rozwiązaliśmy problem, który powodował, że puste strony zwracane przez PagingSource mogły uniemożliwiać ponowne pobieranie danych przez bibliotekę Paging w celu spełnienia warunku
prefetchDistance, co powodowało „zawieszanie się” biblioteki Paging.
Wersja 3.0.0-beta01
10 lutego 2021 r.
Publikacja androidx.paging:paging-*:3.0.0-beta01 Wersja 3.0.0-beta01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Otoczki Rx2 i Rx3 udostępniają teraz eksperymentalną adnotację, od której zależą. Jeśli używasz otoczek zgodności Rx w bibliotekach paging-rxjava2 lub paging-rxjava3, musisz teraz oznaczać użycia za pomocą adnotacji
@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 2DataSourceza pomocą ścieżek zgodności - Wywołania
isInvalidpodczas inicjowaniaDataSource, gdy są używane na ścieżkach zgodności, są teraz prawidłowo uruchamiane w funkcji fetchDispatcher zamiast w głównym wątku. Rozwiązuje to problemIllegalStateExceptionspowodowany dostępem do bazy danych w głównym wątku podczas korzystania z implementacjiPagingSourcebiblioteki Room.
Wersja 3.0.0-alpha13
27 stycznia 2021 r.
Publikacja androidx.paging:paging-*:3.0.0-alpha13 Wersja 3.0.0-alpha13 zawiera te zatwierdzenia.
Zmiany w interfejsie API
PagingSource.getRefreshKeynie jest już opcjonalne, ale jest teraz funkcją abstrakcyjną bez domyślnej implementacji. Użytkownicy, którzy przenoszą dane, mogą nadal zwracać domyślną implementację, która po prostu zwracanull, alegetRefreshKey()powinna mieć rzeczywistą implementację zwracającą klucz na podstawie bieżącej pozycji przewijania użytkownika, która umożliwia bibliotece Paging dalsze ładowanie wyśrodkowane wokół obszaru widocznego za pomocąPagingState.anchorPosition, jeśli to możliwe. (I4339a)InvalidatingPagingSourceFactoryma teraz status klasy końcowej (Ia3b0a)- Umożliwia skonfigurowanie separatora końcowego (nagłówka / stopki) za pomocą dodatkowego opcjonalnego parametru SeparatorType. Dostępne są 2 opcje:
FULLY_COMPLETE– dotychczasowe działanie; przed dodaniem separatorów końcowych poczekaj, aż zarówno PagingSource, jak i RemoteMediator oznaczą endOfPaginationReached. Jeśli nie jest używany element RemoteMediator, stan zdalnego ładowania jest ignorowany. Jest to przydatne głównie wtedy, gdy chcesz wyświetlać separatory sekcji tylko wtedy, gdy sekcja jest w pełni załadowana, w tym pobrana ze zdalnego źródła, np. z sieci.SOURCE_COMPLETE– oczekuj tylko, aż PagingSource oznaczy koniec paginacji, nawet jeśli używany jest RemoteMediator. Dzięki temu nagłówki i stopki mogą być wyświetlane synchronicznie z początkowym wczytaniem, co zapobiega konieczności przewijania przez użytkowników w celu zobaczenia separatorów terminala. (Ibe993, b/174700218)
Poprawki błędów
- Naprawiono rzadki wyciek pamięci, który występuje, gdy obiekt PagingSource zostanie unieważniony, zanim obiekt PageFetcher zdąży rozpocząć z niego wczytywanie. (I9606b, b/174625633)
Wersja 3.0.0-alpha12
13 stycznia 2021 r.
Publikacja androidx.paging:paging-*:3.0.0-alpha12 Wersja 3.0.0-alpha12 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- InvalidatingPagingSourceFactory nie jest już klasą abstrakcyjną, ponieważ nigdy nie miała żadnych metod abstrakcyjnych. (I4a8c4)
- Dodano przeciążenie funkcji .cachedIn(), które w przypadku użytkowników Javy akceptuje ViewModel zamiast Lifecycle lub CoroutineScope. (I97d81, b/175332619)
- Zezwól wywołującym w Javie na używanie operacji przekształcania PagingData w sposób asynchroniczny, akceptując Executor w argumentach operatora przekształcania. Wszystkie operatory transformacji -Sync mają teraz usunięty sufiks -Sync, a użytkownicy Kotlin Coroutine będą musieli rozróżniać je, wywołując funkcję rozszerzenia, która akceptuje blok zawieszający.
Wszystkie operatory transformacji PagingData zostały przeniesione do rozszerzeń w statycznej klasie PagingDataTransforms. Użytkownicy Javy będą musieli wywoływać je za pomocą statycznych funkcji pomocniczych, np.
PagingDataTransforms.map(pagingData, transform)W przypadku użytkowników języka Kotlin składnia jest taka sama, ale trzeba zaimportować funkcję. (If6885, b/172895919)
Poprawki błędów
- Rozwiązaliśmy błąd, który powodował, że funkcja
RemoteMediator.load()nie była wywoływana podczas funkcjiadapter.refresh(), jeśli osiągnięto już koniec paginacji.
Wersja 3.0.0-alpha11
16 grudnia 2020 roku
Publikacja androidx.paging:paging-*:3.0.0-alpha11 Wersja 3.0.0-alpha11 zawiera te zatwierdzenia.
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 w trakcie opracowywania):
- przepływ jest buforowany, a aplikacja nie jest zamykana (np. przepływ jest buforowany w modelu widoku, a aktywność jest ponownie tworzona w procesie);
- źródło stronicowania jest uwzględniane, symbole zastępcze są włączone, a układ nie jest naprzemienny.
Zmiany w interfejsie API
PagingSource.getRefreshKey()to teraz stabilny interfejs API (I22f6f, b/173530980)PagingSource.invalidatenie jest już funkcją otwartą. Jeśli chcesz otrzymywać powiadomienia o unieważnieniu, zamiast zastępować metodę invalidate, wywołaj metodę registerInvalidatedCallback. (I628d9, b/173029013, b/137971356)- Klasa Pager ma teraz jeden eksperymentalny konstruktor obok zwykłych konstruktorów, zamiast udostępniać eksperymentalne interfejsy API w nieeksperymentalnym publicznym interfejsie API za pomocą adnotacji opt-in. (I9dc61, b/174531520)
- Zaktualizowano właściwości wygody:
CombinedLoadStates.refresh,CombinedLoadStates.prepend,CombinedLoadStates.append, aby przechodziły ze stanuLoadingdo stanuNotLoadingdopiero po tym, jak stany wczytywania zarówno pośrednika, jak i źródła będą miały wartośćNotLoading. Dzięki temu zdalna aktualizacja zostanie zastosowana. (I65619) Parametr LoadParams.pageSize został usunięty (był już wycofany). Zalecamy użycie
LoadParams.loadSizew obiekcie PagingSource.LoadParams.loadSizejest 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, wartość
pageSizemoże nie być zgodna z wartościąPagingConfig.pageSize, jeśli ustawisz też wartośćinitialLoadSize. Jeśli jest to ważne w przypadku Twoich testów, spróbuj użyć klasy Pager lub PagedList, która wewnętrznie ustawi prawidłową wartość PageSize dla metod wczytywania DataSource. (I98ac7, b/149157296)
Poprawki błędów
- Rozwiązaliśmy problem z awarią spowodowaną przez wyjątek 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 dla PREPEND / APPEND nie aktualizował się do
NotLoading(endOfPaginationReached = true)natychmiast po początkowym wczytaniu, jeśli ustawiony był RemoteMediator (I8cf5a). - Rozwiązaliśmy problem polegający na tym, że interfejsy API po stronie prezentera, takie jak .snapshot(), .peek() itp., zwracały poprzednią (nieaktualną) listę w ramach aktualizacji ListUpdateCallback.
- Naprawiono błąd, który powodował, że operatory Separators nie dodawały nagłówków ani stopek, gdy były używane z RemoteMediator.
- Naprawiono błąd, który powodował, że aktualizacje LoadState do stanu NotLoading dla RemoteMediator utykały w stanie Loading.
- Naprawiono błąd, w którym interfejs API zgodności Paging 2.0,
.asPagingSourceFactory(), mógł powodować inicjowanieDataSourcew nieprawidłowym elemencie CoroutineDispatcher. Rozwiązuje to problem z awarią i możliwymi przypadkami ANR, zwłaszcza w przypadku korzystania z bieżącej implementacji PagingSource w bibliotece Room, która korzysta z tej ścieżki zgodności.
Wersja 3.0.0-alpha10
2 grudnia 2020 r.
Publikacja androidx.paging:paging-*:3.0.0-alpha10 Wersja 3.0.0-alpha10 zawiera te zatwierdzenia.
Zmiany w interfejsie API
Wycofane interfejsy API
dataRefreshFlowidataRefreshListenerzostały usunięte, ponieważ są zbędne w przypadku aktualizacji loadStateFlow / Listener. W przypadku migracji odpowiednikiem loadStateFlow jest:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
Poprawki błędów
- endOfPaginationReached w przypadku RemoteMediator
REFRESHjest teraz prawidłowo propagowany do aktualizacji LoadState i zapobiega wywoływaniu zdalnych funkcjiAPPENDiPREPEND. (I94a3f, b/155290248) - Wyświetlanie pustej listy z powodu pustej strony początkowej lub intensywnego filtrowania nie będzie już uniemożliwiać rozpoczęcia wczytywania stron
PREPENDlubAPPEND. (I3e702, b/168169730) - Rozwiązaliśmy problem polegający na tym, że funkcja
getRefreshKeynie była wywoływana w przypadku kolejnych generacji elementu PagingSource, gdy unieważnienia następowały szybko. (I45460, b/170027530)
Wkład zewnętrzny
- Dodano nową klasę abstrakcyjną InvalidatingPagingSourceFactory z interfejsem API
.invalidate(), który przekazuje unieważnienie do wszystkich obiektów PagingSource, które emituje. Dziękujemy @claraf3! (Ie71fc, b/160716447)
Znane problemy
- Nagłówki i stopki z przekształcenia .insertSeparators() mogą nie pojawiać się od razu podczas korzystania z RemoteMediator b/172254056
- Używanie RemoteMediator może spowodować zablokowanie zdalnego
LoadState, jeśli unieważnienie iPagingSource.load(LoadParams.Refresh(...))zakończą się przed zwróceniem przezRemoteMediator.load()wartości b/173717820
Wersja 3.0.0-alpha09
11 listopada 2020 roku
Publikacja androidx.paging:paging-*:3.0.0-alpha09 Wersja 3.0.0-alpha09 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Całkowicie wycofaj metody dataRefreshFlow / Listener z klauzulą replaceWith. (I6e2dd)
Poprawki błędów
- Poprawka błędu
IllegalArgumentException, który pojawiał się podczas używania separatorów z klasą RemoteMediator i wywoływania unieważnienia, gdy nadal trwało zdalne wczytywanie, które zwróciłoby endOfPagination (I3a260).
Wersja 3.0.0-alpha08
28 października 2020 r.
Publikacja androidx.paging:paging-*:3.0.0-alpha08 Wersja 3.0.0-alpha08 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Warianty
DataSource.InvalidatedCallbackw językach Kotlin i Java zostały połączone przez włączenie konwersji SAM w Kotlinie za pomocą interfejsu funkcyjnego (dostępnego w Kotlinie 1.4). Rozwiązuje to też problem, w którym wywołania zwrotne unieważniania w wersji Kotlina nie były wywoływane po przekształceniu przez.maplub.mapByPage. (I1f244, b/165313046)
Poprawki błędów
- Znacznie ulepszyliśmy interakcję biblioteki Paging z komponentem ViewPager. W szczególności funkcja stronicowania nie będzie już anulować połączenia
RemoteMediator#loadz powodu unieważnienia strony. Nie będzie też wysyłać żądania wczytania z dodawaniem na początku lub na końcu (jeśli wymagane jest odświeżenie), dopóki żądanie odświeżenia nie zostanie zrealizowane. (I6390b, b/162252536) - Sprawdzanie API pod kątem MissingGetterMatchingBuilder jest włączone w przypadku androidx (I4bbea, b/138602561).
- Naprawiono błąd, który powodował awarię narzędzi
.withLoadState*ConcatAdapterz powodu powiadamiania elementu RecyclerView z wątku w tle (I18bb5, b/170988309). - Naprawiliśmy błąd, który powodował, że wczytanie bardzo małej, niepustej strony czasami uniemożliwiało prawidłowe wywoływanie wczytywania przez wstępne pobieranie.Iffda3 b/169259468
Wersja 3.0.0-alpha07
1 października 2020 roku
Publikacja androidx.paging:paging-*:3.0.0-alpha07 Wersja 3.0.0-alpha07 zawiera te zmiany.
Zmiany w interfejsie API
- Operatory asynchronicznego stronicowania danych oparte na Guavie akceptują teraz parametr Executor do kontrolowania kontekstu wykonania. (Id4372)
Poprawki błędów
- Rozwiązanie problemu z wyjątkiem IndexOutOfBounds zgłaszanym w klasie RemoteMediator z powodu sytuacji wyścigu. (I00b7f, b/165821814)
- Naprawiliśmy sytuację wyścigu w konwersji DataSource –> PagingSource, który mógł powodować ignorowanie przez wynikowy element PagingSource sygnałów unieważnienia z DataSource.
- Rozwiązaliśmy problem w logice pobierania stron, który czasami powodował, że nowe generacje elementu PagingSource nie były odbierane, dopóki nie została wywołana funkcja PagingDataAdapter.refresh().
- Rozwiązaliśmy problem, który powodował, że pozycja przewijania była czasami tracona podczas korzystania ze źródła danych przekonwertowanego na PagingSource (np. wygenerowanego przez Room) w połączeniu z RemoteMediator.
Wkład zewnętrzny
- Dziękujemy @simonschiller za dodanie operatorów transformacji asynchronicznej opartych na RxJava2, RxJava3 i Guava dla PagingData.
Wersja 3.0.0-alpha06
2 września 2020 r.
Publikacja androidx.paging:paging-*:3.0.0-alpha06 Wersja 3.0.0-alpha06 zawiera te zatwierdzenia.
Zmiany w interfejsie API
UnsupportedOperationExceptionz wyraźniejszymi komunikatami dotyczącymi braku obsługi stabilnych identyfikatorów jest teraz zgłaszany za każdym razem, gdy wywoływana jest funkcjaPagingDataAdapter.setHasStableIds. (Ib3890, b/158801427)
Poprawki błędów
- Funkcja insertSeparators nie filtruje już pustych stron, dzięki czemu odległość wstępnego pobierania jest uwzględniana przez prezentera nawet w przypadkach, gdy wstawianych jest wiele pustych stron. (I9cff6, b/162538908)
Wersja 3.0.0-alpha05
19 sierpnia 2020 r.
Publikacja androidx.paging:paging-*:3.0.0-alpha05 Wersja 3.0.0-alpha05 zawiera te zatwierdzenia.
Poprawki błędów
- Stronicowanie teraz prawidłowo pobiera strony z wyprzedzeniem, nawet jeśli prezentowane dane są mocno filtrowane.
- Przywracanie
LoadResult.Errordo ponownej próby wczytania nie powoduje już nieprawidłowego ponownego wywoływania ponownej próby dostępu do elementu.
Wkład zewnętrzny
- Dziękujemy Clarze F. za pomoc w porządkowaniu testów. (549612)
Wersja 3.0.0-alpha04
5 sierpnia 2020 r.
Publikacja androidx.paging:paging-*:3.0.0-alpha04 Wersja 3.0.0-alpha04 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano interfejs
peek()API doAsyncPagingDataDifferiPagingDataAdapter, aby umożliwić dostęp do danych bez wczytywania strony wywołującej. (I38898, b/159104197) - Dodano interfejs API
snapshot()doPagingDataAdapteriAsyncPagingDataDiffer, aby umożliwić pobieranie prezentowanych produktów bez wywoływania pobierania strony. (I566b6, b/159104197) - Dodano konstruktor
PagingData.from(List<T>), który umożliwia wyświetlanie statycznych list, które można łączyć z ogólnym przepływem PagingData, aby wyświetlać statyczne listy 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 udostępniać stan prezentowanych elementów podczas odświeżania, ale dzięki ulepszeniom dotyczącym czasu wywołania zwrotnego loadState Flow / Listener i właściwości itemCount są one zbędne (Ia19f3).
- Dodano otoczki zgodności RxJava3 dla
PagingSourceiRemoteMediator(I49ef3, b/161480176)
Poprawki błędów
PositionalDataSourceprzekonwertowane naPagingSourceza pomocą funkcji pomocniczejtoPagingSourceFactory, w tymPagingSourcewygenerowane przez Room, teraz prawidłowo oznaczają się jako obsługujące przeskakiwanie. (I3e84c, b/162161201)- Naprawiono błąd, w którym użycie synchronicznej wersji funkcji submitData czasami prowadziło do wyścigu, który powodował błąd
ClosedSendChannelException(I4d702, b/160192222).
Wkład zewnętrzny
- Dziękujemy Zacowi Sweersowi za dodanie w imieniu Slacka otoczek zgodności z RxJava3. (I49ef3, b/161480176)
Wersja 3.0.0-alpha03
22 lipca 2020 r.
Publikacja androidx.paging:paging-*:3.0.0-alpha03 Wersja 3.0.0-alpha03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Konstruktor PagingState jest teraz publiczny, co powinno ułatwić testowanie implementacji getRefreshKey() (I8bf15).
- Ukryto warianty funkcji mapy Kotlin DataSource przed Javą, aby rozwiązać niejednoznaczność między wariantami oryginalnymi a wariantami Kotlin. (If7b23, b/161150011)
- Nadmiarowe interfejsy API, które miały ułatwiać pracę użytkownikom Kotlina, zostały oznaczone adnotacją @JvmSynthetic (I56ae5).
- Dodano przeciążenia konstruktora LoadResult.Page, które domyślnie ustawiają wartości itemsBefore i itemsAfter na COUNT_UNDEFINED (I47849).
- Zmieniliśmy działanie istniejących operatorów PagingData, aby akceptowali metody zawieszające, i wprowadziliśmy nowe operatory mapSync, flatMapSync i filterSync, które nie zawieszają działania i są przeznaczone dla użytkowników Javy. Dotychczasowe metody przekształcania zostały przeniesione do funkcji rozszerzeń, więc użytkownicy Kotlina będą musieli je teraz importować. (I34239, b/159983232)
Poprawki błędów
- Obiekty Room (i PositionalDataSource) PagingSource będą teraz wyświetlać separator początkowy jako część pierwszej strony, więc użytkownik nie będzie musiał przewijać, aby go zobaczyć. (I6f747, b/160257628)
- Dostęp do elementów w miejscach zastępczych teraz prawidłowo wywołuje wczytywanie PagingSource, dopóki nie zostanie zwrócona strona, która spełnia żądany indeks po przekształceniu przez PagingData.filter() (I95625, b/158763195).
- Naprawiliśmy błąd, który powodował, że przewijanie po zwróceniu błędu przez PagingSource mogło uniemożliwiać ponawianie próby przez PagingDataAdapter.retry(). (I1084f, b/160194384)
- Rozwiązuje problem, który powodował, że po zamknięciu strony dostęp do elementu mógł nie powodować wczytywania stron, mimo że dostęp do elementu mieścił się w zakresie prefetchDistance (Ie95ae, b/160038730).
- Ustawienie PagingConfig.maxSize nie włącza już symboli zastępczych po zdarzeniu usunięcia (I2be29, b/159667766)
Wersja 3.0.0-alpha02
24 czerwca 2020 r.
Publikacja androidx.paging:paging-*:3.0.0-alpha02 Wersja 3.0.0-alpha02 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano przeciążenia konstruktora
PagingConfigz częstymi wartościami domyślnymi (I39c50, b/158576040) - Dodano przeciążenia konstruktorów klas
PagingDataAdapteriAsyncPagingDataDifferz częstymi wartościami domyślnymi (Ie91f5). - Interfejsy API adaptera
dataRefreshFlowidataRefreshListenerprzekazują teraz wartość logiczną, aby wskazać, czyPagingDatajest pusty (I6e37e, b/159054196). - Dodano interfejsy API RxJava i Guava dla RemoteMediator – RxRemoteMediator i ListenableFutureRemoteMediator
- Dodano pomocnicze funkcje do PagingState do uzyskiwania dostępu do typowych elementów, np.
isEmpty()ifirstItemOrNull()(I3b5b6, b/158892717).
Poprawki błędów
- Biblioteka Pager sprawdza teraz, czy w fabryce nie jest ponownie używane źródło danych PagingSource, aby zapobiec przypadkowemu ponownemu użyciu nieprawidłowych źródeł danych PagingSource, które powodowały niejasny błąd (I99809, b/158486430).
- Błędy związane z odświeżaniem RemoteMediator nie uniemożliwiają już ładowania PagingSource (I38b1b, b/158892717)
- Wersja funkcji
submitData, która nie wstrzymuje działania, nie powoduje już awarii z powodu jednoczesnego zbierania danych w wielu obiektachPagingData, gdy jest wywoływana po wersjisubmitData, która wstrzymuje działanie. (I26358, b/158048877) - Naprawiono 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.
Publikacja androidx.paging:paging-*:3.0.0-alpha01 Wersja 3.0.0-alpha01 zawiera te zatwierdzenia.
Biblioteka Paging została zaktualizowana do wersji 3.0, aby umożliwić korzystanie z kilku ważnych nowych funkcji.
Nowe funkcje wersji 3.0
- Pełna obsługa współprogramów i środowiska Flow w języku Kotlin.
- Obsługa ładowania asynchronicznego za pomocą funkcji zawieszania współprogramów, RxJava Single lub Guava ListenableFuture.
- Wbudowane sygnały stanu wczytywania i błędu do projektowania interfejsu użytkownika, w tym funkcji ponawiania i odświeżania.
- Ulepszenia warstwy repozytorium
- Uproszczony interfejs źródła danych
- Uproszczona paginacja sieci i bazy danych
- Pomoc dotycząca anulowania
- Ulepszenia warstwy prezentacji
Znane problemy
- Dokumentacja Javadoc biblioteki Paging 3 nie jest jeszcze dostępna. W międzyczasie skorzystaj z przewodników, do których linki znajdziesz powyżej, lub z dokumentacji języka Kotlin. (b/158614050)
Wersja 2.1.2
Wersja 2.1.2
18 marca 2020 r.
Publikacja androidx.paging:paging:2.1.2 Wersja 2.1.2 zawiera te zmiany w porównaniu z wersją 2.1.0.
Poprawki błędów
- Poprawka dla
IndexOutOfBoundsExceptionw rzadkich przypadkach podczas konwersji pozycji w trakcie unieważniania.
Problem z wersją
Wersja stronicowania
2.1.1została nieprawidłowo opublikowana z nieprawidłowo skonfigurowanej gałęzi, co spowodowało udostępnienie częściowo zaimplementowanych interfejsów API i funkcji, które mają się pojawić w przyszłej wersji.Stronicowanie
2.1.2zawiera poprawkę dotyczącą wyważania obciążenia, która została pierwotnie wydana w wersji 2.1.1, ale tym razem została prawidłowo wybrana z wersji 2.1.0. Jeśli korzystasz obecnie z wersji 2.1.1, zdecydowanie zalecamy przejście na tę wersję.
Wersja 2.1.1
Wersja 2.1.1
18 grudnia 2019 r.
Publikacja androidx.paging:paging-*:2.1.1 Wersja 2.1.1 zawiera te zatwierdzenia.
Poprawki błędów
- Wstępne wczytywanie sąsiadujących ze sobą elementów z obiektów PositionalDataSources 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.
Strona 2.1.0 jest publikowana bez zmian w stosunku do strony 2.1.0-rc01.
Wersja 2.1.0-rc01
6 grudnia 2018 r.
Strona 2.1.0-rc01 jest publikowana bez zmian w stosunku do strony 2.1.0-beta01.
Wersja 2.1.0-beta01
1 listopada 2018 r.
Strona 2.1.0-beta01 jest publikowana bez zmian w stosunku do strony 2.1.0-alpha01.
Wersja 2.1.0-alpha01
12 października 2018 r.
Biblioteka stronicowania 2.1.0-alpha01 zawiera 2 główne dodatki – usuwanie stron i biblioteki rozszerzeń KTX dla każdego artefaktu – oraz kilka innych zmian w interfejsie API i poprawek błędów.
Zmiany w interfejsie API
- Dodano parametr
PagedList.Config.Builder.setMaxSize(), który ogranicza liczbę wczytanych do pamięci elementów. - Dodaliśmy
androidx.paging.Config()jako alternatywę dlaPagedList.Config.Builderw języku Kotlin - Dodaliśmy
androidx.paging.PagedList()jako alternatywę dlaPagedList.Builderw języku Kotlin - Dodaliśmy
DataSourceFactory.toLiveData()jako alternatywę dlaLivePagedListBuilderw języku Kotlin - Dodano
DataSourceFactory.toObservable()itoFlowable()jako alternatywy dlaRxPagedListBuilderw języku Kotlin - Dodano
AsyncPagedListDiffer.addPagedListListener()do słuchania, gdy PagedList jest zamieniana. b/111698609 - Dodano wariant
PagedListAdapter.onCurrentListChanged(), który przechodzi starą i nową listę, a poprzedni wariant został wycofany. - Dodano warianty
PagedListAdapter/AsyncPagedListDiffer.submitList(), które przyjmują dodatkowe wywołanie zwrotne uruchamiane, gdy lista podzielona na strony jest wyświetlana po porównaniu. Umożliwia to synchronizowanie zamiany obiektu PagedList z innymi aktualizacjami interfejsu. b/73781068 PagedList.getLoadedCount(), aby poinformować Cię, ile elementów jest w pamięci. Pamiętaj, że jeśli symbole zastępcze są wyłączone, zwracana wartość jest zawsze równa.size().
Poprawki błędów
- Naprawiono sytuację wyścigu podczas porównywania różnic, jeśli listy są ponownie używane. b/111591017
PagedList.loadAround()teraz zgłaszaIndexOutOfBoundsException, gdy indeks jest nieprawidłowy. Wcześniej mogło dojść do awarii z niejasnym innym wyjątkiem.- Rozwiązaliśmy problem, w którym 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.
Stronicowanie 2.0.0 zostało wydane z jedną poprawką.
Poprawki błędów
- Naprawiono błąd, który mógł występować podczas bardzo szybkiego przewijania z użyciem symbolu
PositionalDataSourcei symboli zastępczych 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 (wyłączone symbole zastępcze, PositionalDataSource) b/80149146
- (Wprowadzono już w
1.0.1) Naprawiliśmy awarie, w którychPagedListAdapteriAsyncPagedListDiffernie sygnalizowały zdarzeń przeniesienia. b/110711937
Zależności sprzed Androida X
W przypadku wersji biblioteki Paging sprzed Androida X, które są wymienione poniżej, 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.
Stronicowanie 1.0.1 zostało wydane z jedną poprawką błędu w runtime. Ze względu na stabilność zdecydowanie zalecamy używanie 1.0.1. Wydana została też biblioteka Paging RxJava2 1.0.1, która jest identyczna z biblioteką 1.0.0-rc1.
Poprawki błędów
- Rozwiązaliśmy problem z awariami, które występowały, gdy funkcje
PagedListAdapteriAsyncPagedListDiffernie sygnalizowały zdarzeń przenoszenia. b/110711937
RxJava2 w wersji 1.0.0
RxJava2 w wersji 1.0.0-rc1
16 maja 2018 r.
Biblioteka Paging RxJava2 1.0.0-rc1 przechodzi do wersji kandydującej do publikacji bez zmian w stosunku do początkowej wersji alfa.
Wersja 1.0.0
Wersja 1.0.0-rc1
19 kwietnia 2018 r. Wersja kandydująca do publikacji dotycząca stronicowania
Nie mamy już żadnych znanych problemów ani nowych funkcji zaplanowanych na wersję 1.0.0 stronicowania. Przenieś swoje projekty na wyższy abonament, aby korzystać z 1.0.0-rc1, i pomóż nam przetestować tę usługę, abyśmy mogli udostępnić niezawodną 1.0.0.
W tej wersji nie wprowadzono żadnych zmian. Jest ona taka sama jak wersja 1.0.0-beta1.
Wersja 1.0.0-beta1
5 kwietnia 2018 r.
Paging będzie przez krótki czas w wersji beta, zanim przejdzie do wersji kandydującej do publikacji.
Nie planujemy dalszych zmian w interfejsie API Paging 1.0, a wymagania dotyczące wszelkich zmian w interfejsie API są bardzo wysokie.
Wsparcie dla RxJava2 w bibliotece Paging w wersji alfa jest udostępniane jako osobny moduł opcjonalny (android.arch.paging:rxjava2:1.0.0-alpha1) i do czasu ustabilizowania będzie tymczasowo wersjonowane oddzielnie.
Ta nowa biblioteka jest alternatywą dla LivePagedListBuilder w RxJava2. Umożliwia tworzenie Observable i Flowable, przyjmując 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
RxPagedListBuilderjest dodawany za pomocą nowego artefaktuandroid.arch.paging:rxjava2.
Zmiany w interfejsie API
Zmiany w interfejsie API, które wyjaśniają rolę wykonawców w kreatorach:
Zmieniono nazwę
setBackgroundThreadExecutor()nasetFetchExecutor()(wPagedList.BuilderiLivePagedListBuilder)Zmieniono nazwę
setMainThreadExecutor()nasetNotifyExecutor()(wPagedList.Builder).
Ustawiono
PagedList.mCallbacksjako prywatny.
Poprawki błędów
LivePagedListBuilderwywołuje początkowe wczytaniePagedListna określonym wykonawcy zamiast w puli wątków Arch Components IO.Naprawiono zachowanie unieważniania w wewnętrznych otokach
DataSource(używanych do implementowaniaDataSource.map, a także ładowaniaPositionalDataSourcez wyłączonymi symbolami zastępczymi) b/77237534
Wersja 1.0.0-alpha7
21 marca 2018 r.
Paging 1.0.0-alpha7 zostaje udostępniony wraz z funkcją Cykle życia 1.1.1. Wersja alfa7 interfejsu Paging zależy od przeniesienia wspomnianej powyżej klasy Function, dlatego musisz zaktualizować zależność lifecycle:runtime do wersji android.arch.lifecycle:runtime:1.1.1.
Wersja alpha7 Paging ma być ostatnią przed wprowadzeniem wersji beta.
Zmiany w interfejsie API
- Obiekty
DataSource.LoadParamsmają teraz publiczny konstruktor, a obiektyDataSource.LoadCallbacksą teraz abstrakcyjne. Umożliwia to opakowanieDataSourcelub bezpośrednie testowanieDataSourceza pomocą próbnego wywołania zwrotnego. b/72600421 - Mappery dla DataSource i DataSource.Factory
map(Function<IN,OUT>)umożliwia przekształcanie, opakowywanie lub dekorowanie wyników wczytanych przezDataSource.mapByPage(<List<IN>,List<OUT>>)umożliwia to samo w przypadku przetwarzania wsadowego (np. jeśli elementy załadowane z SQL muszą dodatkowo wysyłać zapytania do oddzielnej bazy danych, można to zrobić w ramach przetwarzania wsadowego).
- Dodano
PagedList#getDataSource()jako metodę pomocniczą. b/72611341 - Z interfejsu API usunięto wszystkie wycofane klasy, w tym pozostałości pakietu
recyclerview.extensionsiLivePagedListProvider. DataSource.Factoryzmieniono z interfejsu na klasę abstrakcyjną, aby włączyć funkcje mapy.
Poprawki błędów
- Zmieniono klasę Builders na finalną. b/70848565
- Implementacja biblioteki Room
DataSourcezostała poprawiona, aby obsługiwać zapytania dotyczące wielu tabel. Ta poprawka jest zawarta w bibliotece Room 1.1.0-beta1 (patrz wyżej). - Naprawiliśmy błąd, który powodował, że funkcja
BoundaryCallback.onItemAtEndLoadednie była wywoływana w przypadku funkcjiPositionalDataSource, jeśli symbole zastępcze były włączone, a całkowity rozmiar był dokładną wielokrotnością rozmiaru strony.
Wersja 1.0.0-alpha5
22 stycznia 2018 r.
Poprawki błędów
- Rozwiązywanie problemów z wczytywaniem strony, gdy wyłączone są symbole zastępcze b/70573345
- Dodatkowe logowanie do śledzenia błędu IllegalArgumentException b/70360195 (i spekulacyjna poprawka po stronie Room)
- Poprawki w przykładowym kodzie Javadoc b/70411933, b/71467637