Пейджинг
В этой таблице перечислены все артефакты в группе androidx.paging .
| Артефакт | Стабильный релиз | Кандидат на релиз | Бета-версия | Альфа-релиз |
|---|---|---|---|---|
| пейджинг-* | 3.3.6 | - | - | 3.4.0-альфа04 |
| paging-compose | 3.3.6 | - | - | 3.4.0-альфа04 |
Объявление зависимостей
Чтобы добавить зависимость от 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-alpha04" }
Котлин
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-alpha04") }
Информацию об использовании расширений Kotlin см. в документации ktx .
Дополнительную информацию о зависимостях см. в разделе Добавление зависимостей сборки .
Обратная связь
Ваши отзывы помогают улучшить Jetpack. Сообщите нам, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с уже существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете проголосовать за существующую проблему, нажав на кнопку со звёздочкой.
Более подробную информацию см. в документации по системе отслеживания проблем .
Версия 3.4
Версия 3.4.0-альфа04
10 сентября 2025 г.
Выпущен androidx.paging:paging-*:3.4.0-alpha04 . Версия 3.4.0-alpha04 содержит следующие коммиты .
Изменения API
- Добавлен новый API
PagingStateclosestItemAroundPositionдля получения загруженного элемента, ближайшего к целевой позиции и соответствующего входному предикату. Это можно использовать для генерации ключей обновления на основе элементов, когда идеальный привязываемый элемент находится вблизи целевой позиции, но не в ней. ( I96e5c , b/440187139 )
Версия 3.4.0-альфа03
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 и десктоп), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) и Web (JavaScript, WasmJS). ( I0c543 , b/435014650 )
- В Paging-compose добавлены новые цели Kotlin Multiplatform (KMP). Теперь он поддерживает JVM (Android и десктоп), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) и Web (JavaScript, WasmJS). ( I70d44 , b/436884801 )
Изменения API
- Перемещение minSdk по умолчанию из API 21 в API 23 ( Ibdfca , b/380448311 , b/435705964 , b/435705223 )
Версия 3.4.0-альфа02
30 июля 2025 г.
Выпущен androidx.paging:paging-*:3.4.0-alpha02 . Версия 3.4.0-alpha02 содержит следующие коммиты .
Изменения API
-
PagingData.fromтеперь позволяет устанавливатьplaceholdersBeforeиplaceholdersAfter. Обратите внимание, что прокрутка этих плейсхолдеров не запускает загрузку. ( I06983 )
Версия 3.4.0-альфа01
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-Multiplatform: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 Paging или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 на разных платформах
Теперь пагинация отправляет артефакты, совместимые с Kotlin Multiplatform, во многом благодаря работе над проектом пагинации CashApp.
-
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-альфа05
20 марта 2024 г.
Выпущен androidx.paging:paging-*:3.3.0-alpha05 . Версия 3.3.0-alpha05 содержит следующие коммиты .
Изменения API
- Теперь при пагинации используется аннотация AndroidX
@MainThreadдля общего кода. ( I78f0d , b/327682438 )
Версия 3.3.0-альфа04
6 марта 2024 г.
Выпущена androidx.paging:paging-*:3.3.0-alpha04 . Версия 3.3.0-alpha04 содержит следующие коммиты .
Исправления ошибок
- Исправлены незначительные ошибки документации, связанные с добавлением мультиплатформенной совместимости Kotlin. ( aosp/2950785 )
Версия 3.3.0-альфа03
7 февраля 2024 г.
Выпущена androidx.paging:paging-*:3.3.0-alpha03 . Версия 3.3.0-alpha03 содержит следующие изменения.
Новые функции
-
PagingDataPresenterтеперь является публичным классом. Мультиплатформенные презентеры теперь можно создавать на основеPagingDataPresenter, не требуя внутренних API Paging или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-альфа02
20 сентября 2023 г.
Выпущена androidx.paging:paging-*:3.3.0-alpha02 . Версия 3.3.0-alpha02 содержит следующие изменения.
Совместимость с Kotlin на разных платформах
Подкачка теперь поставляет артефакты, совместимые с Kotlin Multiplatform, во многом благодаря работе над проектом CashApp по подкачиванию мультиплатформенных подкачек . Это позволит нам избежать расхождений между двумя репозиториями и поддерживать их совместимость.
-
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-альфа01
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)))). Передайте этот поток в@Previewcomposables как приемник для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 в тестах. - Расширение
asSnapshotKotlin для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. Эту фабрику можно использовать для создания экземпляра пейджера.
Версия 3.2.0-rc01
21 июня 2023 г.
Выпущена androidx.paging:paging-*:3.2.0-rc01 . Версия 3.2.0-rc01 содержит следующие изменения.
Внешний вклад
Версия 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-альфа06
24 мая 2023 г.
Выпущена androidx.paging:paging-*:3.2.0-alpha06 . Версия 3.2.0-alpha06 содержит следующие изменения.
Новые функции
- Добавлен новый функциональный интерфейс
PagingSourceFactory, предоставляющий более выраженную API-поверхность, чем существующие лямбда-выражения() -> PagingSource. Эта фабрика может использоваться для создания экземпляраPager. ( I33165 , b/280655188 ) - Добавлен новый API
paging-testingList<Value>.asPagingSourceFactory(), позволяющий получитьPagingSourceFactory, загружающий данные только из неизменяемого списка. Существующее расширение дляFlow<List<Value>>следует по-прежнему использовать для тестирования с несколькими генерациями статических данных. ( Id34d1 , b/280655188 )
Изменения API
- Все публичные API в тестировании страниц теперь аннотируются
@VisibleForTesting, чтобы гарантировать, что эти API используются только в тестах. ( I7db6e ) - API
asSnapshotбольше не требует передачиCoroutineScope. Теперь по умолчанию используется контекст, унаследованный от родительской области действия. ( Id0a78 , b/282240990 ) - Изменен порядок параметров конструктора
TestPagerдля интуитивного соответствия порядку реальных параметров конструктораPager( I6185a ). - Использование типа лямбда
() -> PagingSource<Key, Value>в paging-testing перенесено на типPagingSourceFactory<Key, Value>. ( I4a950 , b/280655188 )
Изменения поведения
- Для запуска тестов
asSnapshotPaging больше не требуется главный диспетчер. Его установка больше не вносит никаких изменений в поведение теста. ( Ie56ea )
Версия 3.2.0-альфа05
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 )
Внешние взносы
- Спасибо Veyndan за вклад в отход пейджинга от специфики Android/JVM. ( #525 , #523 , #520 , #519 , #507 , #506 , #505 , #499 , #497 , #496 , #493 )
Версия 3.2.0-альфа04
8 февраля 2023 г.
Выпущена androidx.paging:paging-*:3.2.0-alpha04 . Версия 3.2.0-alpha04 содержит следующие изменения.
Тестирование пейджинга
- Артефакт
paging-testingтеперь содержит методasPagingSourceFactoryдля созданияpagingSourceFactoryизFlow<List<Value>>который будет передан пейджеру. КаждыйList<Value>>создаваемый потоком, представляет собой генерацию постраничных данных. Это упрощает тестирование постраничного обмена, например, преобразований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-альфа03
24 октября 2022 г.
Выпущена androidx.paging:paging-*:3.2.0-alpha03 . Версия 3.2.0-alpha03 содержит следующие изменения.
Тестирование пейджинга
Этот выпуск содержит новый артефакт: paging-testing . Этот артефакт предоставляет API, разработанные для модульного тестирования каждого слоя вашего приложения и его изолированной интеграции с пейджингом.
Например, этот первый выпуск включает класс TestPager , который позволяет вам проверять поведение вашей собственной реализации PagingSource независимо от Pager и реального пользовательского интерфейса, которые обычно требуются для моделирования сквозной интеграции Paging.
TestPager следует считать подделкой — тестовым двойником , который зеркально отражает реальную реализацию Pager , предоставляя при этом упрощённый API для тестирования PagingSource . Эти API являются API suspend и должны запускаться в 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-альфа02
10 августа 2022 г.
Выпущена androidx.paging:paging-*:3.2.0-alpha02 . Версия 3.2.0-alpha02 содержит следующие изменения.
Новые функции
- Пейджинг теперь предоставляет журналы через классы
AsyncPagingDataDifferилиPagingDataAdapterдля предоставления отладочной информации, собранной изPagingData. - Журналы можно включить с помощью команды
adb shelladb 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-альфа01
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 )
Внешний вклад
- Обновлен :compose:ui:ui-test api (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.LoadResult.InvalidизPagingSource.load, который заставляет 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-альфа04
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-альфа03
21 июля 2021 г.
Выпущена androidx.paging:paging-*:3.1.0-alpha03 . Версия 3.1.0-alpha03 содержит следующие изменения.
Изменения API
Третий тип возвращаемого значения LoadResult — LoadResult.Invalid — добавлен в PagingSource. Когда 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, использующим исчерпывающую проверку возвращаемого типа, придётся добавить проверку на недопустимый тип. ( Id6bd3 , b/191806126 , b/192013267 )
Исправления ошибок
- Обратные вызовы для аннулирования, добавленные через PagingSource.registerInvalidatedCallback или DataSource.addInvalidatedCallback, теперь автоматически срабатывают, если они были зарегистрированы в PagingSource/DataSource, который уже был недействительным. Это устраняет состояние гонки, из-за которого Paging пропускал сигналы аннулирования и зависал при предоставлении Source, который уже был недействительным во время первоначальной загрузки. Кроме того, обратные вызовы для аннулирования теперь корректно удаляются после срабатывания, поскольку они гарантированно будут вызваны не более одного раза. ( I27e69 )
- Отправка начального значения заполнителя (InitialPagedList) из вновь созданного потока PagedList, например, LivePagedListBuilder или RxPagedListBuilder, больше не будет очищать ранее загруженные данные.
Версия 3.1.0-альфа02
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-альфа01
2 июня 2021 г.
Выпущена androidx.paging:paging-*:3.1.0-alpha01 . Версия 3.1.0-alpha01 содержит следующие изменения.
Изменения API
- Классы, предоставляемые
paging-rxjava3теперь находятся в пакетеandroidx.paging.rxjava3, чтобы не конфликтовать сpaging-rxjava2( Ifa7f6 )
Исправления ошибок
- Исправлена ошибка, из-за которой Paging иногда отправлял события no-op different в RecyclerView, что могло приводить к раннему срабатыванию некоторых прослушивателей. ( Ic507f , b/182510751 )
Внешний вклад
- Добавлены устаревшие совместимые с PagedList API в артефакт rxjava3 ( Id1ce2 , b/182497591 ).
Пейджинговая версия Compose 1.0.0
Версия 1.0.0-альфа20
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-альфа19
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. Устранение этой негибкости — основное обновление в этом выпуске.
Для поддержки большего количества ленивых макетов нам потребовалось разработать API на другом уровне. Вместо предоставления API для каждого ленивого items , Paging Compose теперь предоставляет несколько низкоуровневые методы расширения для LazyPagingItems в itemKey и itemContentType . Эти API направлены на помощь в реализации параметров key и contentType в стандартных API items , которые уже существуют для LazyColumn , LazyVerticalGrid , а также их эквивалентов в таких API, как HorizontalPager . ( Ifa13b , Ib04f0 , b/259385813 )
Это означает, что поддержка LazyVerticalGrid будет выглядеть так:
// 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)
}
}
Дополнительные примеры использования этих новых API см. в наших примерах .
Хотя эти изменения действительно делают примеры LazyColumn и LazyRow на несколько строк длиннее, мы считаем, что согласованность во всех ленивых макетах является важным фактором для тех, кто будет использовать Paging Compose в будущем. По этой причине существующие расширения LazyListScope устарели. ( I0c459 , I92c8f , б/276989796 )
Изменения API
- Чтобы упростить переход на новые API, функции расширения
itemsиitemsIndexedвLazyListScopeтеперь поддерживают параметрcontentType, что отражает поддержку в новых API. ( Ib1918 , р/255283378 )
Обновления зависимостей
- Paging Compose обновил свою зависимость с Compose 1.0.5 до Compose 1.2.1. ( Ib1918 , р/255283378 )
Версия 1.0.0-альфа18
8 февраля 2023 г.
androidx.paging:paging-compose:1.0.0-alpha18 выпущен без изменений. Версия 1.0.0-alpha18 содержит эти коммиты.
Версия 1.0.0-альфа17
24 октября 2022 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha17 . Версия 1.0.0-alpha17 содержит эти коммиты.
Новые функции
- Добавьте поддержку пользовательского
CoroutineContextпри вызовеcollectLazyPagingItems. ( I7a574 , б / 243182795 , б / 233783862 )
Версия 1.0.0-альфа16
10 августа 2022 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha16 . Версия 1.0.0-alpha16 содержит эти коммиты.
Новые функции
- Пейджинг теперь предоставляет журналы через класс
LazyPagingItems, чтобы предоставлять отладочную информацию, собранную из PagingData. - Журналы можно включить с помощью команды
adb shelladb shell setprop log.tag.Paging [DEBUG|VERBOSE]. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
Исправления ошибок
- Исправлена недостающая ошибка конструктора
PagingDataDifferпри использованииpaging-compose:1.0.0-alpha15сpaging-common:3.1.1или старше. ( b/235256201 , b/239868768 ).
Версия 1.0.0-альфа15
1 июня 2022 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha15 . Версия 1.0.0-alpha15 содержит эти коммиты.
Изменения API
- Добавлены конструкторы для
PagingDataAdapterиAsyncPagingDataDiffer, которые принимаютCoroutineContextвместоCoroutineDispatcher. ( Idc878 )
Исправления ошибок
-
LazyPagingItemsтеперь устанавливает для начальногоloadStateобновлениеLoadState.Loading. ( I55043 , б / 224855902 )
Версия 1.0.0-альфа14
13 октября 2021 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha14 . Версия 1.0.0-alpha14 содержит эти коммиты.
Версия 1.0.0-альфа13
29 сентября 2021 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha13 . Версия 1.0.0-alpha13 содержит эти коммиты.
Изменения API
- Функция
LazyPagingItems.snapshot()заменена свойствомLazyPagingItems.itemSnapshotList( Ie2da8 ). - Устаревший
LazyPagingItems.getAsState()был удален ( Ie65e4 ).
Версия 1.0.0-альфа12
21 июля 2021 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha12 . Версия 1.0.0-alpha12 содержит эти коммиты.
Изменения API
-
items(lazyPagingItems)иitemsIndexed(lazyPagingItems)используемые для соединения Paging сLazyColumn/Rowтеперь принимают параметр ключа опции, который позволяет указать стабильный ключ, представляющий элемент. Подробнее о ключах можно прочитать здесь. ( I7986d ) - Функция
lazyPagingItems.getAsState(index)устарела. Вместо этого используйтеlazyPagingItems[index]. ( I086cb , б/187339372 )
Версия 1.0.0-альфа11
30 июня 2021 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha11 . Версия 1.0.0-alpha11 содержит эти коммиты.
Версия 1.0.0-альфа10
2 июня 2021 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha10 . Версия 1.0.0-alpha10 содержит эти коммиты.
Версия 1.0.0-альфа09
18 мая 2021 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha09 . Версия 1.0.0-alpha09 содержит эти коммиты.
Исправления ошибок
- ItemCount и метод получения элемента LazyPagingItems теперь доступны для наблюдения, что позволяет использовать его также с LazyVerticalGrid ( Ie2446 , b/171872064 , b/168285687 ).
Совместимость с композицией
-
androidx.paging:paging-compose:1.0.0-alpha09совместим только с Compose версии1.0.0-beta07и выше.
Версия 1.0.0-альфа08
24 февраля 2021 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha08 . Версия 1.0.0-alpha08 содержит эти коммиты.
Обновлено для интеграции с Compose 1.0.0-beta01.
Версия 1.0.0-альфа07
10 февраля 2021 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha07 . Версия 1.0.0-alpha07 содержит эти коммиты.
Обновлено для интеграции с Compose Alpha12.
Версия 1.0.0-альфа06
28 января 2021 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha06 . Версия 1.0.0-alpha06 содержит эти коммиты.
Исправления ошибок
Обновлено в зависимости от Compose 1.0.0-alpha11.
Версия 1.0.0-альфа05
13 января 2021 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha05 . Версия 1.0.0-alpha05 содержит эти коммиты.
Обновлено в зависимости от Compose 1.0.0-alpha10.
Версия 1.0.0-альфа04
16 декабря 2020 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha04 . Версия 1.0.0-alpha04 содержит эти коммиты.
Исправления ошибок
- Обновлены удобные свойства
CombinedLoadStates.refresh,CombinedLoadStates.prepend,CombinedLoadStates.appendдля перехода отLoadingкNotLoadingтолько после того, как состояния загрузки посредника и источника станутNotLoading, чтобы гарантировать применение удаленного обновления. ( I65619 )
Версия 1.0.0-альфа03
2 декабря 2020 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha03 . Версия 1.0.0-alpha03 содержит эти коммиты.
- Обновлено для соответствия Compose 1.0.0-alpha08.
Версия 1.0.0-альфа02
11 ноября 2020 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha02 . Версия 1.0.0-alpha02 содержит эти коммиты.
Изменения API
- В
LazyPagingItemдобавлены методы.peek(),.snapshot(),.retry()и.refresh(), которые предоставляют ту же функциональность, что иAsyncPagingDataDiffer/PagingDataAdapter( Iddfe8 , b/172041660 ).
Версия 1.0.0-альфа01
28 октября 2020 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha01 . Версия 1.0.0-alpha01 содержит эти коммиты.
Новые функции
Артефакт paging-compose обеспечивает интеграцию между The Paging Library и Jetpack Compose . Простой пример использования:
@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 . Версия 3.0.1 содержит эти коммиты.
Исправления ошибок
- Доступ к
PagedList.dataSourceиз исходного значения, созданногоLivePagedListилиRxPagedListбольше не будет ошибочно вызывать исключение IllegalStateException ( I96707 ).
Версия 3.0.0
Версия 3.0.0
5 мая 2021 г.
Выпущен androidx.paging:paging-*:3.0.0 . Версия 3.0.0 содержит эти коммиты.
Основные особенности версии 3.0.0
Большая часть существующего API из Paging 2.xx устарела в пользу новых API Paging 3, чтобы внести следующие улучшения:
- Первоклассная поддержка сопрограмм Kotlin и Flow.
- Поддержка отмены
- Встроенные сигналы состояния нагрузки и ошибок.
- Функция повтора + обновления
- Все три подкласса DataSource были объединены в единый класс PagingSource.
- Пользовательские преобразования страниц, включая встроенное преобразование для добавления разделителей.
- Загрузка верхних и нижних колонтитулов состояния
Версия 3.0.0-rc01
21 апреля 2021 г.
Выпущен androidx.paging:paging-*:3.0.0-rc01 . Версия 3.0.0-rc01 содержит эти коммиты.
Исправления ошибок
- Исправлена проблема, из-за которой пейджинг иногда отправлял неактивные события различия в RecyclerView, что могло привести к преждевременному срабатыванию некоторых прослушивателей. ( Ic507f , б/182510751 )
Версия 3.0.0-бета03
24 марта 2021 г.
Выпущен androidx.paging:paging-*:3.0.0-beta03 . Версия 3.0.0-beta03 содержит эти коммиты.
Исправления ошибок
- Мы обновили способ обработки заполнителей при перезагрузке списка, чтобы предотвратить неожиданные переходы в RecyclerView. Подробности смотрите в NullPaddedDiffing.md . ( Если1490 , б/170027529 , б/177338149 )
- Различные сборщики PagedList (старый путь совместимости) больше не неправильно синхронно вызывают
DataSource.Factory.create()в главном потоке при вызове.build(). ( б / 182798948 )
Версия 3.0.0-бета02
10 марта 2021 г.
Выпущен androidx.paging:paging-*:3.0.0-beta02 . Версия 3.0.0-beta02 содержит эти коммиты.
Изменения API
- Расширения Rx3 теперь правильно распространяют требование согласия
@ExperimentalCoroutinesApi. Ранее они были отмечены в методе@get, который игнорируется компилятором Kotlin по следующей причине: https://youtrack.jetbrains.com/issue/KT-45227 ( I5733c )
Исправления ошибок
- Ввести ограничения на публичное использование экспериментальных API ( I6aa29 , b/174531520 ).
- Исправлена ошибка, из-за которой
PagingStateвсегда имело значениеnullпри вызове удаленного обновления. - Исправлена ошибка, из-за которой пустые страницы, возвращаемые PagingSource, могли препятствовать повторной выборке Paging для выполнения
prefetchDistance, что приводило к «зависанию» Paging.
Версия 3.0.0-бета01
10 февраля 2021 г.
Выпущен androidx.paging:paging-*:3.0.0-beta01 . Версия 3.0.0-beta01 содержит эти коммиты.
Изменения API
- Обертки Rx2 и Rx3 теперь предоставляют экспериментальную аннотацию, от которой она зависит. Если вы используете оболочки совместимости Rx в paging-rxjava2 или paging-rxjava3, теперь вам нужно будет аннотировать использование с помощью
@OptIn(ExperimentalCoroutinesApi::class)( Ib1f9d ).
Исправления ошибок
- Исправлено исключение
IndexOutOfBoundsException: Inconsistency detectedиногда возникало при использовании API-интерфейсовDataSourceверсии 2 через пути совместимости. - Вызов
isInvalidво время инициализацииDataSourceпри использовании через пути совместимости теперь корректно запускается в fetchDispatcher, а не в основном потоке. Это исправляет исключениеIllegalStateExceptionиз-за доступа к базе данных в основном потоке при использовании реализацииPagingSourceRoom.
Версия 3.0.0-альфа13
27 января 2021 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha13 . Версия 3.0.0-alpha13 содержит эти коммиты.
Изменения API
-
PagingSource.getRefreshKeyбольше не является необязательным для реализации, теперь это абстрактная функция без реализации по умолчанию. Мигрирующие пользователи могут либо продолжать возвращать реализацию по умолчанию, которая просто возвращаетnull, ноgetRefreshKey()должна иметь реальную реализацию, возвращающую ключ на основе текущей позиции прокрутки пользователя, что позволяет Paging продолжать загрузку, сосредоточенную вокруг области просмотра, черезPagingState.anchorPosition, если это возможно. ( I4339a ) -
InvalidatingPagingSourceFactoryтеперь является финальным классом ( Ia3b0a ). - Разрешите настройку поведения разделителя терминалов (верхний/нижний колонтитул) с помощью дополнительного необязательного параметра SeparatorType. Два варианта:
-
FULLY_COMPLETE— существующее поведение; дождитесь, пока PagingSource и RemoteMediator пометят endOfPaginationReached, прежде чем добавлять разделители терминалов. Если RemoteMediator не используется, удаленный loadState игнорируется. Это в первую очередь полезно, если вы хотите отображать разделители разделов только тогда, когда раздел полностью загружен, включая выборку из удаленного источника, например, из сети. -
SOURCE_COMPLETE— дождитесь, пока PagingSource отметит endOfPaginationReached, даже если используется RemoteMediator. Это позволяет отображать верхние и нижние колонтитулы синхронно с начальной загрузкой, что избавляет пользователей от необходимости прокручивать страницу, чтобы увидеть разделители терминалов. ( Ibe993 , б/174700218 )
-
Исправления ошибок
- Исправлена редкая утечка памяти, которая происходит, когда PagingSource становится недействительным еще до того, как PageFetcher может начать загрузку из него. ( I9606b , б/174625633 )
Версия 3.0.0-альфа12
13 января 2021 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha12 . Версия 3.0.0-alpha12 содержит эти коммиты.
Изменения API
- InvalidatingPagingSourceFactory больше не является абстрактным классом, поскольку у него никогда не было абстрактных методов. ( I4a8c4 )
- Добавлена перегрузка .cachedIn(), которая принимает ViewModel вместо Lifecycle или CoroutineScope для пользователей Java. ( I97d81 , б/175332619 )
- Разрешите вызывающим объектам Java использовать операции преобразования PagingData асинхронным способом, приняв Executor в аргументы оператора преобразования. Из всех операторов преобразования -Sync теперь удален суффикс -Sync, и пользователям Kotlin Coroutine придется устранять неоднозначность, вызывая функцию расширения, которая вместо этого принимает приостанавливающий блок. Все операторы преобразования PagingData были перемещены в расширения статического класса PagingDataTransforms. Пользователям Java необходимо будет вызывать их через статические помощники, например
PagingDataTransforms.map(pagingData, transform)Для пользователей Kotlin синтаксис тот же, но вам нужно будет импортировать функцию. ( Если6885 , б/172895919 )
Исправления ошибок
- Исправлена ошибка, из-за которой
RemoteMediator.load()не вызывался во времяadapter.refresh(), если конец нумерации страниц уже был достигнут.
Версия 3.0.0-альфа11
16 декабря 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha11 . Версия 3.0.0-alpha11 содержит эти коммиты.
Новые функции
- Добавлена поддержка сохраненного состояния для следующих основных вариантов использования (полная поддержка, особенно в случае с многоуровневым исходным кодом, все еще находится в стадии разработки):
- поток кэшируется, а приложение не уничтожается (например, поток кэшируется в модели представления, а активность воссоздается в процессе)
- источник подкачки учитывается, заполнители включены, а макет не смещен.
Изменения API
-
PagingSource.getRefreshKey()теперь является стабильным API ( I22f6f , b/173530980 ). -
PagingSource.invalidateбольше не является открытой функцией. Если вам нужно получать уведомления при аннулировании, рассмотрите возможность вызова метода RegisterInvalidatedCallback вместо переопределения инвалидации. ( I628d9 , б / 173029013 , б / 137971356 ) - Теперь у Pager есть один экспериментальный конструктор наряду с обычными конструкторами, вместо того, чтобы переносить экспериментальные API в неэкспериментальные общедоступные API через аннотацию согласия. ( I9dc61 , б/174531520 )
- Обновлены удобные свойства
CombinedLoadStates.refresh,CombinedLoadStates.prepend,CombinedLoadStates.appendдля перехода отLoadingкNotLoadingтолько после того, как состояния загрузки посредника и источника станутNotLoading, чтобы гарантировать применение удаленного обновления. ( I65619 ) LoadParams.pageSize был удален (он уже устарел). Рекомендуется использовать
LoadParams.loadSizeв вашем PagingSource.LoadParams.loadSizeвсегда равенPagingConfig.pageSize, за исключением вызова начальной загрузки, где он равенPagingConfig.initialLoadSize.Если вы тестируете источник данных Paging2 без использования Pager или PagedList,
pageSizeможет не соответствоватьPagingConfig.pageSize, если вы также устанавливаетеinitialLoadSize. Если это важно для ваших тестов, попробуйте вместо этого использовать Pager/PagedList, который внутренне установит правильный размер страницы для ваших методов загрузки источника данных. ( I98ac7 , б / 149157296 )
Исправления ошибок
- Исправлен сбой из-за IllegalStateException при использовании разделителей с установленным PagingConfig.maxSize. ( I0ed33 , б/174787528 )
- Исправлена ошибка, из-за которой состояние загрузки для PREPEND/APPEND не обновлялось до
NotLoading(endOfPaginationReached = true)сразу после начальной загрузки, если был установлен RemoteMediator ( I8cf5a ). - Исправлена ошибка, из-за которой API на стороне презентатора, такие как .snapshot(), .peek() и т. д., возвращали предыдущий (устаревший) список в обновлениях ListUpdateCallback.
- Исправлена ошибка, из-за которой операторы разделителей не добавляли верхние и нижние колонтитулы при использовании с RemoteMediator.
- Исправлена ошибка, из-за которой обновления LoadState для NotLoading для RemoteMediator зависали в состоянии загрузки.
- Исправлена ошибка, из-за которой API совместимости Paging2.0,
.asPagingSourceFactory(), мог привести к инициализации резервногоDataSourceна неправильном CoroutineDispatcher. Это устраняет сбой и возможные случаи ANR, особенно при использовании текущей реализации PagingSource от Room, которая использует этот путь совместимости.
Версия 3.0.0-альфа10
2 декабря 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha10 . Версия 3.0.0-alpha10 содержит эти коммиты.
Изменения API
Устаревшие API
dataRefreshFlowиdataRefreshListenerбыли удалены, поскольку они являются избыточными при обновлениях loadStateFlow/прослушивателя. Для тех, кто мигрирует, эквивалент loadStateFlow:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }( Ib5570 , б/173530908 )
Исправления ошибок
- EndOfPaginationReached для RemoteMediator
REFRESHтеперь правильно распространяется на обновления LoadState и предотвращает запуск удаленныхAPPENDиPREPEND. ( I94a3f , б / 155290248 ) - Представление пустого списка из-за пустой начальной страницы или жесткой фильтрации больше не будет препятствовать запуску Paging загрузки
PREPENDилиAPPEND. ( I3e702 , б/168169730 ) - Исправлена проблема, из-за которой
getRefreshKeyне вызывался в последующих поколениях PagingSource при быстром возникновении недействительности. ( I45460 , б / 170027530 )
Внешний вклад
- Был добавлен новый абстрактный класс InvalidatingPagingSourceFactory с API
.invalidate(), который пересылает недействительную информацию всем излучаемым им PagingSources. Спасибо @claraf3 ! ( Ie71fc , б/160716447 )
Известные проблемы
- Верхние и нижние колонтитулы преобразования .insertSeparators() могут отображаться не сразу при использовании RemoteMediator b/172254056.
- Использование RemoteMediator может привести к зависанию удаленного
LoadState, если аннулирование иPagingSource.load(LoadParams.Refresh(...))завершится до того, какRemoteMediator.load()вернет b/173717820
Версия 3.0.0-альфа09
11 ноября 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha09 . Версия 3.0.0-alpha09 содержит эти коммиты.
Изменения API
- Полностью устаревшие методы dataRefreshFlow / Listener с предложением replaceWith. ( I6e2dd )
Исправления ошибок
- Исправлена ошибка, из-за которой
IllegalArgumentExceptionвыдавалось при использовании разделителей с RemoteMediator и срабатывало недействительное состояние, пока удаленная загрузка, которая возвращала бы endOfPagination, все еще выполняется ( I3a260 ).
Версия 3.0.0-альфа08
28 октября 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha08 . Версия 3.0.0-alpha08 содержит эти коммиты.
Изменения API
- Варианты
DataSource.InvalidatedCallbackдля Kotlin/Java были объединены путем включения SAM-преобразований в Kotlin через функциональный интерфейс (доступен в Kotlin 1.4). Это также исправляет ошибку, из-за которой вариант обратных вызовов недействительности Kotlin не вызывался после преобразования с помощью.mapили.mapByPage. ( I1f244 , б/165313046 )
Исправления ошибок
- Взаимодействие пейджинга с ViewPager было значительно улучшено. В частности, Paging больше не будет отменять вызов
RemoteMediator#loadиз-за аннулирования страницы. Он также больше не будет выполнять запрос на добавление/добавление загрузки, если требуется REFRESH , до тех пор, пока запрос REFRESH не завершится успешно. ( I6390b , б/162252536 ) - Проверка API для MissingGetterMatchingBuilder включена для androidx ( I4bbea , b/138602561 )
- Исправлена ошибка, из-за которой помощники
.withLoadState*ConcatAdapterаварийно завершали работу из-за уведомления RecyclerView из фонового потока ( I18bb5 , b/170988309 ). - Исправлена ошибка, из-за которой загрузка очень маленькой непустой страницы иногда мешала правильной загрузке предварительной выборки. Iffda3 б/169259468
Версия 3.0.0-альфа07
1 октября 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha07 . Версия 3.0.0-alpha07 содержит эти коммиты.
Изменения API
- Операторы на основе Async PagingData Guava теперь принимают Executor в качестве параметра для управления контекстом выполнения. ( ID4372 )
Исправления ошибок
- Исправлено исключение IndexOutOfBounds, возникающее в RemoteMediator из-за состояния гонки. ( I00b7f , б/165821814 )
- Исправлено состояние гонки в преобразовании DataSource -> PagingSource, из-за которого результирующий PagingSource мог игнорировать сигналы недействительности от DataSource.
- Исправлена проблема в логике выборки страниц, из-за которой иногда не удавалось получить новые поколения PagingSource до тех пор, пока не был вызван PagingDataAdapter.refresh().
- Исправлена проблема, из-за которой иногда терялась позиция прокрутки при использовании DataSource, преобразованного в PagingSource (например, созданного Room), в сочетании с RemoteMediator.
Внешний вклад
- Спасибо @simonschiller за добавление операторов асинхронного преобразования на основе RxJava2, RxJava3 и Guava для PagingData!
Версия 3.0.0-альфа06
2 сентября 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha06 . Версия 3.0.0-alpha06 содержит эти коммиты.
Изменения API
-
UnsupportedOperationExceptionс более четким сообщением об отсутствии поддержки стабильных идентификаторов теперь выдается при каждом вызовеPagingDataAdapter.setHasStableIds. ( Ib3890 , б / 158801427 )
Исправления ошибок
- InsertSeparators больше не отфильтровывает пустые страницы, позволяя презентатору соблюдать расстояние предварительной выборки даже в тех случаях, когда вставлено много пустых страниц. ( I9cff6 , б/162538908 )
Версия 3.0.0-альфа05
19 августа 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha05 . Версия 3.0.0-alpha05 содержит эти коммиты.
Исправления ошибок
- Пейджинг теперь корректно выполняет предварительную выборку страниц, даже если представленные данные сильно фильтруются.
- Возврат
LoadResult.Errorпри повторной загрузке больше не приводит к неправильному повторному запуску попытки доступа к элементу.
Внешний вклад
- Спасибо Кларе Ф за помощь в подчистке некоторых тестов! ( 549612 )
Версия 3.0.0-альфа04
5 августа 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha04 . Версия 3.0.0-alpha04 содержит эти коммиты.
Изменения API
- Добавлен API
peek()вAsyncPagingDataDifferиPagingDataAdapter, чтобы разрешить доступ к представленным данным без запуска загрузки страниц. ( I38898 , б / 159104197 ) - В
PagingDataAdapterиAsyncPagingDataDifferдобавлен API-интерфейсsnapshot(), позволяющий извлекать представленные элементы без запуска выборки страницы. ( I566b6 , б/159104197 ) - Добавлен конструктор
PagingData.from(List<T>), позволяющий представлять статические списки, которые можно комбинировать с общим потоком PagingData для отображения статических списков в определенных состояниях, например, до завершения первоначального REFRESH или просто для тестирования преобразований. ( Id134d ) - Устаревшие API-интерфейсы dataRefresh Flow / Listener, поскольку они предназначались для раскрытия представленного состояния элементов при REFRESH, но с улучшениями времени обратного вызова loadState Flow / Listener и свойства itemCount они стали избыточными ( Ia19f3 ).
- Добавлены оболочки совместимости RxJava3 для
PagingSourceиRemoteMediator( I49ef3 , b/161480176 ).
Исправления ошибок
-
PositionalDataSourceпреобразован вPagingSourceс помощью помощникаtoPagingSourceFactory, включаяPagingSource, созданный Room, теперь правильно помечает себя для поддержки прыжков. ( I3e84c , б/162161201 ) - Исправлена ошибка, из-за которой использование синхронного варианта submitData иногда приводило к гонке, вызывающей
ClosedSendChannelException( I4d702 , b/160192222 ).
Внешний вклад
- Спасибо Заку Свирсу за добавление оболочек совместимости RxJava3 от имени Slack! ( I49ef3 , б / 161480176 )
Версия 3.0.0-альфа03
22 июля 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha03 . Версия 3.0.0-alpha03 содержит эти коммиты.
Изменения API
- Конструктор PagingState теперь общедоступен, что должно упростить тестирование реализации getRefreshKey() ( I8bf15 ).
- Спрятаны варианты функции сопоставления Kotlin DataSource из Java, чтобы устранить неоднозначность между исходными вариантами и вариантами Kotlin. ( If7b23 , b/161150011 )
- Избыточные API, предназначенные для удобства пользователей Kotlin, помечены @JvmSynthetic ( I56ae5 ).
- Добавлены перегрузки для конструктора LoadResult.Page, который по умолчанию для itemsBefore и itemsAfter имеет значение COUNT_UNDEFINED ( I47849 ).
- Существующие операторы PagingData теперь принимают методы приостановки, а также введены новые не приостанавливающие операторы MapSync, FlatMapSync и FilterSync для пользователей Java. Существующие методы преобразования были перенесены в функции расширения, поэтому пользователям Kotlin теперь необходимо будет их импортировать. ( I34239 , б / 159983232 )
Исправления ошибок
- Room (и PositionalDataSource) PagingSources теперь будут отображать ведущий разделитель как часть первой страницы, поэтому пользователю не нужно прокручивать его, чтобы отобразить. ( I6f747 , б / 160257628 )
- Доступ к элементам заполнителей теперь правильно запускает загрузку PagingSource до тех пор, пока не будет возвращена страница, соответствующая запрошенному индексу, после преобразования с помощью PagingData.filter() ( I95625 , b/158763195 ).
- Исправлена ошибка, из-за которой иногда прокрутка после того, как PagingSource возвращает ошибку, могла помешать повторной попытке PagingDataAdapter.retry(). ( I1084f , б / 160194384 )
- Устранена проблема, из-за которой доступ к элементу после удаления страницы мог не загружать страницы, хотя доступ к элементу находился в пределах prefetchDistance ( Ie95ae , b/160038730 ).
- Настройка PagingConfig.maxSize больше не включает заполнители после события перетаскивания ( I2be29 , b/159667766 ).
Версия 3.0.0-альфа02
24 июня 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha02 . Версия 3.0.0-alpha02 содержит эти коммиты.
Изменения API
- Добавлены перегрузки для конструктора
PagingConfigс общими значениями по умолчанию ( I39c50 , b/158576040 ). - Добавлены перегрузки для конструкторов
PagingDataAdapterиAsyncPagingDataDifferс общими значениями по умолчанию ( Ie91f5 ). - API-интерфейсы адаптера
dataRefreshFlowиdataRefreshListenerтеперь передают логическое значение, сигнализирующее о том, пуст лиPagingData( I6e37e , b/159054196 ). - Добавлены API-интерфейсы RxJava и Guava для RemoteMediator — RxRemoteMediator и ListenableFutureRemoteMediator .
- Добавлены помощники в PagingState для доступа к общим элементам, такие как
isEmpty()иfirstItemOrNull()( I3b5b6 , b/158892717 ).
Исправления ошибок
- Пейджер теперь проверяет повторное использование PagingSource на заводе, чтобы предотвратить случайное повторное использование недействительных PagingSources, которые выдавали неясную ошибку ( I99809 , b/158486430 ).
- Сбои RemoteMediator REFRESH больше не препятствуют загрузке PagingSource ( I38b1b , b/158892717 ).
- Неприостанавливаемая версия
submitDataбольше не вызывает сбой из-за одновременного сбора несколькихPagingDataпри вызове после приостанавливающей версииsubmitData. ( I26358 , б / 158048877 ) - Исправлено исключение «невозможно дважды получить данные с пейджера», которое могло возникнуть после изменения конфигурации ( I58bcc , b/158784811 ).
Версия 3.0.0-альфа01
10 июня 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha01 . Версия 3.0.0-alpha01 содержит эти коммиты.
Библиотека подкачки обновлена до версии 3.0, чтобы включить несколько важных новых функций.
Новые возможности версии 3.0
- Первоклассная поддержка сопрограмм Kotlin и Flow.
- Поддержка асинхронной загрузки с помощью функций приостановки сопрограмм, примитивов RxJava Single или Guava ListenableFuture .
- Встроенные сигналы состояния загрузки и ошибок для адаптивного дизайна пользовательского интерфейса, включая функции повтора и обновления.
- Улучшения уровня репозитория
- Упрощенный интерфейс источника данных
- Упрощенная сеть + нумерация страниц базы данных
- Поддержка отмены
- Улучшения уровня представления
Известные проблемы
- Java-документы Paging 3 пока недоступны. А пока используйте руководства, указанные выше, или документацию Kotlin. ( б / 158614050 )
Версия 2.1.2
Версия 2.1.2
18 марта 2020 г.
Выпущен androidx.paging:paging:2.1.2 . Версия 2.1.2 содержит эти коммиты против 2.1.0 .
Исправления ошибок
- Исправлено исключение
IndexOutOfBoundsExceptionв редких случаях при конвертации позиции во время недействительности.
Проблема с выпуском
Версия подкачки
2.1.1была выпущена неправильно из неправильно настроенной ветки, что обнажило частично реализованные API и функции, которые появятся в будущем выпуске.Пейджинг
2.1.2содержит исправление центрирования нагрузки, первоначально выпущенное в версии 2.1.1, но на этот раз правильно выбранное поверх версии 2.1.0. Настоятельно рекомендуется выполнить обновление до этой версии, если вы сейчас используете версию 2.1.1.
Версия 2.1.1
Версия 2.1.1
18 декабря 2019 г.
Выпущен androidx.paging:paging-*:2.1.1 . Версия 2.1.1 содержит эти коммиты .
Исправления ошибок
- Непрерывные первоначальные загрузки из PositionalDataSources теперь сосредоточены вокруг последнего доступа, когда заполнители отключены.
Версия 2.1.0
Версия 2.1.0
25 января 2019 г.
Пейджинг 2.1.0 выпущен без изменений по сравнению с 2.1.0-rc01 .
Версия 2.1.0-rc01
6 декабря 2018 г.
Пейджинг 2.1.0-rc01 выпущен без изменений по сравнению с 2.1.0-beta01 .
Версия 2.1.0-бета01
1 ноября 2018 г.
Пейджинг 2.1.0-beta01 выпущен без изменений по сравнению с 2.1.0-alpha01 .
Версия 2.1.0-альфа01
12 октября 2018 г.
Пейджинг 2.1.0-alpha01 имеет два основных дополнения — удаление страниц и библиотеки расширений KTX для каждого артефакта, а также несколько других изменений API и исправлений.
Изменения API
- Добавлен
PagedList.Config.Builder.setMaxSize()для ограничения количества загружаемых элементов в памяти. - Добавлен
androidx.paging.Config()в качестве альтернативы Kotlin дляPagedList.Config.Builder - Добавлен
androidx.paging.PagedList()в качестве альтернативы Kotlin дляPagedList.Builder - Добавлен
DataSourceFactory.toLiveData()в качестве альтернативы Kotlin дляLivePagedListBuilder - Добавлены
DataSourceFactory.toObservable()иtoFlowable()в качестве альтернатив Kotlin дляRxPagedListBuilder - Добавлен
AsyncPagedListDiffer.addPagedListListener()для прослушивания при замене PagedList. б/111698609 - Добавлен вариант
PagedListAdapter.onCurrentListChanged(), который передает старый и новый список, предыдущий вариант устарел. - Добавлены варианты
PagedListAdapter/AsyncPagedListDiffer.submitList(), которые принимают дополнительный обратный вызов, который срабатывает, если/когда отображается список страниц после сравнения. Это позволяет синхронизировать обмен PagedList с другими обновлениями пользовательского интерфейса. б/73781068 - Добавлен
PagedList.getLoadedCount()чтобы вы знали, сколько элементов находится в памяти. Обратите внимание, что возвращаемое значение всегда равно.size()если заполнители отключены.
Исправления ошибок
- Исправлено состояние гонки при различении повторного использования списков b/111591017.
-
PagedList.loadAround()теперь генерирует исключениеIndexOutOfBoundsException, когда индекс недействителен. Раньше это могло привести к сбою из-за неясного другого исключения. - Исправлен случай, когда чрезвычайно маленький размер начальной загрузки вместе с неизмененными данными приводил к невозможности дальнейшей загрузки b/113122599.
Версия 2.0.0
Версия 2.0.0
1 октября 2018 г.
Paging 2.0.0 выпущен с одним исправлением.
Исправления ошибок
- Исправлен сбой, который мог произойти при очень быстрой прокрутке с использованием
PositionalDataSourceи заполнителей b/114635383 .
Версия 2.0.0-бета01
2 июля 2018 г.
Исправления ошибок
- Исправлено исчезновение содержимого в некоторых случаях добавления в начало (заполнители отключены, PositionalDataSource) b/80149146
- (Уже выпущено в
1.0.1) Исправлены сбои, из-за которыхPagedListAdapterиAsyncPagedListDifferне могли сигнализировать о событиях перемещения. б/110711937
Зависимости до AndroidX
Для последующих версий Paging до AndroidX включите следующие зависимости:
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 выпущен с единственным исправлением ошибки во runtime . Мы настоятельно рекомендуем использовать 1.0.1 для стабильности. Также выпущен Paging RxJava2 1.0.1 , который идентичен 1.0.0-rc1 .
Исправления ошибок
- Исправлены сбои, из-за которых
PagedListAdapterиAsyncPagedListDifferне могли сигнализировать о событиях перемещения. б/110711937
RxJava2 версия 1.0.0
RxJava2 Версия 1.0.0-rc1
16 мая 2018 г.
Пейджинг RxJava2 1.0.0-rc1 переходит в версию-кандидат без изменений по сравнению с исходной альфа-версией.
Версия 1.0.0
Версия 1.0.0-rc1
19 апреля 2018 г. Paging Release Candidate
У нас больше нет известных проблем или новых функций, запланированных для выпуска Paging 1.0.0 . Пожалуйста, обновите свои проекты для использования 1.0.0-rc1 и помогите нам протестировать его, чтобы мы могли выпустить надежную версию 1.0.0 .
В этом релизе нет никаких изменений, он такой же, как и 1.0.0-beta1 .
Версия 1.0.0-бета1
5 апреля 2018 г.
Пейджинг некоторое время будет находиться в стадии бета-тестирования, прежде чем перейти к выпуску-кандидату. Мы не планируем дальнейших изменений API для Paging 1.0 , и планка для любых изменений API очень высока.
Поддержка Alpha RxJava2 для пейджинга выпущена как отдельный дополнительный модуль ( android.arch.paging:rxjava2:1.0.0-alpha1 ) и будет временно поддерживать отдельные версии до стабилизации.
Эта новая библиотека предоставляет RxJava2 альтернативу LivePagedListBuilder , способную создавать Observable и Flowable , используя Scheduler вместо Executor :
Котлин
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
Ява
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
Новые функции
-
RxPagedListBuilderдобавляется через новый артефактandroid.arch.paging:rxjava2.
Изменения API
Изменения API для уточнения роли исполнителей в строителях:
Переименован
setBackgroundThreadExecutor()вsetFetchExecutor()(вPagedList.BuilderиLivePagedListBuilder).Переименован
setMainThreadExecutor()вsetNotifyExecutor()(вPagedList.Builder).
Исправлен член
PagedList.mCallbacks, который стал частным.
Исправления ошибок
LivePagedListBuilderзапускает начальную загрузкуPagedListна указанном исполнителе вместо пула потоков ввода-вывода компонентов Arch.Исправлено поведение недействительности во внутренних оболочках
DataSource(используется для реализацииDataSource.map, а также отключенной загрузкиPositionalDataSourceс помощью заполнителя) b/77237534
Версия 1.0.0-альфа7
21 марта 2018 г.
Paging 1.0.0-alpha7 выпускается вместе с Lifecycles 1.1.1 . Поскольку Paging Alpha7 зависит от перемещения класса Function , упомянутого выше, вам необходимо обновить зависимость lifecycle:runtime до android.arch.lifecycle:runtime:1.1.1 .
Планируется, что Paging alpha7 станет последней версией перед тем, как Paging выйдет в бета-версию.
Изменения API
- Объекты
DataSource.LoadParamsтеперь имеют общедоступный конструктор, а объектыDataSource.LoadCallbackтеперь являются абстрактными. Это позволяет обернутьDataSourceили напрямую протестироватьDataSourceс помощью фиктивного обратного вызова. б/72600421 - Сопоставители для DataSource и DataSource.Factory
-
map(Function<IN,OUT>)позволяет преобразовывать, переносить или украшать результаты, загруженныеDataSource. -
mapByPage(<List<IN>,List<OUT>>)обеспечивает то же самое для пакетной обработки (например, если элементы, загруженные из SQL, необходимо дополнительно запросить отдельную базу данных, это можно сделать как пакетную обработку).
-
-
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