Пейджинг
В этой таблице перечислены все артефакты, входящие в группу androidx.paging .
| Артефакт | Стабильный релиз | Предварительная версия для выпуска | Бета-версия | Альфа-версия |
|---|---|---|---|---|
| пейджин-* | 3.3.6 | 3.4.0-rc01 | - | - |
| paging-compose | 3.3.6 | 3.4.0-rc01 | - | - |
Объявление зависимостей
Чтобы добавить зависимость от 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-rc01" }
Котлин
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-rc01") }
Для получения информации об использовании расширений Kotlin см. документацию ktx .
Для получения дополнительной информации о зависимостях см. раздел «Добавление зависимостей сборки» .
Обратная связь
Ваши отзывы помогают улучшить Jetpack. Сообщите нам, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете проголосовать за существующую проблему, нажав кнопку со звездочкой.
Для получения более подробной информации см. документацию по системе отслеживания ошибок .
Версия 3.4
Версия 3.4.0-rc01
14 января 2026 г.
Выпущена androidx.paging:paging-*:3.4.0-rc01 . Версия 3.4.0-rc01 содержит следующие коммиты .
Новые функции
- Удалена поддержка следующих платформ KMP:
macosX64,iosX64,watchosX64иtvosX64в соответствии с решением Jetbrains об отказе от поддержки macosX64 . ( 7cb9a4 )
Версия 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. Устранение этой негибкости является основным обновлением в этом релизе.
Для поддержки большего количества ленивых макетов нам потребовалось разработать 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 , b/276989796 )
Изменения в API
- Для упрощения перехода на новые API, функции расширения
itemsиitemsIndexedвLazyListScopeтеперь поддерживают параметрcontentType, что соответствует поддержке в новых API. ( Ib1918 , b/255283378 )
Обновления зависимостей
- В Compose обновили зависимость с Compose 1.0.5 до Compose 1.2.1. ( Ib1918 , b/255283378 )
Версия 1.0.0-alpha18
8 февраля 2023 г.
Выпущена androidx.paging:paging-compose:1.0.0-alpha18 без изменений. Версия 1.0.0-alpha18 содержит следующие коммиты.
Версия 1.0.0-alpha17
24 октября 2022 г.
Выпущена версия androidx.paging:paging-compose:1.0.0-alpha17 . Версия 1.0.0-alpha17 содержит следующие коммиты.
Новые функции
- Добавлена поддержка пользовательского
CoroutineContextпри вызовеcollectLazyPagingItems. ( I7a574 , b/243182795 , b/233783862 )
Версия 1.0.0-alpha16
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-alpha15
1 июня 2022 г.
Выпущена версия androidx.paging:paging-compose:1.0.0-alpha15 . Версия 1.0.0-alpha15 содержит следующие коммиты.
Изменения в API
- Добавлены конструкторы для
PagingDataAdapterиAsyncPagingDataDiffer, которые принимаютCoroutineContextвместоCoroutineDispatcher. ( Idc878 )
Исправлены ошибки
- Теперь
LazyPagingItemsустанавливает начальноеloadStateкакLoadState.Loadingrefresh. ( I55043 , b/224855902 )
Версия 1.0.0-alpha14
13 октября 2021 г.
Выпущена версия androidx.paging:paging-compose:1.0.0-alpha14 . Версия 1.0.0-alpha14 содержит следующие коммиты.
Версия 1.0.0-alpha13
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-alpha12
21 июля 2021 г.
Выпущена версия androidx.paging:paging-compose:1.0.0-alpha12 . Версия 1.0.0-alpha12 содержит следующие коммиты.
Изменения в API
-
items(lazyPagingItems)иitemsIndexed(lazyPagingItems)используемые для связи постраничной навигации сLazyColumn/Row, теперь принимают параметр key, позволяющий указать стабильный ключ, представляющий элемент. Подробнее о ключах можно прочитать здесь. ( I7986d ) - Функция
lazyPagingItems.getAsState(index)устарела. Используйте вместо неёlazyPagingItems[index]. ( I086cb , b/187339372 )
Версия 1.0.0-alpha11
30 июня 2021 г.
Выпущена версия androidx.paging:paging-compose:1.0.0-alpha11 . Версия 1.0.0-alpha11 содержит следующие коммиты.
Версия 1.0.0-alpha10
2 июня 2021 г.
Выпущена версия androidx.paging:paging-compose:1.0.0-alpha10 . Версия 1.0.0-alpha10 содержит следующие коммиты.
Версия 1.0.0-alpha09
18 мая 2021 г.
Выпущена версия androidx.paging:paging-compose:1.0.0-alpha09 . Версия 1.0.0-alpha09 содержит следующие коммиты.
Исправлены ошибки
- Теперь свойства itemCount и itemGetter класса LazyPagingItems являются наблюдаемыми, что позволяет использовать его также с LazyVerticalGrid ( Ie2446 , b/171872064 , b/168285687 ).
Совместимость с Compose
-
androidx.paging:paging-compose:1.0.0-alpha09совместим только с версией Compose1.0.0-beta07и выше.
Версия 1.0.0-alpha08
24 февраля 2021 г.
Выпущена версия androidx.paging:paging-compose:1.0.0-alpha08 . Версия 1.0.0-alpha08 содержит следующие коммиты.
Обновлено для интеграции с Compose 1.0.0-beta01.
Версия 1.0.0-alpha07
10 февраля 2021 г.
Выпущена версия androidx.paging:paging-compose:1.0.0-alpha07 . Версия 1.0.0-alpha07 содержит следующие коммиты.
Обновлено для интеграции с Compose alpha12.
Версия 1.0.0-alpha06
28 января 2021 г.
Выпущена версия androidx.paging:paging-compose:1.0.0-alpha06 . Версия 1.0.0-alpha06 содержит следующие коммиты.
Исправлены ошибки
Обновлено с учетом зависимости от Compose 1.0.0-alpha11.
Версия 1.0.0-alpha05
13 января 2021 г.
Выпущена версия androidx.paging:paging-compose:1.0.0-alpha05 . Версия 1.0.0-alpha05 содержит следующие коммиты.
Обновлено с учетом зависимости от Compose 1.0.0-alpha10.
Версия 1.0.0-alpha04
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-alpha03
2 декабря 2020 г.
Выпущена версия androidx.paging:paging-compose:1.0.0-alpha03 . Версия 1.0.0-alpha03 содержит следующие коммиты.
- Обновлено в соответствии с версией Compose 1.0.0-alpha08.
Версия 1.0.0-alpha02
11 ноября 2020 г.
Выпущена версия androidx.paging:paging-compose:1.0.0-alpha02 . Версия 1.0.0-alpha02 содержит следующие коммиты.
Изменения в API
- Добавлены методы
.peek(),.snapshot(),.retry()и.refresh()к объектамLazyPagingItem, которые предоставляют ту же функциональность, что иAsyncPagingDataDiffer/PagingDataAdapter( Iddfe8 , b/172041660 ).
Версия 1.0.0-alpha01
28 октября 2020 г.
Выпущена версия androidx.paging:paging-compose:1.0.0-alpha01 . Версия 1.0.0-alpha01 содержит следующие коммиты.
Новые функции
Артефакт paging-compose обеспечивает интеграцию между библиотекой 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 содержит следующие коммиты.
Исправлены ошибки
- Исправлена ошибка, из-за которой функция Paging иногда отправляла в RecyclerView события, не выполняющие никаких действий, что могло привести к преждевременному срабатыванию некоторых обработчиков событий. ( Ic507f , b/182510751 )
Версия 3.0.0-beta03
24 марта 2021 г.
Выпущена версия androidx.paging:paging-*:3.0.0-beta03 . Версия 3.0.0-beta03 содержит следующие коммиты.
Исправлены ошибки
- Мы переработали обработку заполнителей при перезагрузке списка, чтобы предотвратить неожиданные скачки в RecyclerView. Подробности см. в файле NullPaddedDiffing.md . ( If1490 , b/170027529 , b/177338149 )
- Различные построители PagedList (старый путь совместимости) больше не вызывают некорректно синхронный вызов
DataSource.Factory.create()в основном потоке при вызове.build(). ( b/182798948 )
Версия 3.0.0-beta02
10 марта 2021 г.
Выпущена версия androidx.paging:paging-*:3.0.0-beta02 . Версия 3.0.0-beta02 содержит следующие коммиты.
Изменения в API
- Расширения Rx3 теперь корректно передают требование
@ExperimentalCoroutinesApiOpt-In. Ранее оно помечалось в методе@get, который игнорировался компилятором Kotlin из-за: https://youtrack.jetbrains.com/issue/KT-45227 ( I5733c )
Исправлены ошибки
- Ввести ограничения на публичное использование экспериментальных API ( I6aa29 , b/174531520 )
- Исправлена ошибка, из-за которой
PagingStateвсегда былnullпри вызове удаленного обновления. - Исправлена ошибка, из-за которой пустые страницы, возвращаемые PagingSource, могли препятствовать повторной загрузке данных для выполнения
prefetchDistance, что приводило к «зависанию» Paging.
Версия 3.0.0-beta01
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при использовании APIDataSourceверсии 2 через пути совместимости. - Теперь вызов
isInvalidво время инициализацииDataSourceпри использовании путей совместимости корректно запускается в fetchDispatcher, а не в основном потоке. Это исправляет исключениеIllegalStateException, возникающее из-за доступа к базе данных в основном потоке при использовании реализацииPagingSourceиз Room.
Версия 3.0.0-alpha13
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 не используется, удаленное состояние загрузки игнорируется. Это в первую очередь полезно, если вы хотите отображать разделители разделов только тогда, когда раздел полностью загружен, включая получение данных из удаленного источника, например, сети. -
SOURCE_COMPLETE— ожидание завершения PagingSource только в том случае, если используется RemoteMediator. Это позволяет отображать заголовки и нижние колонтитулы синхронно с первоначальной загрузкой, что избавляет пользователей от необходимости прокручивать страницу для просмотра разделителей в конце строк. ( Ibe993 , b/174700218 )
-
Исправлены ошибки
- Исправлена редкая утечка памяти, которая возникает, когда PagingSource становится недействительным до того, как PageFetcher сможет начать загрузку данных из него. ( I9606b , b/174625633 )
Версия 3.0.0-alpha12
13 января 2021 г.
Выпущена версия androidx.paging:paging-*:3.0.0-alpha12 . Версия 3.0.0-alpha12 содержит следующие коммиты.
Изменения в API
- Класс InvalidatingPagingSourceFactory больше не является абстрактным, поскольку у него никогда не было абстрактных методов. ( I4a8c4 )
- Добавлена перегрузка метода `.cachedIn()`, которая принимает `ViewModel` вместо `Lifecycle` или `CoroutineScope` для пользователей Java. ( I97d81 , b/175332619 )
- Разрешите Java-вызывающим сторонам использовать операции преобразования PagingData асинхронно, принимая Executor в качестве аргументов оператора преобразования. Все операторы преобразования с префиксом -Sync теперь лишены этого префикса, и пользователям Kotlin Coroutine потребуется уточнять это, вызывая функцию расширения, которая принимает вместо этого блок приостановки. Все операторы преобразования PagingData перемещены в расширения в статическом классе PagingDataTransforms. Пользователям Java потребуется вызывать их через статические вспомогательные функции, например,
PagingDataTransforms.map(pagingData, transform)Для пользователей Kotlin синтаксис тот же, но вам потребуется импортировать функцию. ( If6885 , b/172895919 )
Исправлены ошибки
- Исправлена ошибка, из-за которой
RemoteMediator.load()не вызывался во времяadapter.refresh(), если пагинация уже завершилась.
Версия 3.0.0-alpha11
16 декабря 2020 г.
Выпущена версия androidx.paging:paging-*:3.0.0-alpha11 . Версия 3.0.0-alpha11 содержит следующие коммиты.
Новые функции
- Добавлена поддержка сохранения состояния для следующих основных сценариев использования (полная поддержка, особенно в случае многоуровневого источника, все еще находится в стадии разработки):
- Поток данных кэшируется, и приложение не завершает работу (например, поток данных кэшируется в модели представления, и активность воссоздается в процессе).
- Источник постраничной навигации учитывается, заполнители включены, и расположение элементов не является ступенчатым.
Изменения в API
-
PagingSource.getRefreshKey()теперь имеет стабильный API ( I22f6f , b/173530980 ). -
PagingSource.invalidateбольше не является открытой функцией. Если вам необходимо получать уведомления о случаях аннулирования, рассмотрите возможность вызова метода registerInvalidatedCallback вместо переопределения метода invalidate. ( I628d9 , b/173029013 , b/137971356 ) - Теперь Pager имеет один экспериментальный конструктор наряду с обычными конструкторами, вместо того чтобы передавать экспериментальные API в неэкспериментальный публичный API через аннотацию opt-in. ( I9dc61 , b/174531520 )
- Обновлены вспомогательные свойства
CombinedLoadStates.refresh,CombinedLoadStates.prepend,CombinedLoadStates.append, чтобы переход изLoadingвNotLoadingтолько после того, как состояния загрузки посредника и источника находилисьNotLoading, что гарантирует применение удаленного обновления. ( I65619 ) Метод LoadParams.pageSize был удалён (он уже был признан устаревшим). Рекомендуется использовать
LoadParams.loadSizeв вашем PagingSource.LoadParams.loadSizeвсегда равенPagingConfig.pageSizeза исключением вызова начальной загрузки, где он равенPagingConfig.initialLoadSize.Если вы тестируете свой Paging2 DataSource без использования Pager или PagedList,
pageSizeможет не совпадать сPagingConfig.pageSize, если вы также устанавливаетеinitialLoadSize. Если это важно для ваших тестов, попробуйте использовать Pager/PagedList, который автоматически установит правильный PageSize для методов загрузки вашего DataSource. ( I98ac7 , b/149157296 )
Исправлены ошибки
- Исправлена ошибка, приводившая к сбою из-за IllegalStateException при использовании разделителей с установленным параметром PagingConfig.maxSize. ( I0ed33 , b/174787528 )
- Исправлена ошибка, из-за которой состояние загрузки для PREPEND / APPEND не обновлялось до
NotLoading(endOfPaginationReached = true)сразу после первоначальной загрузки, если был установлен RemoteMediator ( I8cf5a ). - Исправлена ошибка, из-за которой API-функции на стороне презентера, такие как `.snapshot()`, `.peek()` и т. д., возвращали предыдущий (устаревший) список в обновлениях ListUpdateCallback.
- Исправлена ошибка, из-за которой операторы Separators не добавляли верхние и нижние колонтитулы при использовании с RemoteMediator.
- Исправлена ошибка, из-за которой обновление состояния загрузки (Loading) для RemoteMediator приводило к зависанию в состоянии загрузки (Loading).
- Исправлена ошибка, из-за которой API совместимости Paging2.0,
.asPagingSourceFactory(), мог приводить к инициализации базовогоDataSourceв некорректном CoroutineDispatcher. Это устраняет сбой и возможные случаи ANR, особенно при использовании текущей реализации PagingSource в Room, которая использует этот путь совместимости.
Версия 3.0.0-alpha10
2 декабря 2020 г.
Выпущена версия androidx.paging:paging-*:3.0.0-alpha10 . Версия 3.0.0-alpha10 содержит следующие коммиты.
Изменения в API
Устаревшие API-интерфейсы
dataRefreshFlowиdataRefreshListenerбыли удалены, поскольку они дублируют функции loadStateFlow / Listener. Для тех, кто переходит на новую версию, эквивалентом для loadStateFlow является:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }( Ib5570 , b/173530908 )
Исправлены ошибки
- Событие endOfPaginationReached для RemoteMediator
REFRESHтеперь корректно передается обновлениям LoadState и предотвращает срабатывание удаленныхAPPENDиPREPEND. ( I94a3f , b/155290248 ) - Отображение пустого списка, будь то из-за пустой начальной страницы или интенсивной фильтрации, больше не будет препятствовать запуску загрузки
PREPENDилиAPPENDпри постраничной навигации. ( I3e702 , b/168169730 ) - Исправлена ошибка, из-за которой
getRefreshKeyне вызывался для последующих поколений PagingSource при быстром возникновении аннулирования ключей. ( I45460 , b/170027530 )
Внешний вклад
- Добавлен новый абстрактный класс InvalidatingPagingSourceFactory с API-функцией
.invalidate(), которая перенаправляет вызов invalidate всем генерируемым им объектам PagingSource. Спасибо @claraf3 ! ( Ie71fc , b/160716447 )
Известные проблемы
- При использовании RemoteMediator b/172254056 верхние и нижние колонтитулы, полученные с помощью преобразования .insertSeparators(), могут отображаться не сразу.
- Использование RemoteMediator может привести к зависанию удаленного
LoadState, если аннулирование иPagingSource.load(LoadParams.Refresh(...))завершатся до того, какRemoteMediator.load()вернет результат b/173717820
Версия 3.0.0-alpha09
11 ноября 2020 г.
Выпущена версия androidx.paging:paging-*:3.0.0-alpha09 . Версия 3.0.0-alpha09 содержит следующие коммиты.
Изменения в API
- Методы dataRefreshFlow / Listener с оператором replaceWith полностью объявлены устаревшими. ( I6e2dd )
Исправлены ошибки
- Исправлена ошибка
IllegalArgumentException, возникающая при использовании разделителей с RemoteMediator и при запуске invalidate во время выполнения удаленной загрузки, которая должна была бы вернуть endOfPagination ( I3a260 ).
Версия 3.0.0-alpha08
28 октября 2020 г.
Выпущена версия androidx.paging:paging-*:3.0.0-alpha08 . Версия 3.0.0-alpha08 содержит следующие коммиты.
Изменения в API
- Варианты
DataSource.InvalidatedCallbackдля Kotlin и Java были объединены путем включения SAM-преобразований в Kotlin через функциональный интерфейс (доступен в Kotlin 1.4). Это также исправляет ошибку, из-за которой вариант коллбэков invalidate для Kotlin не вызывался после преобразования с помощью.mapили.mapByPage. ( I1f244 , b/165313046 )
Исправлены ошибки
- Взаимодействие Paging с ViewPager значительно улучшено. В частности, Paging больше не будет отменять вызов
RemoteMediator#loadиз-за недействительности страницы. Он также больше не будет отправлять запрос на добавление/вставку страницы, если требуется REFRESH , до тех пор, пока запрос REFRESH не завершится успешно. ( I6390b , b/162252536 ) - Проверка API-линтера для MissingGetterMatchingBuilder включена для androidx ( I4bbea , b/138602561 )
- Исправлена ошибка, из-за которой вспомогательные функции
ConcatAdapterс помощью.withLoadState*приводили к сбою из-за уведомления RecyclerView из фонового потока ( I18bb5 , b/170988309 ). - Исправлена ошибка, из-за которой загрузка очень маленькой непустой страницы иногда препятствовала корректному запуску предварительной загрузки. Iffda3 b/169259468
Версия 3.0.0-alpha07
1 октября 2020 г.
Выпущена версия androidx.paging:paging-*:3.0.0-alpha07 . Версия 3.0.0-alpha07 содержит следующие коммиты.
Изменения в API
- Асинхронные операторы PagingData на основе Guava теперь принимают Executor в качестве параметра для управления контекстом выполнения. ( Id4372 )
Исправлены ошибки
- Исправлено исключение IndexOutOfBounds, возникающее в RemoteMediator из-за состояния гонки. ( I00b7f , b/165821814 )
- Исправлена ошибка состояния гонки при преобразовании DataSource в PagingSource, из-за которой результирующий PagingSource мог игнорировать сигналы недействительности от DataSource.
- Исправлена ошибка в логике загрузки страниц, из-за которой иногда не удавалось получить новые поколения PagingSource до тех пор, пока не был вызван метод PagingDataAdapter.refresh().
- Исправлена ошибка, из-за которой при использовании DataSource, преобразованного в PagingSource (например, создаваемого Room), в сочетании с RemoteMediator иногда терялась позиция прокрутки.
Внешний вклад
- Спасибо @simonschiller за добавление операторов асинхронного преобразования на основе RxJava2, RxJava3 и Guava для PagingData!
Версия 3.0.0-alpha06
2 сентября 2020 г.
Выпущена версия androidx.paging:paging-*:3.0.0-alpha06 . Версия 3.0.0-alpha06 содержит следующие коммиты.
Изменения в API
- Теперь при вызове
PagingDataAdapter.setHasStableIdsвыбрасываетсяUnsupportedOperationExceptionс более понятным сообщением об отсутствии поддержки стабильных идентификаторов. ( Ib3890 , b/158801427 )
Исправлены ошибки
- Функция insertSeparators больше не отфильтровывает пустые страницы, что позволяет презентеру соблюдать расстояние предварительной загрузки даже в случаях, когда вставляется много пустых страниц. ( I9cff6 , b/162538908 )
Версия 3.0.0-alpha05
19 августа 2020 г.
Выпущена версия androidx.paging:paging-*:3.0.0-alpha05 . Версия 3.0.0-alpha05 содержит следующие коммиты.
Исправлены ошибки
- Теперь постраничная навигация корректно загружает страницы даже при сильной фильтрации представленных данных.
- Возврат значения
LoadResult.Errorпри повторной попытке загрузки больше не приводит к некорректному повторному запуску попыток доступа к элементам.
Внешний вклад
- Спасибо Кларе Ф. за помощь в очистке некоторых тестов! ( 549612 )
Версия 3.0.0-alpha04
5 августа 2020 г.
Выпущена версия androidx.paging:paging-*:3.0.0-alpha04 . Версия 3.0.0-alpha04 содержит следующие коммиты.
Изменения в API
- Добавлен API
peek()вAsyncPagingDataDifferиPagingDataAdapter, позволяющий получать доступ к отображаемым данным без запуска загрузки страницы. ( I38898 , b/159104197 ) - Добавлен API
snapshot()вPagingDataAdapterиAsyncPagingDataDiffer, позволяющий получать отображаемые элементы без запуска загрузки страницы. ( I566b6 , b/159104197 ) - Добавлен конструктор
PagingData.from(List<T>), позволяющий отображать статические списки, который можно комбинировать с общим потоком PagingData для отображения статических списков в определенных состояниях, например, до завершения первоначального обновления или просто для тестирования преобразований. ( Id134d ) - API-интерфейсы dataRefresh/Listener следует считать устаревшими, поскольку они предназначались для отображения состояния отображаемых элементов при обновлении, но с улучшением синхронизации обратных вызовов loadState/Listener и свойства itemCount они стали избыточными ( Ia19f3 ).
- Добавлены обертки совместимости с RxJava3 для
PagingSourceиRemoteMediator( I49ef3 , b/161480176 )
Исправлены ошибки
-
PositionalDataSource, преобразованный вPagingSourceс помощью вспомогательной функцииtoPagingSourceFactory, теперь корректно помечаетPagingSource, сгенерированный Room, для поддержки перехода между страницами. ( I3e84c , b/162161201 ) - Исправлена ошибка, из-за которой использование синхронного варианта submitData иногда приводило к состоянию гонки, вызывающему исключение
ClosedSendChannelException( I4d702 , b/160192222 ).
Внешний вклад
- Спасибо Заку Свирсу за добавление оберток, совместимых с RxJava3, от имени Slack! ( I49ef3 , b/161480176 )
Версия 3.0.0-alpha03
22 июля 2020 г.
Выпущена версия androidx.paging:paging-*:3.0.0-alpha03 . Версия 3.0.0-alpha03 содержит следующие коммиты.
Изменения в API
- Конструктор класса PagingState теперь является публичным, что должно упростить тестирование реализаций метода getRefreshKey() ( I8bf15 ).
- Скрыть варианты функции map в 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 , b/159983232 )
Исправлены ошибки
- Теперь в элементах Room (и PositionalDataSource) PagingSources будет отображаться разделитель в начале первой страницы, поэтому пользователю не нужно будет прокручивать страницу, чтобы его увидеть. ( I6f747 , b/160257628 )
- Теперь при обращении к элементам-заполнителям корректно запускается загрузка PagingSource до тех пор, пока не будет возвращена страница, соответствующая запрошенному индексу после преобразования с помощью PagingData.filter() ( I95625 , b/158763195 ).
- Исправлена ошибка, из-за которой прокрутка после того, как PagingSource возвращает ошибку, иногда могла препятствовать повторной попытке вызова PagingDataAdapter.retry(). ( I1084f , b/160194384 )
- Исправлена ошибка, из-за которой при перетаскивании страницы страницы при доступе к элементам могли не загружаться, даже если доступ к элементам находился в пределах prefetchDistance ( Ie95ae , b/160038730 ).
- Установка параметра PagingConfig.maxSize больше не включает плейсхолдеры после события удаления ( I2be29 , b/159667766 ).
Версия 3.0.0-alpha02
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 )
Исправлены ошибки
- Теперь Pager проверяет повторное использование PagingSource в фабрике, чтобы предотвратить случайное повторное использование недействительных PagingSource, что приводило к неясной ошибке ( I99809 , b/158486430 ).
- Сбои при обновлении RemoteMediator больше не препятствуют загрузке PagingSource ( I38b1b , b/158892717 ).
- Неприостанавливаемая версия
submitDataбольше не вызывает сбой из-за одновременной сборки мусора на несколькихPagingDataпри вызове после приостанавливаемой версииsubmitData. ( I26358 , b/158048877 ) - Исправлена ошибка "невозможно дважды получить данные с пейджера", которая могла возникнуть после изменения конфигурации ( I58bcc , b/158784811 ).
Версия 3.0.0-alpha01
10 июня 2020 г.
Выпущена версия androidx.paging:paging-*:3.0.0-alpha01 . Версия 3.0.0-alpha01 содержит следующие коммиты.
Библиотека пейджинга обновлена до версии 3.0, что позволило внедрить ряд важных новых функций.
Новые возможности версии 3.0
- Первоклассная поддержка сопрограмм Kotlin и Flow.
- Поддержка асинхронной загрузки с использованием сопрограмм, функций приостановки, примитивов RxJava Single или Guava ListenableFuture .
- Встроенные сигналы состояния загрузки и ошибок для адаптивного дизайна пользовательского интерфейса, включая функции повторной попытки и обновления.
- Улучшения в слое репозитория.
- Упрощенный интерфейс источника данных
- Упрощенная сетевая и постраничная навигация + база данных
- Поддержка при отмене
- Улучшения в уровне представления.
Известные проблемы
- Документация Javadoc для Paging 3 пока недоступна. Временно используйте руководства, ссылки на которые приведены выше, или документацию Kotlin. ( b/158614050 )
Версия 2.1.2
Версия 2.1.2
18 марта 2020 г.
Выпущена версия androidx.paging:paging:2.1.2 . Версия 2.1.2 содержит следующие изменения по сравнению с версией 2.1.0 .
Исправлены ошибки
- Исправлена ошибка
IndexOutOfBoundsExceptionвозникающая в редких случаях при преобразовании позиции во время аннулирования.
Проблема с выпуском
Версия Paging
2.1.1была выпущена некорректно из неправильно настроенной ветки, что привело к частичному раскрытию API и функциональности, которые появятся в будущих релизах.В Paging
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 г.
Выпущена версия Paging 2.1.0 без изменений по сравнению с 2.1.0-rc01 .
Версия 2.1.0-rc01
6 декабря 2018 г.
Выпущена версия Paging 2.1.0-rc01 без изменений по сравнению с 2.1.0-beta01 .
Версия 2.1.0-beta01
1 ноября 2018 г.
Выпущена версия Paging 2.1.0-beta01 без изменений по сравнению с 2.1.0-alpha01 .
Версия 2.1.0-alpha01
12 октября 2018 г.
В версии Paging 2.1.0-alpha01 внесены два важных нововведения — перетаскивание страниц и добавлены библиотеки расширений KTX для каждого артефакта, а также внесены ряд других изменений в API и исправлены ошибки.
Изменения в API
- Добавлена
PagedList.Config.Builder.setMaxSize()для ограничения количества загружаемых элементов в память. - Добавлена
androidx.paging.Config()в качестве альтернативыPagedList.Config.Builderна Kotlin. - Добавлена
androidx.paging.PagedList()в качестве альтернативыPagedList.Builderна Kotlin. - Добавлен
DataSourceFactory.toLiveData()в качестве альтернативыLivePagedListBuilderна Kotlin. - Добавлены
DataSourceFactory.toObservable()иtoFlowable()в качестве альтернатив Kotlin дляRxPagedListBuilder - Добавлена
AsyncPagedListDiffer.addPagedListListener()для отслеживания событий при перестановке элементов в PagedList. b/111698609 - Добавлен вариант метода
PagedListAdapter.onCurrentListChanged(), передающий старый и новый списки; предыдущий вариант устарел. - Добавлены варианты
PagedListAdapter/AsyncPagedListDiffer.submitList(), которые принимают дополнительную функцию обратного вызова, срабатывающую, если/когда список страниц отображается после сравнения изменений. Это позволяет синхронизировать замену списка страниц с другими обновлениями пользовательского интерфейса. b/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-beta01
2 июля 2018 г.
Исправлены ошибки
- Исправлена ошибка, из-за которой контент исчезал в некоторых случаях добавления элементов в начало списка (заполнители отключены, PositionalDataSource) b/80149146
- (Уже выпущено в
1.0.1) Исправлены ошибки, из-за которыхPagedListAdapterиAsyncPagedListDifferне могли сигнализировать о событиях перемещения. b/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не могли сигнализировать о событиях перемещения. b/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 1.0.0 больше нет известных проблем или новых функций. Пожалуйста, обновите свои проекты до версии 1.0.0-rc1 и помогите нам протестировать её, чтобы мы могли выпустить абсолютно стабильную версию 1.0.0 .
В этом релизе нет изменений, он идентичен версии 1.0.0-beta1 .
Версия 1.0.0-beta1
5 апреля 2018 г.
Функция пейджинга будет находиться в бета-версии в течение короткого времени, после чего перейдет к выпуску в качестве кандидата. Мы не планируем дальнейших изменений API для Paging 1.0 , и планка для любых изменений API очень высока.
Поддержка постраничной навигации в Alpha RxJava2 выпущена как отдельный необязательный модуль ( android.arch.paging:rxjava2:1.0.0-alpha1 ) и будет временно выпускаться отдельно по версии до стабилизации.
Эта новая библиотека предоставляет альтернативу LivePagedListBuilder для RxJava2, способную создавать Observable и Flowable , принимая Scheduler вместо Executor :
Котлин
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
Java
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.Исправлено поведение invalidate во внутренних обертках
DataSource(используемых для реализацииDataSource.map, а также для загрузкиPositionalDataSourceс отключенным плейсхолдером) b/77237534
Версия 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
January 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