Страницы
В этой таблице перечислены все объекты в группе androidx.paging.
| Объект | Основная версия | Релиз-кандидат | Бета-версия | Альфа-версия |
|---|---|---|---|---|
| paging-* | 3.5.3 | - | - | - |
| paging-compose | 3.5.3 | - | - | - |
Объявление зависимостей
Чтобы добавить зависимость от Paging, необходимо добавить в проект репозиторий Google Maven. Подробную информацию можно найти в статье Репозиторий Google Maven.
Добавьте зависимости для нужных артефактов в файл build.gradle приложения или модуля:
Яркий
dependencies { def paging_version = "3.5.3" implementation "androidx.paging:paging-runtime:$paging_version" // alternatively - without Android dependencies for tests testImplementation "androidx.paging:paging-common:$paging_version" // optional - RxJava2 support implementation "androidx.paging:paging-rxjava2:$paging_version" // optional - RxJava3 support implementation "androidx.paging:paging-rxjava3:$paging_version" // optional - Guava ListenableFuture support implementation "androidx.paging:paging-guava:$paging_version" // optional - Jetpack Compose integration implementation "androidx.paging:paging-compose:3.5.3" }
Kotlin
dependencies { val paging_version = "3.5.3" implementation("androidx.paging:paging-runtime:$paging_version") // alternatively - without Android dependencies for tests testImplementation("androidx.paging:paging-common:$paging_version") // optional - RxJava2 support implementation("androidx.paging:paging-rxjava2:$paging_version") // optional - RxJava3 support implementation("androidx.paging:paging-rxjava3:$paging_version") // optional - Guava ListenableFuture support implementation("androidx.paging:paging-guava:$paging_version") // optional - Jetpack Compose integration implementation("androidx.paging:paging-compose:3.5.3") }
Информацию об использовании расширений Kotlin можно найти в документации по KTX.
Подробнее о добавлении зависимостей сборки…
Отзыв
Ваши отзывы помогают нам улучшать Jetpack. Если вы обнаружите новые проблемы или у вас появятся идеи по улучшению этой библиотеки, сообщите нам. Прежде чем создавать новую проблему, ознакомьтесь с существующими. Чтобы проголосовать за существующую проблему, нажмите на значок звездочки.
Дополнительную информацию можно найти в документации по системе отслеживания ошибок.
Версия 3.5
Версия 3.5.3
12 октября 2026 г.
Выход сингла "androidx.paging:paging-*:3.5.3". Версия 3.5.3 содержит эти коммиты.
Исправление ошибок
ItemSnapshotListFlowбольше не будет выдавать ошибкуIllegalArgumentException, когдаRemoteMediatorдостигает конца разбивки на страницы в любом направлении, а верхний или нижний колонтитул преобразуется в конечный разделитель. (I821c7, b/566336825)- Если количество загруженных страниц превышает
PagingConfig.maxSize, оно не уменьшится до значения меньше двух, чтобы область просмотра была заполнена данными. (I037a0, b/565835910)
Внешний вклад
Благодарим Игоря за исправление ошибки b/565835910.
Версия 3.5.2
7 октября 2026 г.
Выход androidx.paging:paging-*:3.5.2. Версия 3.5.2 содержит эти коммиты.
Исправление ошибок
- Вызовы
Pager.append()до завершения первоначального обновления больше не будут вызывать ошибкуNoSuchElementException. Вызов append не будет работать. (Ide387, b/556780796)
Версия 3.5.1
12 августа 2026 г.
Выход сингла "androidx.paging:paging-*:3.5.1". Версия 3.5.1 содержит эти коммиты.
Исправленные ошибки
- Исправлена ошибка, из-за которой
PagingSource.getRefreshKeyпредоставлял неверныйanchorPosition, который был слишком большим при обновлении страницы с разделителями во время прокрутки до плейсхолдеров. (I475f0, b/516565503)
Версия 3.5.0
6 мая 2026 г.
Выход сингла "androidx.paging:paging-*:3.5.0". Версия 3.5.0 содержит эти коммиты.
Важные изменения с версии 3.4.0
Добавлен оператор
Flow<PagingData>.asItemSnapshotListFlowдля преобразованияFlow<PagingData>вFlow<ItemSnapshotList>. Это означает, что загруженные данные теперь доступны за пределами уровня интерфейса, что позволяет объединятьFlow<ItemSnapshotList>с другими источниками данных, кэшировать и изменять данные на страницах локально, а также предоставлять данные на страницах как часть состояния интерфейса и т. д.Добавлены функции расширения
Pager.appendиPager.prepend, позволяющие вручную загружать больше данных без прокрутки.Добавлены функции расширения
Pager.refreshиPaging.retryдля восстановления после ошибок загрузки при использованииasItemSnapshotListFlowAPI.
Версия 3.5.0-rc01
22 апреля 2026 г.
Выход сингла "androidx.paging:paging-*:3.5.0-rc01". Версия 3.5.0-rc01 содержит эти коммиты.
Пользователь не внес никаких изменений
- В версии
3.5.0-beta01нет значительных изменений.
Версия 3.5.0-beta01
8 апреля 2026 г.
Выход androidx.paging:paging-*:3.5.0-beta01. Версия 3.5.0-beta01 содержит эти коммиты.
Изменения в API
- API
Flow<PagingData>.asStateпереименован вFlow<PagingData>.asItemSnapshotListFlow(I0dc11, b/496548025).
Версия 3.5.0-alpha01
11 марта 2026 г.
Выход сингла "androidx.paging:paging-*:3.5.0-alpha01". Версия 3.5.0-alpha01 содержит эти коммиты.
Новые функции
Артефакт
paging-commonтеперь содержит новый оператор потокаasStateдляFlow<PagingData>, который преобразует его вFlow<ItemSnapshotList>. Это позволяет:- объединять поток
ItemSnapshotListс другими источниками данных; - share flow with multiple collectors without
cachedIn - кешировать данные страниц локально;
- изменять данные в памяти, разбитые на страницы
- предоставлять данные с разбивкой по страницам как часть состояния пользовательского интерфейса
// In your ViewModel val pager = Pager(pagingConfig, pagingSourceFactory) val pagerFlow = pager.flow.asState() // alterantively convert the flow to a SharedFlow val pagerFlow = pager.flow.asState().stateIn() // In presenter layer val snapshotFlow = viewModel.pagerFlow.collectAsStateWithLifecycle(initialList) val snapshot = itemsFlow.value LazyColumn { items(items = snapshot.items) { ... } }- объединять поток
В артефакт
paging-commonтакже добавлены APIPager.appendиPager.prepend, позволяющие вручную запускать загрузку с любого края загруженных элементов.- При использовании с
paging-runtimeилиpaging-composeпредоставляет альтернативный способ загрузки дополнительных данных (помимо прокрутки). - При использовании с новым API
asStateэто единственный способ загрузить больше данных.
LazyColumn { item { /** * Load more items when users scroll near the top of loaded items. */ LaunchedEffect(viewModel) { viewModel.prepend() } } items(snapshot.items) { item -> Text("Item: $item") } item { /** * Load more items when users scroll near the bottom of loaded items. */ LaunchedEffect(viewModel) { viewModel.append() } } }- При использовании с
Добавлены методы
Pager.refreshиPager.retryдля восстановления после ошибок загрузки при использованииasStateAPI. Дополнительные примеры использования новых API приведены в этом документе. (I1e1e9, If3c87, Idbd48, Id1e1d, I816fe)
Версия 3.4
Версия 3.4.2
11 марта 2026 г.
Выход сингла "androidx.paging:paging-*:3.4.2". Версия 3.4.2 содержит эти коммиты.
Пользователь не внес никаких изменений
- В этом выпуске нет изменений в API или поведении по сравнению с версией 3.4.1.
Версия 3.4.1
11 февраля 2026 г.
Выход сингла "androidx.paging:paging-*:3.4.1". Версия 3.4.1 содержит эти коммиты.
Обновление зависимостей
- Зависимость guava в paging-guava обновлена с версии 31.1 до 32.0.1.
Версия 3.4.0
28 января 2026 г.
Выход сингла "androidx.paging:paging-*:3.4.0". Версия 3.4.0 содержит эти коммиты.
Важные изменения в версии 3.3.0
- Добавлено больше целей KMP для
paging-common,paging-testingиpaging-compose. Теперь все они поддерживают JVM(Android и ПК), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) и Web (JavaScript, WasmJS). - В
paging-common,paging-testingиpaging-composeудалена поддержкаmacosX64,iosX64,watchosX64иtvosX64, поскольку Jetbrains прекратила поддержку целевых платформ macosX64. - Добавлен новый
PagingStateAPIclosestItemAroundPositionдля получения загруженного элемента, который находится ближе всего к целевой позиции и соответствует входному предикату. Это можно использовать для создания ключей обновления на основе элементов, когда идеальный закрепляемый элемент находится рядом с целевой позицией, но не точно в ней.
Версия 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может привести к рассинхронизации состояния Paging сRecyclerView. Эта проблема решается путем сброса параметра "Разбивка на страницы" до состояния, в котором он находился до обновления, если обновление было прервано (например, из-за последовательной загрузкиRefresh). (I771b0, b/409809768)
Версия 3.4.0-alpha04
10 сентября 2025 г.
Выход сингла "androidx.paging:paging-*:3.4.0-alpha04". Версия 3.4.0-alpha04 содержит эти коммиты.
Изменения в API
- Добавлен новый
PagingStateAPIclosestItemAroundPositionдля получения загруженного элемента, который находится ближе всего к целевой позиции и соответствует входному предикату. Это можно использовать для создания ключей обновления на основе элементов, когда идеальный закрепляемый элемент находится рядом с целевой позицией, но не точно в ней. (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 и ПК), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) и Web (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 и Desktop), 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-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 содержит эти коммиты.
Новые функции
- В Paging добавлены следующие цели 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при прокрутке во время обновленияRecyclerViewвозникала ошибкаIndexOutOfBoundsException(Id1f16, b/381024738). - Исправлена ошибка, из-за которой при обновлении во время прокрутки не загружались дополнительные страницы. (I60ca5, b/352586078)
- Исправлен сбой при прокрутке во время обновления элементов Paging. (I8c65a, b/347649763)
Версия 3.3
Версия 3.3.6
12 февраля 2025 г.
Выход androidx.paging:paging-*:3.3.6. Версия 3.3.6 содержит эти коммиты.
Исправленные ошибки
- Сигналы обновления и повторной попытки, отправленные во время первоначального обновления, теперь будут сохраняться и автоматически отправляться повторно, как только презентатор Paging будет готов.
Внешний вклад
Версия 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в состоянии ошибки илиNotLoadingсоответственно. Также добавлен новый метод расширения KotlinawaitNotLoading()дляFlow<CombinedLoadStates>, который ожидает, пока загрузка не перейдет в состояниеNotLoadingили с ошибкой. - Теперь
PagingData.empty()по умолчанию отправляет состоянияNotLoading, если в его конструктор не переданы пользовательскиеLoadStates. Это отличается от существующего поведения, когдаLoadStatesне отправляется при отправке вPagingDataAdapterили отправляет состояния загрузки при сборе в качествеLazyPagingItems. Если данные собраны какLazyPagingItems, то при первоначальном создании документа будет сразу показан пустой список.
Совместимость с Kotlin Multiplatform
Теперь библиотека Paging поставляется с артефактами, совместимыми с Kotlin Multiplatform. Это стало возможным благодаря работе, проделанной в рамках проекта multiplatform-paging от CashApp.
- Все API Paging 3 перенесены в
paging-commonи теперь совместимы с JVM и iOS, а также с Android.common - Код
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
- Для общего кода в библиотеке Paging теперь используется аннотация AndroidX Annotation
@MainThread. (I78f0d, b/327682438)
Версия 3.3.0-alpha04
6 марта 2024 г.
Выход сингла "androidx.paging:paging-*:3.3.0-alpha04". Версия 3.3.0-alpha04 содержит эти коммиты.
Исправленные ошибки
- Исправлены незначительные ошибки в документации, связанные с добавлением совместимости с Kotlin Multiplatform. (aosp/2950785)
Версия 3.3.0-alpha03
7 февраля 2024 г.
Выход сингла "androidx.paging:paging-*:3.3.0-alpha03". Версия 3.3.0-alpha03 содержит эти коммиты.
Новые функции
PagingDataPresenterтеперь является общедоступным классом. Теперь многоплатформенные презентации можно создавать на основеPagingDataPresenter, а не внутренних API разбивки на страницы илиAsyncPagingDataDifferpaging-runtime. (Id1f74, b/315214786)- Добавлены новые вспомогательные методы
LoadStatesиCombinedLoadStates, позволяющие проверить, находится лиLoadStatesв состоянии Error илиNotLoading. Также добавлен новый API, который ожидаетLoadStateFlow, пока загрузка не перейдет в состояниеNotLoadingили состояние ошибки. (Id6c67)
Изменение поведения
- Теперь
PagingData.empty()по умолчанию отправляет состоянияNotLoading, если в его конструктор не переданы пользовательскиеLoadStates. Это отличается от существующего поведения, когдаLoadStatesне отправляется при передаче вPagingDataAdapterили отправляет состояния загрузки при сборе в качестве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 поставляется с артефактами, совместимыми с Kotlin Multiplatform. Это стало возможным благодаря работе, проделанной в рамках проекта multiplatform-paging от 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-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 зависал при передаче Flow, созданного с помощью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
- Paging Compose достиг стабильности API и был объединен с остальными артефактами Paging, версия которых теперь совпадает. Изменения с версии 3.1.0:
- Поддержка предварительного просмотра списка поддельных данных путем создания
PagingData.from(fakeData)и упаковки этогоPagingDataвMutableStateFlow(например,MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Передайте этот поток в composable-функции@Previewв качестве получателя для предварительного просмотраcollectAsLazyPagingItems(). - Поддержка всех ленивых макетов, таких как
LazyVerticalGridиHorizontalPager, а также пользовательских ленивых компонентов из библиотек Wear и TV. Это было достигнуто за счет новых методов расширенияLazyPagingItemsболее низкого уровняitemKeyиitemContentType, которые помогают реализовать параметрыkeyиcontentTypeдля стандартных APIitems, которые уже существуют дляLazyColumn,LazyVerticalGrid, а также их эквивалентов в API, таких какHorizontalPager. items(lazyPagingItems)иitemsIndexed(lazyPagingItems), которые поддерживают толькоLazyListScope, больше не поддерживаются.
- Поддержка предварительного просмотра списка поддельных данных путем создания
- Новый артефакт
paging-testing, который предоставляет API, предназначенные для модульного тестирования каждого уровня приложения и его интеграции с Paging по отдельности. Например:TestPager, который позволяет проверять поведение собственной реализацииPagingSourceнезависимо от Pager и реального интерфейса.- API
asPagingSourceFactoryдля преобразованияFlow<List<Value>>или статическогоList<Value>вPagingSourceFactory, который можно передать в Pager при тестировании. asSnapshot– расширение Kotlin для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 содержит эти коммиты.
Внешний вклад
Версия 3.2.0-beta01
7 июня 2023 г.
Выход сингла "androidx.paging:paging-*:3.2.0-beta01". Версия 3.2.0-beta01 содержит следующие коммиты:
Paging Compose
- Paging Compose официально достиг стабильности API. Поэтому версия была обновлена с
1.0.0-alpha20, чтобы соответствовать версии всех остальных артефактов Paging.
Изменения в API
- Из Paging Compose удалены устаревшие API
items(LazyPagingItems)иitemsIndexed(LazyPagingItems). Пример замены 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) - Для
asSnapshotAPI больше не требуется передаватьCoroutineScope. Теперь по умолчанию используется контекст, унаследованный от родительской области. (Id0a78, b/282240990) - Изменен порядок параметров конструктора
TestPager, чтобы он соответствовал порядку параметров конструктораPager(I6185a). - Использование лямбда-типа
() -> PagingSource<Key, Value>в paging-testing перенесено в типPagingSourceFactory<Key, Value>. (I4a950, b/280655188)
Изменения в поведении
- Для выполнения тестов Paging
asSnapshotбольше не требуется основной диспетчер. Теперь этот параметр не влияет на поведение теста. (Ie56ea)
Версия 3.2.0-alpha05
3 мая 2023 г.
Выход сингла "androidx.paging:paging-*:3.2.0-alpha05". Версия 3.2.0-alpha05 содержит эти коммиты.
Изменения в API
- В Paging Testing API библиотеки
asSnapshotдля параметраloadOperationsтеперь по умолчанию используется пустая лямбда-функция. Это позволяет вызыватьasSnapshotбез передачи операций загрузки для получения данных из начальной загрузки обновления. Ied354, b/277233770
Улучшения документации
- В документацию о
asPagingSourceFactory()добавлено пояснение о том, что это метод расширения дляFlow, который возвращает многократно используемую фабрику для создания экземпляровPagingSource. (I5ff4f, I705b5) - В документацию по конструктору
LoadResult.Pageдобавлены пояснения о том, что для поддержки перехода необходимо переопределить параметрыitemsBeforeиitemsAfter. (Ied354)
Внешние вклады
- Благодарим Veyndan за помощь в переносе 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>>, который будет передан в Pager. Каждый объектList<Value>>, созданный из Flow, представляет собой поколение данных Paged. Это упрощает тестирование разбиения на страницы, например преобразованийPagingData, за счет имитации источника данных, из которого Pager собирает данные. (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
- Вызовы UI к
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 и должны выполняться в 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 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-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в случаях, когда он возвращает нулевое значение, но задано ненулевое значение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
Flow<PagingData>.observableиFlow<PagingData>.flowableAPI больше не являются экспериментальными- Изменения в
LoadState:endOfPaginationReachedтеперь всегда имеет значениеfalseдляLoadType.REFRESHкак дляPagingSource, так и дляRemoteMediatorLoadStatesиз 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 downstream, когда не было наблюдателей или когда наблюдатель переключался на новые 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. Раньше для RemoteMediatorREFRESHможно было задать значениеtrueдля endOfPaginationReached, но для PagingSource это было невозможно. Теперь всегда возвращается значениеfalse, поскольку для REFRESH не имеет смысла быть конечным состоянием. Это изменение отражено в документации по API в разделе LoadStates. При определении того, завершена ли пагинация, всегда следует учитывать только направление APPEND или PREPEND. (I047b6) LoadStates из Paging теперь ожидает допустимых значений как от PagingSource, так и от RemoteMediator, прежде чем передавать их вниз по потоку между поколениями. Это предотвращает отправку NotLoading в CombinedLoadStates.source.refresh новыми поколениями PagingData, если уже было 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, что заставляет Paging отклонять любые ожидающие или будущие запросы на загрузку для этого PagingSource и аннулировать его.
Этот тип возвращаемого значения также поддерживается Paging2 API, который использует LivePagedList или RxPagedList. При использовании PagingSource с API PagedList из Paging 2 объект PagedList немедленно отсоединяется, что приводит к прекращению попыток загрузить данные в этот объект и к аннулированию PagingSource.
LoadResult – это запечатанный класс, поэтому изменение несовместимо с исходным кодом. Это значит, что в случаях, когда напрямую используются результаты PagingSource.load, во время компиляции нужно будет обрабатывать LoadResult.Invalid. Например, пользователям Kotlin, которые используют exhaustive-when для проверки типа возвращаемого значения, придется добавить проверку на недопустимый тип. (Id6bd3, b/191806126, b/192013267)
Исправление ошибок
- Обратные вызовы недействительности, добавленные через PagingSource.registerInvalidatedCallback или DataSource.addInvalidatedCallback, теперь автоматически активируются, если они были зарегистрированы в PagingSource / DataSource, который уже был недействителен. Это устраняет состояние гонки, из-за которого Paging пропускал сигналы недействительности и зависал, когда получал источник, который уже был недействителен во время начальной загрузки. Кроме того, теперь после срабатывания обратные вызовы invalidate корректно удаляются, поскольку они гарантированно вызываются не более одного раза. (I27e69)
- Если вы отправите начальное значение плейсхолдера (InitialPagedList) из нового потока PagedList, например LivePagedListBuilder или RxPagedListBuilder, ранее загруженные данные больше не будут удаляться.
Версия 3.1.0-alpha02
1 июля 2021 г.
Выход androidx.paging:paging-*:3.1.0-alpha02. Версия 3.1.0-alpha02 содержит эти коммиты.
Новые функции
Добавлены слушатель onPagesPresented и API для представления потока, которые активируются сразу после обновления представленных страниц в интерфейсе.
Поскольку эти обновления синхронизируются с интерфейсом, вы можете вызывать методы адаптера, например .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
Обновления зависимостей
- В библиотеке Paging Compose зависимость от Compose была обновлена с версии 1.0.5 до 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 содержит следующие коммиты:
Новые функции
- Теперь в библиотеке Paging есть журналы, которые можно получить с помощью класса
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.Loading. (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), используемые для подключения Paging кLazyColumn/Row, теперь принимают параметр ключа option, который позволяет указать стабильный ключ, представляющий элемент. Подробнее о ключах… (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 и геттер элементов LazyPagingItems можно отслеживать, что позволяет использовать их с LazyVerticalGrid (Ie2446, b/171872064, b/168285687).
Совместимость с Compose
androidx.paging:paging-compose:1.0.0-alpha09совместим только с Compose версии1.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
- В
LazyPagingItemдобавлены методы.peek(),.snapshot(),.retry()и.refresh(), которые предоставляют те же функции, что и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 обеспечивает интеграцию между библиотекой разбивки на страницы и 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.x.x объявлены устаревшими и заменены новыми API из библиотеки Paging 3. Это сделано, чтобы обеспечить следующие улучшения:
- Поддержка сопрограмм и потоков Kotlin
- Поддержка по вопросам отмены
- Встроенные сигналы о состоянии загрузки и ошибках
- Функция повтора и обновления
- Все три подкласса DataSource объединены в единый класс PagingSource.
- Специальные преобразования страниц, в том числе встроенное преобразование для добавления разделителей.
- Загрузка верхних и нижних колонтитулов штатов
Версия 3.0.0-rc01
21 апреля 2021 г.
Выход androidx.paging:paging-*:3.0.0-rc01. Версия 3.0.0-rc01 содержит эти коммиты.
Исправление ошибок
- Исправлена ошибка, из-за которой библиотека Paging иногда отправляла в RecyclerView события no-op differ, что могло приводить к преждевременному срабатыванию некоторых слушателей. (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 теперь корректно распространяют требование о согласии
@ExperimentalCoroutinesApi. Ранее они были отмечены в методе@get, который игнорируется компилятором Kotlin из-за ошибки https://youtrack.jetbrains.com/issue/KT-45227 (I5733c).
Исправленные ошибки
- Принудительно применяются ограничения на публичное использование экспериментальных API (I6aa29, b/174531520).
- Исправлена ошибка, из-за которой
PagingStateвсегда принимал значениеnullпри вызове удаленного обновления. - Исправлена ошибка, из-за которой пустые страницы, возвращаемые PagingSource, могли препятствовать повторному получению данных Paging для выполнения запроса
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 не используется, удаленное состояние loadState игнорируется. Это полезно, если вы хотите показывать разделители разделов только после полной загрузки раздела, включая получение данных из удаленного источника, например сети.SOURCE_COMPLETE– ожидать, пока PagingSource не отметит endOfPaginationReached, даже если используется 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 удален суффикс -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 через аннотацию согласия. (I9dc61, b/174531520)
- Обновлены свойства
CombinedLoadStates.refresh,CombinedLoadStates.prependиCombinedLoadStates.append, чтобы переход отLoadingкNotLoadingпроисходил только после того, как состояния загрузки посредника и источника станутNotLoading. Это гарантирует, что удаленное обновление было применено. (I65619) Удален параметр LoadParams.pageSize (он уже был устаревшим). Рекомендуется использовать
LoadParams.loadSizeв PagingSource.LoadParams.loadSizeвсегда равноPagingConfig.pageSize, за исключением первого вызова, когда оно равноPagingConfig.initialLoadSize.Если вы тестируете DataSource из Paging2 без использования 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.
- Исправлена ошибка, из-за которой обновления LoadState до NotLoading для RemoteMediator застревали в состоянии Loading.
- Исправлена ошибка, из-за которой API совместимости Paging 2.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 }
Исправленные ошибки
- endOfPaginationReached для RemoteMediator
REFRESHтеперь правильно распространяется на обновления LoadState и предотвращает запуск удаленныхAPPENDиPREPEND. (I94a3f, b/155290248) - Если список пуст из-за пустой начальной страницы или строгой фильтрации, это больше не будет мешать Paging запускать загрузку
PREPENDилиAPPEND. (I3e702, b/168169730) - Исправлена ошибка, из-за которой
getRefreshKeyне вызывался для последующих поколений PagingSource при быстром аннулировании. (I45460, b/170027530)
Внешний вклад
- Добавлен новый абстрактный класс InvalidatingPagingSourceFactory с API
.invalidate(), который перенаправляет invalidate во все создаваемые им PagingSource. Спасибо @claraf3! (Ie71fc, b/160716447)
Известные проблемы
- Верхние и нижние колонтитулы из преобразования .insertSeparators() могут не сразу появляться при использовании RemoteMediator b/172254056.
- Использование 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из-за недействительности страницы. Кроме того, если требуется обновить контент, он больше не будет отправлять запрос на загрузку с добавлением или вставкой в начало, пока запрос на обновление не будет успешно выполнен. (I6390b, b/162252536) - Для androidx включена проверка API на наличие MissingGetterMatchingBuilder (I4bbea, b/138602561).
- Исправлена ошибка, из-за которой вспомогательные функции
.withLoadState*ConcatAdapterзавершали работу из-за уведомления 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
- Операторы Async 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
UnsupportedOperationExceptionс более понятным сообщением об отсутствии поддержки стабильных идентификаторов теперь выдается при каждом вызовеPagingDataAdapter.setHasStableIds. (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при повторной загрузке больше не приводит к тому, что доступ к объектам ошибочно запускает повторную попытку.
Внешний вклад
- Спасибо Кларе Ф. (Clara F) за помощь в очистке некоторых тестов. (549612)
Версия 3.0.0-alpha04
5 августа 2020 г.
Выход сингла "androidx.paging:paging-*:3.0.0-alpha04". Версия 3.0.0-alpha04 содержит эти коммиты.
Изменения в API
- В
AsyncPagingDataDifferиPagingDataAdapterдобавленpeek()API, который позволяет получать доступ к представленным данным без загрузки страниц. (I38898, b/159104197) - В
PagingDataAdapterиAsyncPagingDataDifferдобавлен APIsnapshot(), позволяющий получать представленные элементы без запуска извлечения страницы. (I566b6, b/159104197) - Добавлен конструктор
PagingData.from(List<T>), позволяющий представлять статические списки, которые можно комбинировать с общим потоком PagingData для отображения статических списков в определенных состояниях, например до завершения начального REFRESH или просто для тестирования преобразований. (Id134d) - Прекращена поддержка API dataRefresh Flow и Listener, поскольку они предназначались для показа состояния представленных элементов при обновлении, но с улучшением времени обратного вызова loadState Flow и 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).
- Скрыты варианты функции карты Kotlin DataSource от Java, чтобы устранить неоднозначность между исходным и вариантами Kotlin. (If7b23, b/161150011)
- Избыточные API, предназначенные для удобства пользователей Kotlin, помечены как @JvmSynthetic (I56ae5).
- Добавлены перегрузки для конструктора LoadResult.Page, в котором для itemsBefore и itemsAfter по умолчанию задано значение COUNT_UNDEFINED (I47849).
- Существующие операторы PagingData теперь принимают методы приостановки, а для пользователей Java добавлены новые операторы mapSync, flatMapSync и filterSync, которые не приостанавливают работу. Существующие методы преобразования были перенесены в функции расширения, поэтому пользователям Kotlin теперь нужно будет импортировать их. (I34239, b/159983232)
Исправленные ошибки
- Источники PagingSource для Room (и PositionalDataSource) теперь будут показывать начальный разделитель в составе первой страницы, чтобы пользователю не нужно было прокручивать экран, чтобы увидеть его. (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) - Исправлена ошибка "cannot collect twice from pager", которая могла возникать после изменения конфигурации (I58bcc, b/158784811).
Версия 3.0.0-alpha01
10 июня 2020 г.
Выход сингла "androidx.paging:paging-*:3.0.0-alpha01". Версия 3.0.0-alpha01 содержит эти коммиты.
Библиотека Paging Library обновлена до версии 3.0, в которой появилось несколько важных новых функций.
Новые функции в версии 3.0
- Первоклассная поддержка сопрограмм и потоков Kotlin.
- Поддержка асинхронной загрузки с помощью функций приостановки сопрограмм, примитивов 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 содержит следующие коммиты.
Исправление ошибок
- Теперь при отключенных плейсхолдерах непрерывные первоначальные загрузки из источников данных о местоположении центрируются вокруг последнего доступа.
Версия 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. - Добавлен язык Kotlin (
DataSourceFactory.toLiveData()) в качестве альтернативы языку Java (LivePagedListBuilder). - Добавлены
DataSourceFactory.toObservable()иtoFlowable()в качестве альтернатив Kotlin дляRxPagedListBuilder. - Добавлен метод
AsyncPagedListDiffer.addPagedListListener()для прослушивания при замене PagedList. b/111698609 - Добавлен вариант
PagedListAdapter.onCurrentListChanged(), который передает старый и новый списки. Предыдущий вариант больше не поддерживается. - Добавлены варианты
PagedListAdapter/AsyncPagedListDiffer.submitList(), которые принимают дополнительный обратный вызов, срабатывающий, если/когда отображается список страниц после сравнения. Это позволяет синхронизировать замену PagedList с другими обновлениями интерфейса. 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 г.
Paging RxJava2 1.0.0-rc1 переходит в статус релиз-кандидата без изменений по сравнению с первоначальной альфа-версией.
Версия 1.0.0
Версия 1.0.0-rc1
19 апреля 2018 г. Релиз-кандидат Paging
У нас нет других известных проблем или новых функций, запланированных для выпуска Paging 1.0.0. Обновите свои проекты, чтобы использовать 1.0.0-rc1, и помогите нам протестировать эту версию, чтобы мы могли выпустить надежную 1.0.0.
В этом выпуске нет изменений. Он такой же, как 1.0.0-beta1.
Версия 1.0.0-beta1
5 апреля 2018 г.
Бета-версия Paging будет доступна в течение короткого времени, после чего мы выпустим версию-кандидат.
Мы не планируем дальнейших изменений API для Paging 1.0, и планка для любых изменений API очень высока.
Альфа-версия поддержки RxJava2 для библиотеки Paging выпущена в виде отдельного необязательного модуля (android.arch.paging:rxjava2:1.0.0-alpha1) и будет временно иметь отдельную нумерацию версий, пока не станет стабильной.
Эта новая библиотека предоставляет альтернативу RxJava2 для LivePagedListBuilder, способную создавать Observable и Flowable, принимая Scheduler вместо Executor:
Kotlin
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
Java
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
Новые функции
RxPagedListBuilderдобавляется через новый артефактandroid.arch.paging:rxjava2.
Изменения в API
Изменения в API, которые позволяют уточнить роль исполнителей в конструкторах:
Название
setBackgroundThreadExecutor()изменено наsetFetchExecutor()(вPagedList.BuilderиLivePagedListBuilder)Название "
setMainThreadExecutor()" изменено на "setNotifyExecutor()" (в файле "PagedList.Builder").
Элемент
PagedList.mCallbacksтеперь является частным.
Исправление ошибок
LivePagedListBuilderзапускает начальную загрузкуPagedListна указанном исполнителе, а не в пуле потоков ввода-вывода компонентов архитектуры.Исправлено поведение аннулирования во внутренних оболочках
DataSource(используются для реализацииDataSource.map, а также загрузкиPositionalDataSourceс отключенными плейсхолдерами). b/77237534
Версия 1.0.0-alpha7
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 станет последним выпуском перед бета-версией.
Изменения в API
- У объектов
DataSource.LoadParamsтеперь есть общедоступный конструктор, а объектыDataSource.LoadCallbackстали абстрактными. Это позволяет упаковатьDataSourceили напрямую протестироватьDataSourceс помощью фиктивного обратного вызова. b/72600421 - Преобразователи для DataSource и DataSource.Factory
map(Function<IN,OUT>)позволяет преобразовывать, упаковывать или оформлять результаты, загруженные с помощьюDataSource.mapByPage(<List<IN>,List<OUT>>)позволяет делать то же самое для пакетной обработки (например, если объекты, загруженные из SQL, должны дополнительно запрашивать отдельную базу данных, это можно сделать в виде пакета).
- Добавлен метод
PagedList#getDataSource(). b/72611341 - Из API удалены все устаревшие классы, в том числе остатки пакета
recyclerview.extensionsиLivePagedListProvider. DataSource.Factoryтеперь является не интерфейсом, а абстрактным классом, что позволяет использовать функции карт.
Исправленные ошибки
- Изменили конструкторы, чтобы они были окончательными. b/70848565
- Реализация Room
DataSourceтеперь позволяет обрабатывать запросы к нескольким таблицам. Исправление содержится в Room 1.1.0-beta1 (см. выше). - Исправлена ошибка, из-за которой
BoundaryCallback.onItemAtEndLoadedне вызывался дляPositionalDataSource, если были включены плейсхолдеры и общий размер был кратен размеру страницы.
Версия 1.0.0-alpha5
22 января 2018 г.
Исправленные ошибки
- Исправлена загрузка страниц при отключенных плейсхолдерах b/70573345
- Дополнительное ведение журналов для отслеживания ошибки IllegalArgumentException b/70360195 (и предварительное исправление на стороне Room)
- Исправлены ошибки в образце кода Javadoc b/70411933, b/71467637.