Пейджинг
В этой таблице перечислены все артефакты, входящие в группу androidx.paging .
| Артефакт | Стабильный релиз | Предварительная версия релиза | Бета-версия | Альфа-версия |
|---|---|---|---|---|
| пейджин-* | 3.3.6 | - | 3.4.0-beta01 | - |
| paging-compose | 3.3.6 | - | 3.4.0-beta01 | - |
Объявление зависимостей
Чтобы добавить зависимость от Paging, необходимо добавить репозиторий Google Maven в ваш проект. Для получения дополнительной информации ознакомьтесь с информацией в репозитории Google Maven .
Добавьте зависимости для необходимых артефактов в файл build.gradle вашего приложения или модуля:
Круто
dependencies { def paging_version = "3.3.6" 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.4.0-beta01" }
Котлин
dependencies { val paging_version = "3.3.6" 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.4.0-beta01") }
Для получения информации об использовании расширений Kotlin см. документацию ktx .
Для получения дополнительной информации о зависимостях см. раздел «Добавление зависимостей сборки» .
Обратная связь
Ваши отзывы помогают улучшить Jetpack. Сообщите нам, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете проголосовать за существующую проблему, нажав кнопку со звездочкой.
Для получения более подробной информации см. документацию по системе отслеживания ошибок .
Версия 3.4
Версия 3.4.0-beta01
17 декабря 2025 г.
Выпущена версия androidx.paging:paging-*:3.4.0-beta01 . Версия 3.4.0-beta01 содержит следующие коммиты .
Исправлены ошибки
- Исправлена ошибка, приводящая к конфликту состояний между загрузками
RecyclerViewиRefreshвызывающимIndexOutOfBoundsExceptionвRecyclerView. Прерванные обновления пользовательского интерфейса из-за непрерывных загрузокRefreshмогут привести к рассинхронизации состояния постраничной навигации сRecyclerView. Это исправлено путем сброса состояния постраничной навигации до состояния до обновления, если обновление прерывается (т. е. последовательной загрузкойRefresh). ( I771b0 , b/409809768 )
Версия 3.4.0-alpha04
10 сентября 2025 г.
Выпущена версия androidx.paging:paging-*:3.4.0-alpha04 . Версия 3.4.0-alpha04 содержит следующие коммиты .
Изменения в API
- Добавлен новый API
PagingStateclosestItemAroundPositionдля получения загруженного элемента, наиболее близкого к целевой позиции и соответствующего входному предикату. Это можно использовать для генерации ключей обновления на основе элементов, когда идеальный якорный элемент находится рядом, но не точно в целевой позиции. ( I96e5c , b/440187139 )
Версия 3.4.0-alpha03
27 августа 2025 г.
Выпущена версия androidx.paging:paging-*:3.4.0-alpha03 . Версия 3.4.0-alpha03 содержит следующие коммиты .
Новые функции
- Paging-common добавил поддержку настольных приложений в качестве новой целевого объекта Kotlin Multiplatform (KMP). В общей сложности теперь он поддерживает JVM (Android и настольные приложения), нативные приложения (Linux, iOS, watchOS, tvOS, macOS, MinGW) и веб-приложения (JavaScript, WasmJS). ( Id2483 , b/436884811 )
- В Paging-testing добавлены новые целевые платформы Kotlin Multiplatform (KMP). В общей сложности теперь поддерживаются JVM (Android и Desktop), нативные приложения (Linux, iOS, watchOS, tvOS, macOS, MinGW) и веб-приложения (JavaScript, WasmJS). ( I0c543 , b/435014650 )
- Paging-compose добавил новые цели Kotlin Multiplatform (KMP). В общей сложности теперь он поддерживает JVM (Android и Desktop), нативные приложения (Linux, iOS, watchOS, tvOS, macOS, MinGW) и веб-приложения (JavaScript, WasmJS). ( I70d44 , b/436884801 )
Изменения в API
- Перенос минимального SDK по умолчанию с API 21 на API 23 ( Ibdfca , b/380448311 , b/435705964 , b/435705223 )
Версия 3.4.0-alpha02
30 июля 2025 г.
Выпущена версия androidx.paging:paging-*:3.4.0-alpha02 . Версия 3.4.0-alpha02 содержит следующие коммиты .
Изменения в API
- Теперь
PagingData.fromпозволяет устанавливатьplaceholdersBeforeиplaceholdersAfter. Обратите внимание, что прокрутка этих заполнителей не приводит к загрузке страницы. ( I06983 )
Версия 3.4.0-alpha01
2 июля 2025 г.
Выпущена версия androidx.paging:paging-*:3.4.0-alpha01 . Версия 3.4.0-alpha01 содержит следующие коммиты .
Новые функции
- В систему управления подкачками добавлены следующие цели KMP: watchos, tvos, mingwX64, watchosDeviceArm64 и linuxArm64. ( I237dd , Ia62b3 , b/368046982 , Icf15d , b/364652024 , I139d3 , b/338268719 )
Исправлены ошибки
- В модульных тестах Android, использующих Paging 3.3 или более позднюю версию,
PagingLoggerбольше не будет выдавать ошибок ( Ia9400 , b/331684448 ). - Исправлена ошибка, из-за которой
RecyclerViewвыбрасывалIndexOutOfBoundsExceptionпри прокрутке пользователем во время обновленияRecyclerView( Id1f16 , b/381024738 ). - Исправлена ошибка, из-за которой постраничная навигация не могла запускать дополнительные загрузки при обновлении страницы во время прокрутки. ( I60ca5 , b/352586078 )
- Исправлена ошибка, приводившая к сбою при прокрутке во время обновления элементов постраничной навигации. ( I8c65a , b/347649763 )
Версия 3.3
Версия 3.3.6
12 февраля 2025 г.
Выпущена androidx.paging:paging-*:3.3.6 . Версия 3.3.6 содержит следующие коммиты .
Исправлены ошибки
- Сигналы обновления и повторной отправки, отправленные во время первоначального обновления, теперь будут сохраняться и автоматически отправляться повторно, как только презентер пейджинга будет готов.
Внешний вклад
Версия 3.3.5
11 декабря 2024 г.
Выпущена androidx.paging:paging-*:3.3.5 . Версия 3.3.5 содержит следующие коммиты .
Исправлены ошибки
- Исправлена ошибка, из-за которой
RecyclerViewвыдавалIndexOutOfBoundsExceptionпри прокрутке пользователем во время обновленияRecyclerView. ( Id1f16 , b/381024738 )
Версия 3.3.4
13 ноября 2024 г.
Выпущена androidx.paging:paging-*:3.3.4 . Версия 3.3.4 содержит следующие коммиты .
Исправлены ошибки
- В модульных тестах Android, использующих Paging 3.3 или более позднюю версию, больше не будет возникать ошибка типа
Method isLoggable in android.util.Log not mocked( Ia9400 , b/331684448 ).
Версия 3.3.2
7 августа 2024 г.
Выпущена androidx.paging:paging-*:3.3.2 . Версия 3.3.2 содержит следующие коммиты .
Новые функции
- В
paging-commonиpaging-testingдобавлены новые многоплатформенные цели Kotlin:watchos,tvosиlinuxArm64( 90c9768 ), ( 53e0eca ).
Версия 3.3.1
24 июля 2024 г.
Выпущена androidx.paging:paging-*:3.3.1 . Версия 3.3.1 содержит следующие коммиты .
Исправлены ошибки
- Исправлена ошибка, из-за которой
AsyncPagingDataDifferили построенные на его основе API, такие какPagingDataAdapterиспользуемый сRecyclerView, не могли инициировать повторную загрузку при обновлении источника данных во время прокрутки. ( I60ca5 , b/352586078 ) - Исправлена ошибка, приводящая к сбою, который происходит при удалении элементов из источника данных во время прокрутки
RecyclerViewс использованиемPagingDataAdapterилиAsyncPagingDataDiffer. ( I8c65a , b/347649763 )
Версия 3.3.0
14 мая 2024 г.
Выпущена androidx.paging:paging-*:3.3.0 . Версия 3.3.0 содержит следующие коммиты .
Важные изменения по сравнению с версией 3.2.0
- Класс
PagingDataPresenterтеперь является публичным. Теперь на основеPagingDataPresenterможно создавать многоплатформенные презентеры, не требуя внутренних API для работы с пейджингом илиAsyncPagingDataDifferизpaging-runtime. - Добавлены новые вспомогательные методы
LoadStatesиCombinedLoadStatesвhasErrorиisIdleдля проверки состоянияLoadStates— Error илиNotLoadingсоответственно. Также добавлен новый метод расширения KotlinawaitNotLoading()дляFlow<CombinedLoadStates>, который ожидает, пока загрузка не перейдет в состояниеNotLoadingили Error. - Теперь
PagingData.empty()по умолчанию отправляет состоянияNotLoading, если в его конструктор не переданы пользовательскиеLoadStates. Это отличается от существующего поведения, когдаLoadStatesне отправлялись при передаче вPagingDataAdapterили отправлялись состояния Loading при сборе в качествеLazyPagingItems. При сборе в качествеLazyPagingItemsтеперь также будет отображаться пустой список сразу после первоначального формирования.
Многоплатформенная совместимость Kotlin
Благодаря работе над проектом multiplatform-paging от CashApp, теперь Paging поставляется с артефактами, совместимыми с Kotlin Multiplatform.
-
paging-commonвсе API Paging 3 перенесены вcommon, и теперь он совместим с JVM и iOS в дополнение к Android. -
paging-testingперенесен код вcommon, и теперь он совместим с JVM и iOS в дополнение к Android. -
paging-composeперенесла свой код вcommonи включает в себя артефакт для Android, что соответствует многоплатформенной поддержкеandroidx.compose. -
paging-runtime,paging-guava,paging-rxjava2иpaging-rxjava3останутся эксклюзивными для Android.
Версия 3.3.0-rc01
1 мая 2024 г.
Выпущена androidx.paging:paging-*:3.3.0-rc01 без изменений в Paging 3.3.0-beta01. Версия 3.3.0-rc01 содержит следующие коммиты .
Версия 3.3.0-beta01
3 апреля 2024 г.
Выпущена androidx.paging:paging-*:3.3.0-beta01 без существенных изменений. Версия 3.3.0-beta01 содержит следующие коммиты .
Версия 3.3.0-alpha05
20 марта 2024 г.
Выпущена версия androidx.paging:paging-*:3.3.0-alpha05 . Версия 3.3.0-alpha05 содержит следующие коммиты .
Изменения в API
- Теперь для общего кода в постраничной навигации используется аннотация AndroidX
@MainThread. ( I78f0d , b/327682438 )
Версия 3.3.0-alpha04
6 марта 2024 г.
Выпущена версия androidx.paging:paging-*:3.3.0-alpha04 . Версия 3.3.0-alpha04 содержит следующие коммиты .
Исправлены ошибки
- Исправлены незначительные ошибки в документации, связанные с добавлением многоплатформенной совместимости Kotlin. ( aosp/2950785 )
Версия 3.3.0-alpha03
7 февраля 2024 г.
Выпущена версия androidx.paging:paging-*:3.3.0-alpha03 . Версия 3.3.0-alpha03 содержит следующие коммиты.
Новые функции
- Класс
PagingDataPresenterтеперь является публичным. Теперь на основеPagingDataPresenterможно создавать многоплатформенные презентеры, не требуя внутренних API для работы с пейджингом илиAsyncPagingDataDifferизpaging-runtime. ( Id1f74 , b/315214786 ) - Добавлены новые вспомогательные методы
LoadStatesиCombinedLoadStatesдля проверки состоянияLoadStates: Error илиNotLoading. Также добавлен новый API, который ожидает завершенияLoadStateFlowдо тех пор, пока загрузка не перейдет в состояниеNotLoadingили Error. ( Id6c67 )
Изменение поведения
- Теперь
PagingData.empty()по умолчанию отправляет состоянияNotLoading, если в его конструктор не переданы пользовательскиеLoadStates. Это отличается от существующего поведения, когдаLoadStatesне отправлялись при передаче вPagingDataAdapterили отправлялись состояния Loading при сборе в качествеLazyPagingItems. При сборе в качествеLazyPagingItemsтеперь также будет отображаться пустой список сразу после первоначального формирования. ( I4d11d , b/301833847 )
Версия 3.3.0-alpha02
20 сентября 2023 г.
Выпущена версия androidx.paging:paging-*:3.3.0-alpha02 . Версия 3.3.0-alpha02 содержит следующие коммиты.
Многоплатформенная совместимость Kotlin
Благодаря работе над проектом multiplatform-paging от CashApp, теперь Paging поставляется с артефактами, совместимыми с Kotlin Multiplatform. Это позволит нам избежать расхождений между двумя репозиториями и обеспечить их совместимость.
-
paging-commonвсе API Paging 3 перенесены вcommon, и теперь он совместим с JVM и iOS в дополнение к Android. -
paging-testingперенесен код вcommon, и теперь он совместим с JVM и iOS в дополнение к Android. -
paging-composeперенесла свой код вcommonи включает в себя артефакт для Android, что соответствует многоплатформенной поддержкеandroidx.compose. -
paging-runtime,paging-guava,paging-rxjava2иpaging-rxjava3останутся эксклюзивными для Android.
Изменения в API
- Общедоступный интерфейс Logger, предназначенный только для внутреннего использования, устарел ( I16e95 , b/288623117 ).
Внешний вклад
- Спасибо veyndan из Cash App за помощь в переносе Paging на Kotlin Multiplatform ( #560 , #561 , #562 , #573 , #576 , #577 , #578 , #579 , #580 , #581 , #583 , #584 , #586 , #609 )
Версия 3.3.0-alpha01
20 сентября 2023 г.
- Это первый многоплатформенный релиз библиотек androidx.paging. Эта версия содержит только артефакты
*-jvmи*-android. Для macOS, iOS и Linux используйте версию3.3.0-alpha02.
Версия 3.2
Версия 3.2.1
6 сентября 2023 г.
Выпущена androidx.paging:paging-*:3.2.1 . Версия 3.2.1 содержит следующие коммиты.
Исправлены ошибки
- Исправлена ошибка, из-за которой API
asSnapshot()артефакта Paging Testing зависал при передаче потока, построенного с использованиемPagingData.from(List)посколькуasSnapshot()не содержал никакой информации о завершении загрузки (в отличие от перегрузкиPagingData.from(List, LoadStates)). Это обходное решение работает только для завершаемых потоков (например,flowOf(PagingData.from(...))). Для незавершаемых потоков (например,MutableStateFlow) используйте перегрузкуPagingData.from, которая предоставляетLoadStates). ( I502c3 ) - Теперь в Paging Compose используется внутренний механизм
AndroidUiDispatcher.Main, гарантирующий доступность новых данных в том же кадре, что и завершение загрузки. ( Ia55af )
Версия 3.2.0
26 июля 2023 г.
Выпущена androidx.paging:paging-*:3.2.0 . Версия 3.2.0 содержит следующие коммиты.
Важные изменения по сравнению с версией 3.1.0
- API Paging Compose стабилизировался и был интегрирован обратно в остальную часть Paging, где его версия теперь соответствует всем остальным артефактам Paging. Изменения по сравнению с версией 3.1.0 включают:
- Поддержка предварительного просмотра списка фиктивных данных путем создания объекта
PagingData.from(fakeData)и обертывания этогоPagingDataвMutableStateFlow(напримерMutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Передайте этот поток в составные объекты@Previewв качестве получателя дляcollectAsLazyPagingItems()для предварительного просмотра. - Поддержка всех ленивых макетов, таких как
LazyVerticalGridиHorizontalPager, а также пользовательских ленивых компонентов из библиотек Wear и TV. Это было достигнуто за счет новых методов расширения нижнего уровняLazyPagingItemsitemKeyиitemContentType, которые позволяют реализовать параметрыkeyиcontentTypeв стандартных APIitems, уже существующих дляLazyColumn,LazyVerticalGrid, а также их эквивалентов в API, таких какHorizontalPager. -
items(lazyPagingItems)иitemsIndexed(lazyPagingItems), поддерживающие толькоLazyListScope, устарели.
- Поддержка предварительного просмотра списка фиктивных данных путем создания объекта
- Новый артефакт
paging-testing, предоставляющий API, разработанные для модульного тестирования каждого слоя вашего приложения и его интеграции с системой постраничной навигации в изолированном режиме. Например, он включает в себя:- Класс
TestPager, позволяющий проверить поведение вашей собственной реализацииPagingSourceнезависимо от Pager и реального пользовательского интерфейса. - API-интерфейсы
asPagingSourceFactoryпозволяют преобразовывать либоFlow<List<Value>>, либо статическийList<Value>вPagingSourceFactory, который можно передать в Pager в тестах. - Расширение Kotlin `
asSnapshotдляFlow<PagingData<Value>>` преобразуетFlow<PagingData<Value>>непосредственно в `List<Value>.asSnapshot lambdaпозволяет имитировать пользовательский интерфейс вашего приложения с помощью таких API, какscrollToилиappendScrollWhileчтобы вы могли проверить корректность снимка данных в любой точке вашего набора постраничных данных.
- Класс
- Добавлены стандартные логи для отображения отладочной информации о постраничной навигации на двух уровнях:
VERBOSEиDEBUG. Включение логов осуществляется с помощью командыadb shell setprop log.tag.Paging [DEBUG|VERBOSE]. Это относится как к постраничной навигации с использованием представлений, так и к постраничной навигации с использованием Compose. - Добавлены конструкторы для
PagingDataAdapterиAsyncPagingDataDiffer, которые принимаютCoroutineContextвместоCoroutineDispatcher. - Добавлен новый функциональный интерфейс
PagingSourceFactory, который обеспечивает более явный интерфейс API, чем предыдущие лямбда-функции () ->PagingSource. Эта фабрика может использоваться для создания экземпляра Pager.
Версия 3.2.0-rc01
21 июня 2023 г.
Выпущена androidx.paging:paging-*:3.2.0-rc01 . Версия 3.2.0-rc01 содержит следующие коммиты.
Внешний вклад
- Спасибо Вейндану за вклад в перенос функции Paging из специфичных для Android/JVM областей. ( #553 , #554 , #555 , #559 )
Версия 3.2.0-beta01
7 июня 2023 г.
Выпущена версия androidx.paging:paging-*:3.2.0-beta01 . Версия 3.2.0-beta01 содержит следующие коммиты.
Пейджингом Создать
- API Paging Compose официально достиг стабильного состояния. В связи с этим версия была обновлена с
1.0.0-alpha20и теперь соответствует версии всех остальных компонентов Paging.
Изменения в API
- Удалены устаревшие API-функции
items(LazyPagingItems)иitemsIndexed(LazyPagingItems)из Paging Compose. Пример заменяющих их API-функций см. в примечаниях к выпуску Paging Compose1.0.0-alpha20( I9626e )
Версия 3.2.0-alpha06
24 мая 2023 г.
Выпущена версия androidx.paging:paging-*:3.2.0-alpha06 . Версия 3.2.0-alpha06 содержит следующие коммиты.
Новые функции
- Добавлен новый функциональный интерфейс
PagingSourceFactory, который обеспечивает более явный интерфейс API, чем существующие лямбда-функции() -> PagingSource. Эта фабрика может использоваться для создания экземпляраPager. ( I33165 , b/280655188 ) - Добавлен новый API
paging-testing:List<Value>.asPagingSourceFactory(), позволяющий получитьPagingSourceFactory, загружающий данные только из неизменяемого списка. Существующее расширение дляFlow<List<Value>>следует по-прежнему использовать для тестирования с несколькими поколениями статических данных. ( Id34d1 , b/280655188 )
Изменения в API
- Теперь все публичные API в paging-testing аннотированы аннотацией
@VisibleForTesting, чтобы гарантировать, что эти API используются только в тестах. ( I7db6e ) - API
asSnapshotбольше не требует передачиCoroutineScope. Теперь по умолчанию используется контекст, унаследованный от родительской области видимости. ( Id0a78 , b/282240990 ) - Изменен порядок параметров конструктора
TestPager, чтобы он интуитивно соответствовал порядку реальных параметров конструктораPager( I6185a ). - В paging-testing перенесено использование типа лямбда
() -> PagingSource<Key, Value>на типPagingSourceFactory<Key, Value>. ( I4a950 , b/280655188 )
Изменения в поведении
- Для запуска тестов постраничной навигации
asSnapshotбольше не требуется основной диспетчер. Его установка больше не вносит никаких изменений в поведение тестов. ( IE56EA )
Версия 3.2.0-alpha05
3 мая 2023 г.
Выпущена версия androidx.paging:paging-*:3.2.0-alpha05 . Версия 3.2.0-alpha05 содержит следующие коммиты.
Изменения в API
- API тестирования постраничной навигации
asSnapshotтеперь по умолчанию устанавливает параметрloadOperationsв пустое значение лямбда-функции. Это позволяет вызыватьasSnapshotбез передачи каких-либо операций загрузки для получения данных из первоначальной загрузки обновления. ( Ied354 , b/277233770 )
Улучшения в документации
- Внесены изменения в документацию по
asPagingSourceFactory(), чтобы уточнить, что это метод расширения дляFlow, который возвращает многократно используемую фабрику для генерации экземпляровPagingSource. ( I5ff4f , I705b5 ) - Обновлена документация по конструктору
LoadResult.Page, чтобы уточнить необходимость переопределенияitemsBeforeиitemsAfterдля поддержки перехода. ( Ied354 )
Внешние вклады
- Спасибо Вейндану за вклад в перенос функции Paging из области специфичных для Android/JVM решений. ( #525 , #523 , #520 , #519 , #507 , #506 , #505 , #499 , #497 , #496 , #493 )
Версия 3.2.0-alpha04
8 февраля 2023 г.
Выпущена версия androidx.paging:paging-*:3.2.0-alpha04 . Версия 3.2.0-alpha04 содержит следующие коммиты.
Тестирование пейджинга
- Артефакт
paging-testingтеперь содержит методasPagingSourceFactoryдля созданияpagingSourceFactoryизFlow<List<Value>>, который будет передаваться в пейджер. КаждыйList<Value>>генерируемый из Flow, представляет собой генерацию данных для пейджинга. Это упрощает тестирование пейджинга, например, для преобразованийPagingData, путем имитации источника данных, из которого пейджер будет получать данные. ( I6f230 , b/235528239 ) Артефакт
paging-testingбыл расширен новыми API, подходящими для проверки корректности данных, содержащихся вFlow<PagingData<T>>. Это можно использовать, например, для проверки правильности выходных данныхFlow<PagingData<T>>из слоя ViewModel.Это делается с помощью расширения Kotlin
asSnapshotдляFlow<PagingData<Value>>, которое преобразуетFlow<PagingData<Value>>в прямойList<Value>. Лямбда-функцияasSnapshotпозволяет имитировать пользовательский интерфейс вашего приложения с помощью таких API, какscrollToилиappendScrollWhileтаким образом, чтобы это было повторяемым и согласованным способом, позволяющим проверять правильность снимка данных в любой момент времени в вашем наборе постраничных данных.// 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 valuesasSnapshot— это методsuspend, который, как ожидается, будет выполняться внутриrunTest. Дополнительную информацию см. в разделе «Тестирование сопрограмм Kotlin на Android» . ( I55fd2 , I5bd26 , I7ce34 , I51f4d , I2249f , Id6223 , Ic4bab , Ib29b9 , Ic1238 , I96def , b/235528239 )
Изменения в API
- Теперь вызовы функций
getItemиpeekвAsyncPagingDataDifferиPagingDataAdapterкорректно помечаются как вызываемые только в основном потоке. ( I699b6 ) - Удалены подстановочные знаки из обобщенных типов, используемых
TestPager, что упрощает обработку результатов этих методов в коде, написанном на языке программирования Java. ( I56c42 )
Версия 3.2.0-alpha03
24 октября 2022 г.
Выпущена версия androidx.paging:paging-*:3.2.0-alpha03 . Версия 3.2.0-alpha03 содержит следующие коммиты.
Тестирование пейджинга
В этом релизе представлен новый артефакт: paging-testing . Этот артефакт предоставляет API, разработанные для модульного тестирования каждого слоя вашего приложения и его интеграции с Paging в изолированном режиме.
Например, в этот первый релиз включен класс TestPager , который позволяет проверять поведение вашей собственной реализации PagingSource независимо от Pager и реального пользовательского интерфейса, которые обычно необходимы для имитации сквозной интеграции Paging.
TestPager следует рассматривать как подделку — тестовый двойник , который имитирует реальную реализацию Pager , предоставляя при этом упрощенную поверхность API для тестирования PagingSource . Эти API являются suspend API и должны запускаться в рамках runTest , как описано в руководстве по тестированию сопрограмм Kotlin на Android .
Пример использования этих API можно найти в тестах room-paging , которые были переработаны для использования TestPager .
Изменения в API
- Обеспечивает удобную итерацию по
LoadResult.Page.dataс помощьюLoadResult.Page.iterator(). Это косвенно позволяет использовать методflattenиз стандартной библиотеки Kotlin при передачеList<LoadResult.Page>, например, со свойствомpagesобъектаPagingState, которое передается методуPagingSource.getRefreshKey. ( IE0718 )
Версия 3.2.0-alpha02
10 августа 2022 г.
Выпущена версия androidx.paging:paging-*:3.2.0-alpha02 . Версия 3.2.0-alpha02 содержит следующие коммиты.
Новые функции
- Теперь функция Paging предоставляет журналы через классы
AsyncPagingDataDifferилиPagingDataAdapter, позволяющие отображать отладочную информацию, собранную изPagingData. - Включить ведение журналов можно с помощью команды
adb shell:adb shell setprop log.tag.Paging [DEBUG|VERBOSE].( b/235527159 )
Исправлены ошибки
- Исправлена ошибка отсутствия конструктора
PagingDataDifferпри использованииpaging-common:3.2.0-alpha01сpaging-runtime:3.1.1или более старыми версиями. ( b/235256201 )
Версия 3.2.0-alpha01
1 июня 2022 г.
Выпущена версия androidx.paging:paging-*:3.2.0-alpha01 . Версия 3.2.0-alpha01 содержит следующие коммиты.
Изменения в API
- Добавлены конструкторы для
PagingDataAdapterиAsyncPagingDataDiffer, которые принимаютCoroutineContextвместоCoroutineDispatcher. ( Idc878 ) - По умолчанию
PagingData.from()иPagingData.empty()больше не влияют наCombinedLoadStatesна стороне презентера. Добавлена новая перегрузка, позволяющая передаватьsourceLoadStatesиremoteLoadStatesв эти конструкторы, чтобы сохранить существующее поведение установкиLoadStatesв полностью терминальное состояние (т.е.NotLoading(endOfPaginationReached = false)), с возможностью включения удаленных состояний при необходимости. ЕслиLoadStatesне передаются, то предыдущие значенияCombinedLoadStatesбудут сохранены на стороне презентера при получении статического объектаPagingData. ( Ic3ce5 , b/205344028 )
Исправлены ошибки
- Результат
PagingSource.getRefreshKey()теперь корректно имеет приоритет надinitialKeyв тех случаях, когда он должен был бы вернуть null, но был установлен ненулевойinitialKey. ( Ic9542 , b/230391606 )
Внешний вклад
- Обновлен API :compose:ui:ui-test (updateApi) в связи с миграцией библиотеки test-coroutines-lib ( I3366d ).
Версия 3.1
Версия 3.1.1
9 марта 2022 г.
Выпущена androidx.paging:paging-*:3.1.1 . Версия 3.1.1 содержит следующие коммиты.
Исправлены ошибки
- Удалены промежуточные события
LoadState.NotLoadingмежду поколениями, которые были некорректно добавлены методом.cachedIn(). Это изменение значительно упрощает реагирование на измененияLoadState, удаляя избыточные событияLoadState.NotLoading, которые возникали между повторными попытками загрузки, при обновлении или во время аннулирования.
Версия 3.1.0
17 ноября 2021 г.
Выпущена androidx.paging:paging-*:3.1.0 . Версия 3.1.0 содержит следующие коммиты.
Важные изменения с версии 3.0.0
- API-интерфейсы
Flow<PagingData>.observableиFlow<PagingData>.flowableбольше не являются экспериментальными. - Изменения в поведении функции
LoadState:- Теперь
endOfPaginationReachedвсегдаfalseдляLoadType.REFRESHкак дляPagingSource, так иRemoteMediator - Теперь
LoadStatesиз Paging ожидают корректных значений отPagingSourceиRemoteMediator, прежде чем передавать их дальше. Новые поколенияPagingDataтеперь всегда будут корректно начинаться с состоянияLoadingдля обновления, вместо того чтобы в некоторых случаях некорректно сбрасываться в состояниеNotLoading. -
.loadStateFlowи.addLoadStateListenerв API презентера больше не отправляют избыточное начальное значениеCombinedLoadStates, в котором состояния посредника всегда установлены вnull
- Теперь
- Теперь аннулирование данных прошлых поколений происходит автоматически при аннулировании/создании новых поколений. Использование
.collectLatestдляFlow<PagingData>больше не требуется, хотя его по-прежнему рекомендуется использовать. - В качестве нового возвращаемого типа для
PagingSource.loadдобавленPagingSource.LoadResult.Invalid, который заставляет Paging отбрасывать все ожидающие или будущие запросы на загрузку данных в этотPagingSourceи аннулировать его. Этот возвращаемый тип предназначен для обработки потенциально некорректных или устаревших данных, которые могут быть возвращены из базы данных или сети. - Добавлены API-интерфейсы презентера
.onPagesPresentedи.addOnPagesUpdatedListener, которые срабатывают синхронно по мере отображения страниц в пользовательском интерфейсе. Обновление страниц может происходить в следующих сценариях:- Первоначальная загрузка нового поколения PagingData завершается независимо от того, содержит ли новое поколение какие-либо изменения в отображаемых элементах. То есть, если новое поколение завершает первоначальную загрузку без обновлений, поскольку список остается точно таким же, это все равно вызовет этот обратный вызов.
- Страница вставляется, даже если вставленная страница не содержит новых элементов.
- Страница перетаскивается, даже если она была пустой.
Версия 3.1.0-rc01
3 ноября 2021 г.
Выпущена androidx.paging:paging-*:3.1.0-rc01 . Версия 3.1.0-rc01 содержит следующие коммиты.
Исправлены ошибки
- Исправлена ошибка состояния гонки и утечки памяти в методе .cachedIn() в случаях, когда Paging отправлял несколько событий загрузки нижестоящим потоком, когда не было наблюдателей, или когда наблюдатель переключался на новые данные PagingData. ( Ib682e )
Версия 3.1.0-beta01
13 октября 2021 г.
Выпущена версия androidx.paging:paging-*:3.1.0-beta01 . Версия 3.1.0-beta01 содержит следующие коммиты.
Исправлены ошибки
- Исправлена ошибка, из-за которой многочисленные быстрые обращения к элементам могли приводить к их удалению для учета в параметре prefetchDistance, что вызывало зависание загрузки страницы. Это особенно актуально, когда множество элементов отображаются одновременно в порядке, который отдает приоритет загрузке относительно направления прокрутки пользователя. Теперь обращения к этим элементам буферизуются и синхронно приоритезируются, чтобы предотвратить их удаление. ( aosp/1833273 )
Версия 3.1.0-alpha04
29 сентября 2021 г.
Выпущена версия androidx.paging:paging-*:3.1.0-alpha04 . Версия 3.1.0-alpha04 содержит следующие коммиты.
Изменения в API
- API-интерфейсы
Flow<PagingData>.observableиFlow<PagingData>.flowableбольше не являются экспериментальными. ( Ie0bdd )
Исправлены ошибки
- Для LoadStates
endOfPaginationReachedтеперь всегда равноfalseдляLoadType.REFRESH. Ранее endOfPaginationReached могло бытьtrueдля RemoteMediatorREFRESH, но не для PagingSource. Теперь это поведение зафиксировано на уровнеfalse, поскольку REFRESH никогда не является завершающим этапом, и теперь это задокументировано как часть контракта API в LoadStates. При принятии решения о завершении пагинации всегда следует учитывать либо направление APPEND, либо направление PREPEND. ( I047b6 ) Теперь события LoadStates из Paging ожидают корректных значений как от PagingSource, так и от RemoteMediator, прежде чем передавать их дальше между поколениями. Это предотвращает отправку NotLoading новыми поколениями PagingData в CombinedLoadStates.source.refresh, если оно уже было Loading; новые поколения PagingData теперь всегда будут корректно начинать с Loading для состояния обновления, вместо того чтобы сначала некорректно сбрасываться на NotLoading в некоторых случаях.
Теперь аннулирование данных прошлых поколений происходит автоматически при аннулировании/создании новых поколений. Использование метода .collectLatest для
Flow<PagingData>больше не требуется, хотя его по-прежнему настоятельно рекомендуется использовать. ( I0b2b5 , b/177351336 , b/195028524 ).loadStateFlowи.addLoadStateListenerв API презентера больше не отправляют избыточно начальное значениеCombinedLoadStates, в котором состояния посредника всегда установлены вnull, а состояния источника — вNotLoading(endOfPaginationReached = false). Это означает, что:- При использовании RemoteMediator состояния посредника всегда будут заполнены.
- Регистрация нового слушателя loadState или нового сборщика в
.loadStateFlowбольше не будет немедленно выдавать текущее значение, если он не получил реальногоCombinedLoadStatesотPagingData. Это может произойти, если сборщик или слушатель запускается до того, как будет отправленPagingData. ( I1a748 )
Версия 3.1.0-alpha03
21 июля 2021 г.
Выпущена версия androidx.paging:paging-*:3.1.0-alpha03 . Версия 3.1.0-alpha03 содержит следующие коммиты.
Изменения в API
В метод PagingSource добавлен третий тип возвращаемого значения LoadResult: LoadResult.Invalid. Если метод PagingSource.load возвращает LoadResult.Invalid, постраничная обработка отбрасывает загруженные данные и делает PagingSource недействительным. Этот тип возвращаемого значения предназначен для обработки потенциально недействительных или устаревших данных, которые могут быть возвращены из базы данных или сети.
Например, если в базовую базу данных производится запись, но PagingSource не обновляется вовремя, он может возвращать противоречивые результаты, если его реализация зависит от неизменяемости базового набора данных, из которого он загружается (например, реализации баз данных в стиле LIMIT OFFSET). В этом сценарии рекомендуется проверять обновление после загрузки и возвращать LoadResult.Invalid, что заставляет PagingSource отбрасывать все ожидающие или будущие запросы на загрузку к этому PagingSource и обновлять его.
Этот тип возвращаемого значения также поддерживается API Paging2, использующим LivePagedList или RxPagedList. При использовании PagingSource с API PagedList Paging2, PagedList немедленно отсоединяется, что прекращает дальнейшие попытки загрузки данных в этот PagedList и приводит к аннулированию PagingSource.
LoadResult — это закрытый класс, что означает, что это изменение несовместимо с исходным кодом, так что в случаях, когда результаты PagingSource.load используются напрямую, обработка LoadResult.Invalid должна происходить во время компиляции. Например, пользователям Kotlin, использующим exhaustive-when для проверки типа возвращаемого значения, придется добавить проверку на недопустимый тип. ( Id6bd3 , b/191806126 , b/192013267 )
Исправлены ошибки
- Добавленные с помощью PagingSource.registerInvalidatedCallback или DataSource.addInvalidatedCallback обработчики событий аннулирования теперь автоматически срабатывают, если они были зарегистрированы для PagingSource/DataSource, который уже был недействителен. Это устраняет состояние гонки, из-за которого Paging Source отбрасывал сигналы аннулирования и зависал при предоставлении источника, который уже был недействителен во время первоначальной загрузки. Кроме того, обработчики событий аннулирования теперь корректно удаляются после срабатывания, поскольку гарантируется, что они будут вызваны не более одного раза. ( I27e69 )
- Отправка начального значения-заполнителя (InitialPagedList) из вновь созданного потока PagedList, например, LivePagedListBuilder или RxPagedListBuilder, больше не приведет к очистке ранее загруженных данных.
Версия 3.1.0-alpha02
1 июля 2021 г.
Выпущена версия androidx.paging:paging-*:3.1.0-alpha02 . Версия 3.1.0-alpha02 содержит следующие коммиты.
Новые функции
Добавлены API-интерфейсы для обработки событий onPagesPresented и представления потока, которые срабатывают сразу после обновления отображаемых страниц в пользовательском интерфейсе.
Поскольку эти обновления синхронны с пользовательским интерфейсом, вы можете вызывать методы адаптера, такие как `.snapshot`, `.getItemCount`, чтобы проверить состояние после применения обновления. Обратите внимание, что вызов метода `.snapshot()` был оставлен явным, поскольку его выполнение при каждом обновлении может быть затратным.
Обновление страницы может происходить в следующих случаях:
- Первоначальная загрузка нового поколения PagingData завершается независимо от того, содержит ли новое поколение какие-либо изменения в отображаемых элементах. То есть, если новое поколение завершает первоначальную загрузку без обновлений, поскольку список остается точно таким же, это все равно вызовет этот обратный вызов.
- Страница вставляется, даже если вставленная страница не содержит новых элементов.
- Страница перетаскивается, даже если она была пустой ( I272c9 , b/189999634 )
Исправлены ошибки
- При обращении к PagedList.dataSource из начального значения, полученного с помощью LivePagedList или RxPagedList, больше не будет некорректно возникать исключение IllegalStateException ( I96707 ).
Версия 3.1.0-alpha01
2 июня 2021 г.
Выпущена версия androidx.paging:paging-*:3.1.0-alpha01 . Версия 3.1.0-alpha01 содержит следующие коммиты.
Изменения в API
- Классы, предоставляемые
paging-rxjava3теперь находятся в пакетеandroidx.paging.rxjava3, чтобы избежать конфликтов сpaging-rxjava2( Ifa7f6 ).
Исправлены ошибки
- Исправлена ошибка, из-за которой функция Paging иногда отправляла в RecyclerView события, не выполняющие никаких действий, что могло привести к преждевременному срабатыванию некоторых обработчиков событий. ( Ic507f , b/182510751 )
Внешний вклад
- Добавлены устаревшие API совместимости PagedList в артефакт rxjava3 ( Id1ce2 , b/182497591 )
Paging Compose Версия 1.0.0
Версия 1.0.0-alpha20
24 мая 2023 г.
Выпущена версия androidx.paging:paging-compose:1.0.0-alpha20 . Версия 1.0.0-alpha20 содержит следующие коммиты.
Новые функции
- Теперь Paging Compose поддерживает предварительный просмотр списка фиктивных данных путем создания объекта
PagingData.from(fakeData)и обертывания этогоPagingDataвMutableStateFlow(например,MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Используя эти данные в качестве входных данных для вашего@Preview, вызовыcollectAsLazyPagingItems()будут предоставлятьLazyPagingItemsс возможностью предварительного просмотра. ( I8a78d , b/194544557 )
Исправлены ошибки
- Кэшированные данные из
pager.flow.cachedIn, собранные вLazyPagingItems, теперь будут доступны сразу после восстановления состояния без необходимости асинхронной сборки. Это означает, что кэшированные данные будут готовы к отображению сразу после первоначального формирования данных после восстановления состояния. ( I97a60 , b/177245496 )
Версия 1.0.0-alpha19
3 мая 2023 г.
Выпущена версия androidx.paging:paging-compose:1.0.0-alpha19 . Версия 1.0.0-alpha19 содержит следующие коммиты.
Поддержка всех ленивых макетов.
Ранее Paging Compose предоставлял пользовательские items и расширения itemsIndexed для LazyListScope , что означало невозможность использования Paging Compose с другими ленивыми макетами, такими как LazyVerticalGrid , HorizontalPager или другими пользовательскими ленивыми компонентами, предоставляемыми библиотеками Wear и TV. Устранение этой негибкости является основным обновлением в этом релизе.
To support more lazy layouts, we needed to build out APIs at a different layer - rather than providing a custom items API for each lazy layout, Paging Compose now provides slightly lower level extension methods on LazyPagingItems in itemKey and itemContentType . These APIs focus on helping you implement the key and contentType parameters to the standard items APIs that already exist for LazyColumn , LazyVerticalGrid as well as their equivalents in APIs like HorizontalPager . ( Ifa13b , Ib04f0 , b/259385813 )
This means that supporting a LazyVerticalGrid would look like:
// 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)
}
}
For more examples of using these new APIs, please see our samples .
While these changes do make the LazyColumn and LazyRow examples a few lines longer, we felt that consistency across all lazy layouts was an important factor for those using Paging Compose going forward. For that reason, the existing extensions to LazyListScope have now been deprecated. ( I0c459 , I92c8f , b/276989796 )
Изменения в API
- To ease the migration to the new APIs, the
itemsanditemsIndexedextension functions onLazyListScopenow support acontentTypeparameter, mirroring the support in the new APIs. ( Ib1918 , b/255283378 )
Обновления зависимостей
- Paging Compose has updated its dependency from Compose 1.0.5 to Compose 1.2.1. ( Ib1918 , b/255283378 )
Version 1.0.0-alpha18
8 февраля 2023 г.
androidx.paging:paging-compose:1.0.0-alpha18 is released with no changes. Version 1.0.0-alpha18 contains these commits.
Version 1.0.0-alpha17
24 октября 2022 г.
androidx.paging:paging-compose:1.0.0-alpha17 is released. Version 1.0.0-alpha17 contains these commits.
Новые функции
- Add support for a custom
CoroutineContextwhen callingcollectLazyPagingItems. ( I7a574 , b/243182795 , b/233783862 )
Version 1.0.0-alpha16
10 августа 2022 г.
androidx.paging:paging-compose:1.0.0-alpha16 is released. Version 1.0.0-alpha16 contains these commits.
Новые функции
- Paging now provides logs via the
LazyPagingItemsclass to expose debugging information collected from PagingData. - The logs can be enabled via the
adb shellcommandadb shell setprop log.tag.Paging [DEBUG|VERBOSE]. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
Исправлены ошибки
- Fixed the missing
PagingDataDifferconstructor error when usingpaging-compose:1.0.0-alpha15withpaging-common:3.1.1or older.( b/235256201 , b/239868768 )
Version 1.0.0-alpha15
1 июня 2022 г.
androidx.paging:paging-compose:1.0.0-alpha15 is released. Version 1.0.0-alpha15 contains these commits.
Изменения в API
- Added constructors for
PagingDataAdapterandAsyncPagingDataDifferwhich acceptCoroutineContextinstead ofCoroutineDispatcher. ( Idc878 )
Исправлены ошибки
-
LazyPagingItemsnow sets the initialloadStateto have aLoadState.Loadingrefresh. ( I55043 , b/224855902 )
Version 1.0.0-alpha14
13 октября 2021 г.
androidx.paging:paging-compose:1.0.0-alpha14 is released. Version 1.0.0-alpha14 contains these commits.
Version 1.0.0-alpha13
29 сентября 2021 г.
androidx.paging:paging-compose:1.0.0-alpha13 is released. Version 1.0.0-alpha13 contains these commits.
Изменения в API
-
LazyPagingItems.snapshot()function was replaced withLazyPagingItems.itemSnapshotListproperty ( Ie2da8 ) - Deprecated
LazyPagingItems.getAsState()was removed ( Ie65e4 )
Version 1.0.0-alpha12
21 июля 2021 г.
androidx.paging:paging-compose:1.0.0-alpha12 is released. Version 1.0.0-alpha12 contains these commits.
Изменения в API
-
items(lazyPagingItems)anditemsIndexed(lazyPagingItems)used to connect Paging withLazyColumn/Rownow accept the option key param which allows you to specify a stable key representing the item. You can read more about keys here. ( I7986d ) - Function
lazyPagingItems.getAsState(index)is now deprecated. UselazyPagingItems[index]instead. ( I086cb , b/187339372 )
Version 1.0.0-alpha11
30 июня 2021 г.
androidx.paging:paging-compose:1.0.0-alpha11 is released. Version 1.0.0-alpha11 contains these commits.
Version 1.0.0-alpha10
2 июня 2021 г.
androidx.paging:paging-compose:1.0.0-alpha10 is released. Version 1.0.0-alpha10 contains these commits.
Version 1.0.0-alpha09
18 мая 2021 г.
androidx.paging:paging-compose:1.0.0-alpha09 is released. Version 1.0.0-alpha09 contains these commits.
Исправлены ошибки
- LazyPagingItems' itemCount and item getter are now observable which allows it to be used with LazyVerticalGrid as well ( Ie2446 , b/171872064 , b/168285687 )
Compose Compatibility
-
androidx.paging:paging-compose:1.0.0-alpha09is only compatible with Compose version1.0.0-beta07and above.
Версия 1.0.0-alpha08
24 февраля 2021 г.
androidx.paging:paging-compose:1.0.0-alpha08 is released. Version 1.0.0-alpha08 contains these commits.
Updated to integrate with Compose 1.0.0-beta01.
Версия 1.0.0-alpha07
10 февраля 2021 г.
androidx.paging:paging-compose:1.0.0-alpha07 is released. Version 1.0.0-alpha07 contains these commits.
Updated to integrate with Compose alpha12.
Версия 1.0.0-alpha06
28 января 2021 г.
androidx.paging:paging-compose:1.0.0-alpha06 is released. Version 1.0.0-alpha06 contains these commits.
Исправлены ошибки
Updated to depend on Compose 1.0.0-alpha11.
Версия 1.0.0-alpha05
13 января 2021 г.
androidx.paging:paging-compose:1.0.0-alpha05 is released. Version 1.0.0-alpha05 contains these commits.
Updated to depend on Compose 1.0.0-alpha10.
Версия 1.0.0-alpha04
16 декабря 2020 г.
androidx.paging:paging-compose:1.0.0-alpha04 is released. Version 1.0.0-alpha04 contains these commits.
Исправлены ошибки
- Updated the convenience properties,
CombinedLoadStates.refresh,CombinedLoadStates.prepend,CombinedLoadStates.appendto only transition fromLoadingtoNotLoadingafter both mediator and source load states areNotLoadingto ensure the remote update has been applied. ( I65619 )
Версия 1.0.0-alpha03
2 декабря 2020 г.
androidx.paging:paging-compose:1.0.0-alpha03 is released. Version 1.0.0-alpha03 contains these commits.
- Updated to match Compose 1.0.0-alpha08.
Версия 1.0.0-alpha02
11 ноября 2020 г.
androidx.paging:paging-compose:1.0.0-alpha02 is released. Version 1.0.0-alpha02 contains these commits.
Изменения в API
- Added
.peek(),.snapshot(),.retry()and.refresh()methods toLazyPagingItems which expose the same functionality available inAsyncPagingDataDiffer/PagingDataAdapter( Iddfe8 , b/172041660 )
Версия 1.0.0-alpha01
28 октября 2020 г.
androidx.paging:paging-compose:1.0.0-alpha01 is released. Version 1.0.0-alpha01 contains these commits.
Новые функции
The paging-compose artifact provides integration between The Paging Library and Jetpack Compose . A simple usage example:
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
Версия 3.0.1
Версия 3.0.1
21 июля 2021 г.
androidx.paging:paging-*:3.0.1 is released. Version 3.0.1 contains these commits.
Исправлены ошибки
- Accessing
PagedList.dataSourcefrom the initial value produced byLivePagedListorRxPagedListwill no longer incorrectly throw an IllegalStateException ( I96707 )
Версия 3.0.0
Версия 3.0.0
5 мая 2021 г.
androidx.paging:paging-*:3.0.0 is released. Version 3.0.0 contains these commits.
Major features of 3.0.0
The majority of the existing API from Paging 2.xx has been deprecated in favor of the new Paging 3 APIs to bring the following improvements:
- First-class support for Kotlin coroutines and Flow
- Support for cancellation
- Built-in load state and error signals
- Retry + refresh functionality
- All three DataSource subclasses have been combined into a unified PagingSource class
- Custom page transformations including a built-in one for adding separators
- Loading state headers and footers
Version 3.0.0-rc01
21 апреля 2021 г.
androidx.paging:paging-*:3.0.0-rc01 is released. Version 3.0.0-rc01 contains these commits.
Исправлены ошибки
- Fixed an issue where Paging would sometimes send no-op differ events to RecyclerView, which could cause certain listeners to trigger early. ( Ic507f , b/182510751 )
Version 3.0.0-beta03
24 марта 2021 г.
androidx.paging:paging-*:3.0.0-beta03 is released. Version 3.0.0-beta03 contains these commits.
Исправлены ошибки
- We've revamped how placeholders are handled when list is reloaded to prevent unexpected jumps in RecyclerView. See NullPaddedDiffing.md for details. ( If1490 , b/170027529 , b/177338149 )
- The various PagedList builders (old compatibility path) no longer incorrectly synchronously call
DataSource.Factory.create()on Main thread when.build()is called. ( b/182798948 )
Version 3.0.0-beta02
10 марта 2021 г.
androidx.paging:paging-*:3.0.0-beta02 is released. Version 3.0.0-beta02 contains these commits.
Изменения в API
- Rx3 extensions now correctly propagate
@ExperimentalCoroutinesApiOpt-In requirement. Previously they were marked on the@getmethod, which is ignored by the Kotlin Compiler due to: https://youtrack.jetbrains.com/issue/KT-45227 ( I5733c )
Исправлены ошибки
- Enforce restrictions on public usage of experimental APIs ( I6aa29 , b/174531520 )
- Fixed a bug causing
PagingStateto always benullwhen remote refresh is called. - Fixed a bug where empty pages returned by PagingSource could prevent Paging from fetching again to fulfill
prefetchDistancecausing Paging to get “stuck”.
Version 3.0.0-beta01
10 февраля 2021 г.
androidx.paging:paging-*:3.0.0-beta01 is released. Version 3.0.0-beta01 contains these commits.
Изменения в API
- Rx2 and Rx3 wrappers now expose the experimental annotation it depends on. If you are using the Rx compat wrappers in paging-rxjava2 or paging-rxjava3, you will now need to annotate usages with
@OptIn(ExperimentalCoroutinesApi::class)( Ib1f9d )
Исправлены ошибки
- Fixed
IndexOutOfBoundsException: Inconsistency detectedsometimes thrown when using v2DataSourceAPIs through compatibility paths -
isInvalidcall during initialization ofDataSourcewhen used via compatibility paths are now correctly launched on fetchDispatcher instead of on the main thread. This fixes anIllegalStateExceptiondue to Db access on the main thread when using Room'sPagingSourceimplementation.
Version 3.0.0-alpha13
27 января 2021 г.
androidx.paging:paging-*:3.0.0-alpha13 is released. Version 3.0.0-alpha13 contains these commits.
Изменения в API
-
PagingSource.getRefreshKeyis no longer optional to implement, it is now an abstract function without a default implementation. Migrating users can either continue returning the default implementation, which simply returnsnull, butgetRefreshKey()should have a real implementation returning a key based on user's current scroll position that allows Paging to continue loading centered around the viewport viaPagingState.anchorPositionif possible. ( I4339a ) -
InvalidatingPagingSourceFactoryis now a final class ( Ia3b0a ) - Allow configuration of terminal separator (header / footer) behavior with an additional optional SeparatorType parameter. The two options are:
-
FULLY_COMPLETE- existing behavior; wait for both PagingSource and RemoteMediator to mark endOfPaginationReached before adding terminal separators. If RemoteMediator is not used, remote loadState is ignored. This is primarily useful if you only want to show section separators when the section is fully loaded, including fetching from remote source eg, network. -
SOURCE_COMPLETE- only wait for PagingSource to mark endOfPaginationReached even if RemoteMediator is used. This allows headers and footers to be presented synchronously with the initial load, which prevents users from needing to scroll to see terminal separators. ( Ibe993 , b/174700218 )
-
Исправлены ошибки
- Fixed a rare memory leak which happens when a PagingSource is invalidated before PageFetcher can even begin to start loading from it. ( I9606b , b/174625633 )
Version 3.0.0-alpha12
13 января 2021 г.
androidx.paging:paging-*:3.0.0-alpha12 is released. Version 3.0.0-alpha12 contains these commits.
Изменения в API
- InvalidatingPagingSourceFactory is no longer an abstract class as it never had any abstract methods. ( I4a8c4 )
- Added an overload of .cachedIn() that accepts ViewModel instead of Lifecycle or CoroutineScope for Java users. ( I97d81 , b/175332619 )
- Allow Java callers to use PagingData transform operations in an async way, by accepting an Executor into transform operator arguments. All of the -Sync transform operators have the -Sync suffix removed now, and Kotlin Coroutine users will need to disambiguate by calling the extension function which accepts a suspending block instead. All PagingData transformation operators have been moved to extensions under the static PagingDataTransforms class. Java users will need to call them via static helpers eg,
PagingDataTransforms.map(pagingData, transform)For Kotlin users, the syntax is the same but you'll need to import the function. ( If6885 , b/172895919 )
Исправлены ошибки
- Fixed a bug where
RemoteMediator.load()would not be called duringadapter.refresh()if the end of pagination had already been reached.
Version 3.0.0-alpha11
16 декабря 2020 г.
androidx.paging:paging-*:3.0.0-alpha11 is released. Version 3.0.0-alpha11 contains these commits.
Новые функции
- Saved state support added for the following basic use cases (full support, especially in the layered source case is still a work in progress):
- flow is cached and application is not killed (eg flow is cached in a view model and activity is recreated in process)
- paging source is counted, placeholders are enabled and the layout is not staggered.
Изменения в API
-
PagingSource.getRefreshKey()is now stable API ( I22f6f , b/173530980 ) -
PagingSource.invalidateis no longer an open function. If you need to get notified when invalidation happens, consider calling the registerInvalidatedCallback method instead of overriding invalidate. ( I628d9 , b/173029013 , b/137971356 ) - Pager now has a single experimental constructor alongside its regular constructors, rather than leaking experimental APIs into non-experimental public API via the opt-in annotation. ( I9dc61 , b/174531520 )
- Updated the convenience properties,
CombinedLoadStates.refresh,CombinedLoadStates.prepend,CombinedLoadStates.appendto only transition fromLoadingtoNotLoadingafter both mediator and source load states areNotLoadingto ensure the remote update has been applied. ( I65619 ) LoadParams.pageSize has been removed (it was already deprecated). The recommendation is to use
LoadParams.loadSizein your PagingSource.LoadParams.loadSizeis always equal to thePagingConfig.pageSizeexcept for the initial load call where it is equal to thePagingConfig.initialLoadSize.If you are testing your Paging2 DataSource without using a Pager or PagedList,
pageSizemay not match thePagingConfig.pageSizeif you are also settinginitialLoadSize. If it is important for your tests, try using a Pager/PagedList instead which will internally set the correct PageSize for your DataSource load methods. ( I98ac7 , b/149157296 )
Исправлены ошибки
- Fixed a crash due to IllegalStateException when using separators with PagingConfig.maxSize set. ( I0ed33 , b/174787528 )
- Fixed a bug where load state for PREPEND / APPEND would not update to
NotLoading(endOfPaginationReached = true)immediately after initial load if RemoteMediator was set ( I8cf5a ) - Fixed a bug where presenter-side APIs such as .snapshot(), .peek(), etc., would return the previous (out-of-date) list within ListUpdateCallback updates.
- Fixed a bug where Separators operators would not add headers or footers when used with RemoteMediator
- Fixed a bug where LoadState updates to NotLoading for RemoteMediator would get stuck in the Loading state
- Fixed a bug where the Paging2.0 compatibility API,
.asPagingSourceFactory(), could cause the backingDataSourceto be initialized on the incorrect CoroutineDispatcher. This resolves a crash and possible ANR cases, especially when using Room's current implementation of PagingSource, which uses this compatibility path.
Version 3.0.0-alpha10
2 декабря 2020 г.
androidx.paging:paging-*:3.0.0-alpha10 is released. Version 3.0.0-alpha10 contains these commits.
Изменения в API
The deprecated
dataRefreshFlowanddataRefreshListenerAPIs have been removed as they are redundant with loadStateFlow / Listener updates. For those migrating, the loadStateFlow equivalent is:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }( Ib5570 , b/173530908 )
Исправлены ошибки
- endOfPaginationReached for RemoteMediator
REFRESHnow correctly propagate to LoadState updates and prevents remoteAPPENDandPREPENDfrom triggering. ( I94a3f , b/155290248 ) - Presenting an empty list either due to empty initial page or heavy filtering will no longer prevent Paging from kicking off
PREPENDorAPPENDloads. ( I3e702 , b/168169730 ) - Fixed an issue where
getRefreshKeydoes not get called on subsequent generations of PagingSource when invalidations occur rapidly. ( I45460 , b/170027530 )
Внешний вклад
- A new abstract class InvalidatingPagingSourceFactory has been added with an
.invalidate()API that forwards invalidate to all of the PagingSources it emits. Thanks to @claraf3 ! ( Ie71fc , b/160716447 )
Известные проблемы
- Headers and footers from the .insertSeparators() transform may not appear immediately when using RemoteMediator b/172254056
- Using RemoteMediator can cause remote
LoadStateto get stuck if invalidation andPagingSource.load(LoadParams.Refresh(...))completes beforeRemoteMediator.load()returns b/173717820
Version 3.0.0-alpha09
11 ноября 2020 г.
androidx.paging:paging-*:3.0.0-alpha09 is released. Version 3.0.0-alpha09 contains these commits.
Изменения в API
- Fully deprecate dataRefreshFlow / Listener methods with a replaceWith clause. ( I6e2dd )
Исправлены ошибки
- Fix for
IllegalArgumentExceptionbeing throw when using separators with RemoteMediator and an invalidate is triggered while a remote load that would return endOfPagination is still running ( I3a260 )
Version 3.0.0-alpha08
28 октября 2020 г.
androidx.paging:paging-*:3.0.0-alpha08 is released. Version 3.0.0-alpha08 contains these commits.
Изменения в API
- The Kotlin / Java variants of
DataSource.InvalidatedCallbackhave been combined by enabling SAM-conversions in Kotlin via functional interface (available in Kotlin 1.4). This also fixes a bug where the kotlin variant of invalidate callbacks were not called after transformed by.mapor.mapByPage. ( I1f244 , b/165313046 )
Исправлены ошибки
- Paging's interaction with ViewPager has been improved considerably. Specifically, Paging will no longer cancel a
RemoteMediator#loadcall due to a page invalidation. It will also no longer make an append/prepend load request, if REFRESH is required , until REFRESH request completes successfully. ( I6390b , b/162252536 ) - API lint check for MissingGetterMatchingBuilder is enabled for androidx ( I4bbea , b/138602561 )
- Fixed a bug where
.withLoadState*ConcatAdapterhelpers would crash due to notifying RecyclerView from background thread ( I18bb5 , b/170988309 ) - Fixed a bug where loading a very small non-empty page would sometimes prevent prefetch from triggering loads correctly. Iffda3 b/169259468
Version 3.0.0-alpha07
1 октября 2020 г.
androidx.paging:paging-*:3.0.0-alpha07 is released. Version 3.0.0-alpha07 contains these commits.
Изменения в API
- Async PagingData Guava-based operators now accept an Executor as a param, to control execution context. ( Id4372 )
Исправлены ошибки
- Fixed IndexOutOfBounds exception thrown in RemoteMediator due to a race condition. ( I00b7f , b/165821814 )
- Fixed a race condition in DataSource -> PagingSource conversion that could cause the resulting PagingSource to ignore invalidation signals from DataSource.
- Fixed an issue in page fetchin logic that would sometimes cause it to fail to pick up new generations of PagingSource until PagingDataAdapter.refresh() was invoked
- Fixed an issue that would cause scroll-position to sometimes be lost when using a DataSource converted into a PagingSource (such as the one produced by Room), in conjunction with RemoteMediator
Внешний вклад
- Thanks to @simonschiller for adding RxJava2, RxJava3, and Guava-based async transformation operators for PagingData!
Version 3.0.0-alpha06
2 сентября 2020 г.
androidx.paging:paging-*:3.0.0-alpha06 is released. Version 3.0.0-alpha06 contains these commits.
Изменения в API
-
UnsupportedOperationExceptionwith clearer messaging around lack of support for stable ids is now thrown wheneverPagingDataAdapter.setHasStableIdsis called. ( Ib3890 , b/158801427 )
Исправлены ошибки
- insertSeparators no longer filters out empty pages allowing prefetch distance to be respected by the presenter even in cases where many empty pages are inserted. ( I9cff6 , b/162538908 )
Version 3.0.0-alpha05
19 августа 2020 г.
androidx.paging:paging-*:3.0.0-alpha05 is released. Version 3.0.0-alpha05 contains these commits.
Исправлены ошибки
- Paging now correctly prefetches pages even when the presented data is heavily filtered
- Returning
LoadResult.Errorto a retried load no longer causes Item accesses to incorrectly re-trigger retry
Внешний вклад
- Thanks to Clara F for helping clean up some tests! ( 549612 )
Version 3.0.0-alpha04
5 августа 2020 г.
androidx.paging:paging-*:3.0.0-alpha04 is released. Version 3.0.0-alpha04 contains these commits.
Изменения в API
- Added
peek()API toAsyncPagingDataDifferandPagingDataAdapterto allow presented data access without trigger page loads. ( I38898 , b/159104197 ) - Added a
snapshot()API toPagingDataAdapterandAsyncPagingDataDifferto allow retrieving the presented items without triggering page fetch. ( I566b6 , b/159104197 ) - Added a
PagingData.from(List<T>)constructor to allow presenting static lists, which can be combined with the overall PagingData flow to show static lists in certain states, eg, before initial REFRESH finishes or simply for testing transformations. ( Id134d ) - Deprecate dataRefresh Flow / Listener APIs as they were intended to expose the presented items state on REFRESH, but with improvements to loadState Flow / Listener callback timing, and itemCount property, it is redundant ( Ia19f3 )
- Added RxJava3 compatibility wrappers for
PagingSourceandRemoteMediator( I49ef3 , b/161480176 )
Исправлены ошибки
-
PositionalDataSourceconverted intoPagingSourceviatoPagingSourceFactoryhelper, includingPagingSourcegenerated by Room now correctly mark themselves to support jumping. ( I3e84c , b/162161201 ) - Fixed a bug where using the synchronous variant of submitData would sometimes lead to a race causing a
ClosedSendChannelException( I4d702 , b/160192222 )
Внешний вклад
- Thanks to Zac Sweers for adding RxJava3 compatibility wrappers on behalf of Slack! ( I49ef3 , b/161480176 )
Version 3.0.0-alpha03
22 июля 2020 г.
androidx.paging:paging-*:3.0.0-alpha03 is released. Version 3.0.0-alpha03 contains these commits.
Изменения в API
- The constructor for PagingState is now public, which should make testing implementations of getRefreshKey() easier ( I8bf15 )
- Hid DataSource kotlin map function variants from Java, to resolve ambiguity between original and kotlin variants. ( If7b23 , b/161150011 )
- Redundant APIs intended as conveniences for Kotlin users have been marked @JvmSynthetic ( I56ae5 )
- Added overloads for LoadResult.Page's constructor which defaults itemsBefore and itemsAfter to COUNT_UNDEFINED ( I47849 )
- Made existing PagingData operators accept suspending methods and introduced new mapSync, flatMapSync, and filterSync non-suspending operators for Java users. The existing transformation methods have been moved to extension functions so Kotlin users will now need to import them. ( I34239 , b/159983232 )
Исправлены ошибки
- Room (and PositionalDataSource) PagingSources will now display a leading separator as part of the first page, so the user doesn't need to scroll to reveal it. ( I6f747 , b/160257628 )
- Item accesses on placeholders now correctly trigger PagingSource loads until a page is returned that fulfills the requested index after being transformed by PagingData.filter() ( I95625 , b/158763195 )
- Fix for a bug where sometimes scrolling after PagingSource returns an error could prevent PagingDataAdapter.retry() from retrying. ( I1084f , b/160194384 )
- Fixes an issue where item accesses after dropping a page might not load pages although the item access was within prefetchDistance ( Ie95ae , b/160038730 )
- Setting PagingConfig.maxSize no longer enables placeholders after a drop event ( I2be29 , b/159667766 )
Version 3.0.0-alpha02
24 июня 2020 г.
androidx.paging:paging-*:3.0.0-alpha02 is released. Version 3.0.0-alpha02 contains these commits.
Изменения в API
- Added overloads for
PagingConfig's constructor with common default values ( I39c50 , b/158576040 ) - Added overloads for constructors of
PagingDataAdapterandAsyncPagingDataDifferwith common default values ( Ie91f5 ) - The adapter APIs,
dataRefreshFlowanddataRefreshListenernow pass a Boolean to signal whether aPagingDatais empty ( I6e37e , b/159054196 ) - Added RxJava and Guava APIs for RemoteMediator - RxRemoteMediator and ListenableFutureRemoteMediator
- Added helpers to PagingState for common item access such as
isEmpty()andfirstItemOrNull()( I3b5b6 , b/158892717 )
Исправлены ошибки
- Pager now checks for PagingSource reuse in factory, to prevent accidental reuse of invalid PagingSources, which gave an unclear error ( I99809 , b/158486430 )
- Failures from RemoteMediator REFRESH no longer prevent PagingSource from loading ( I38b1b , b/158892717 )
- The non-suspending version of
submitDatano longer causes a crash due to concurrent collection on multiplePagingDatawhen called after the suspending version ofsubmitData. ( I26358 , b/158048877 ) - Fixed "cannot collect twice from pager" exception that could occur after config change ( I58bcc , b/158784811 )
Version 3.0.0-alpha01
10 июня 2020 г.
androidx.paging:paging-*:3.0.0-alpha01 is released. Version 3.0.0-alpha01 contains these commits.
The Paging Library has updated to 3.0, to enable several major new features.
New Features of 3.0
- First-class support for Kotlin coroutines and Flow.
- Support for async loading with coroutines suspend functions, RxJava Single or Guava ListenableFuture primitives .
- Built-in load state and error signals for responsive UI design, including retry and refresh functionality.
- Improvements to the repository layer
- Simplified data source interface
- Simplified network + database pagination
- Cancellation support
- Improvements to the presentation layer
Известные проблемы
- Paging 3 javadocs are not yet available. In the interim, please use the guides linked above or the Kotlin docs. ( b/158614050 )
Версия 2.1.2
Версия 2.1.2
18 марта 2020 г.
androidx.paging:paging:2.1.2 is released. Version 2.1.2 contains these commits against 2.1.0 .
Исправлены ошибки
- Fix for
IndexOutOfBoundsExceptionin rare cases when converting a position during invalidation.
Release issue
Paging version
2.1.1was released incorrectly from a misconfigured branch, exposing partially-implemented APIs and functionality upcoming in a future release.Paging
2.1.2contains the load-centering fix originally released in 2.1.1, but this time correctly cherry-picked atop the 2.1.0 release. It is strongly recommended to upgrade to this release, if you are currently on 2.1.1.
Версия 2.1.1
Версия 2.1.1
18 декабря 2019 г.
androidx.paging:paging-*:2.1.1 is released. Version 2.1.1 contains these commits .
Исправлены ошибки
- Contiguous initial loads from PositionalDataSources are now centered around last access when placeholders disabled
Версия 2.1.0
Версия 2.1.0
25 января 2019 г.
Paging 2.1.0 is released with no changes from 2.1.0-rc01 .
Версия 2.1.0-rc01
6 декабря 2018 г.
Paging 2.1.0-rc01 is released with no changes from 2.1.0-beta01 .
Версия 2.1.0-beta01
1 ноября 2018 г.
Paging 2.1.0-beta01 is released with no changes from 2.1.0-alpha01 .
Version 2.1.0-alpha01
12 октября 2018 г.
Paging 2.1.0-alpha01 has two major additions - page dropping, and KTX extension libraries for every artifact - as well as several other API changes and bugfixes.
Изменения в API
- Added
PagedList.Config.Builder.setMaxSize()for limiting the number of loaded items in memory. - Added
androidx.paging.Config()as a Kotlin alternative forPagedList.Config.Builder - Added
androidx.paging.PagedList()as a Kotlin alternative forPagedList.Builder - Added
DataSourceFactory.toLiveData()as a Kotlin alternative forLivePagedListBuilder - Added
DataSourceFactory.toObservable()andtoFlowable()as Kotlin alternatives forRxPagedListBuilder - Added
AsyncPagedListDiffer.addPagedListListener()for listening to when PagedList is swapped. b/111698609 - Added
PagedListAdapter.onCurrentListChanged()variant that passes old and new list, deprecated previous variant. - Added
PagedListAdapter/AsyncPagedListDiffer.submitList()variants which take an additional callback that triggers if/when the pagedlist is displayed, after diffing. This allows you to synchronize a PagedList swap with other UI updates. b/73781068 -
PagedList.getLoadedCount()added to let you know how many items are in memory. Note that the return value is always equal to.size()if placeholders are disabled.
Исправлены ошибки
- Fixed a race condition when diffing if lists are reused b/111591017
-
PagedList.loadAround()now throwsIndexOutOfBoundsExceptionwhen index is invalid. Previously it could crash with an unclear other exception. - Fixed a case where an extremely small initial load size together with unchanged data would result in no further loading b/113122599
Версия 2.0.0
Версия 2.0.0
1 октября 2018 г.
Paging 2.0.0 is released with a single bugfix.
Исправлены ошибки
- Fixed a crash that could occur with very fast scrolling using
PositionalDataSourceand placeholders b/114635383 .
Version 2.0.0-beta01
2 июля 2018 г.
Исправлены ошибки
- Fixed content disappearing in some prepend cases (placeholders disabled, PositionalDataSource) b/80149146
- (Already released in
1.0.1) Fixed crashes wherePagedListAdapterandAsyncPagedListDifferwould fail to signal move events. b/110711937
Pre-AndroidX Dependencies
For the pre-AndroidX versions of Paging that follow, include these dependencies:
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"
}
Версия 1.0.1
Версия 1.0.1
26 июня 2018 г.
Paging 1.0.1 is released with a single bugfix in runtime . We highly recommend using 1.0.1 for stability. Paging RxJava2 1.0.1 is also released, and is identical to 1.0.0-rc1 .
Исправлены ошибки
- Fixed crashes where
PagedListAdapterandAsyncPagedListDifferwould fail to signal move events. b/110711937
RxJava2 Version 1.0.0
RxJava2 Version 1.0.0-rc1
16 мая 2018 г.
Paging RxJava2 1.0.0-rc1 is moving to release candidate with no changes from the initial alpha.
Версия 1.0.0
Version 1.0.0-rc1
April 19, 2018 Paging Release Candidate
We do not have any more known issues or new features scheduled for the Paging 1.0.0 release. Please upgrade your projects to use 1.0.0-rc1 and help us battle test it so that we can ship a rock solid 1.0.0 .
There are no changes in this release, it is the same as 1.0.0-beta1 .
Version 1.0.0-beta1
5 апреля 2018 г.
Paging will be in beta for a short time before progressing to release candidate. We are not planning further API changes for Paging 1.0 , and the bar for any API changes is very high.
Alpha RxJava2 support for Paging is released as a separate optional module ( android.arch.paging:rxjava2:1.0.0-alpha1 ) and will temporarily be versioned separately until it stabilizes.
This new library provides an RxJava2 alternative to LivePagedListBuilder , capable of constructing Observable s and Flowable s, taking Scheduler s instead of Executor s:
Котлин
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
Java
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
Новые функции
-
RxPagedListBuilderis added via the newandroid.arch.paging:rxjava2artifact.
Изменения в API
API changes to clarify the role of executors in builders:
Renamed
setBackgroundThreadExecutor()tosetFetchExecutor()(inPagedList.BuilderandLivePagedListBuilder)Renamed
setMainThreadExecutor()tosetNotifyExecutor()(inPagedList.Builder).
Fixed
PagedList.mCallbacksmember to be private.
Исправлены ошибки
LivePagedListBuildertriggers initialPagedListload on the specified executor, instead of the Arch Components IO thread pool.Fixed invalidate behavior in internal
DataSourcewrappers (used to implementDataSource.map, as well as placeholder-disabledPositionalDataSourceloading) b/77237534
Version 1.0.0-alpha7
21 марта 2018 г.
Paging 1.0.0-alpha7 is released alongside Lifecycles 1.1.1 . As Paging alpha7 depends on the move of the Function class mentioned above, you will need to update your lifecycle:runtime dependency to android.arch.lifecycle:runtime:1.1.1 .
Paging alpha7 is planned to be the final release before Paging hits beta.
Изменения в API
-
DataSource.LoadParamsobjects now have a public constructor andDataSource.LoadCallbackobjects are now abstract. This enables wrapping aDataSourceor directly testing aDataSourcewith a mock callback. b/72600421 - Mappers for DataSource and DataSource.Factory
-
map(Function<IN,OUT>)allows you to transform, wrap, or decorate results loaded by aDataSource. -
mapByPage(<List<IN>,List<OUT>>)enables the same for batch processing (eg if items loaded from SQL need to additionally query a separate database, that can be done as a batch.)
-
-
PagedList#getDataSource()is added as a convenience method b/72611341 - All deprecated classes have been removed from the API, including the remains of
recyclerview.extensionspackage, and theLivePagedListProvider. -
DataSource.Factoryis changed from an interface to an abstract class to enable map functionality.
Исправлены ошибки
- Changed Builders to be final. b/70848565
- Room
DataSourceimplementation is now fixed to handle multi-table queries - this fix is contained within Room 1.1.0-beta1, see above. - Fixed a bug where
BoundaryCallback.onItemAtEndLoadedwould not be invoked forPositionalDataSourceif placeholders are enabled and the total size is an exact multiple of the page size.
Version 1.0.0-alpha5
22 января 2018 г.
Исправлены ошибки
- Fix page loading when placeholders are disabled b/70573345
- Additional logging for tracking down IllegalArgumentException bug b/70360195 (and speculative Room-side fix)
- Javadoc sample code fixes b/70411933 , b/71467637