Пейджинг
В этой таблице перечислены все артефакты в группе androidx.paging
.
Артефакт | Стабильный выпуск | Кандидат на выпуск | Бета-версия | Альфа-релиз |
---|---|---|---|---|
пейджинг-* | 3.3.2 | - | - | - |
подкачка-создание | 3.3.2 | - | - | - |
Объявление зависимостей
Чтобы добавить зависимость от Paging, вам необходимо добавить в свой проект репозиторий Google Maven. Для получения дополнительной информации прочтите репозиторий Google Maven .
Добавьте зависимости для нужных вам артефактов в файл build.gradle
для вашего приложения или модуля:
классный
dependencies { def paging_version = "3.3.2" 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.3.2" }
Котлин
dependencies { val paging_version = "3.3.2" 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.3.2") }
Информацию об использовании расширений Kotlin смотрите в документации ktx .
Дополнительные сведения о зависимостях см. в разделе Добавление зависимостей сборки .
Обратная связь
Ваши отзывы помогают сделать Jetpack лучше. Дайте нам знать, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете добавить свой голос к существующей проблеме, нажав кнопку со звездочкой.
Дополнительную информацию см. в документации по системе отслеживания проблем .
Версия 3.3
Версия 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 , б/352586078 ) - Исправлен сбой, возникающий при удалении элементов из резервного источника данных при прокрутке
RecyclerView
с использованиемPagingDataAdapter
илиAsyncPagingDataDiffer
. ( I8c65a , б/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
или отправляет состояния загрузки при сборе какLazyPagingItems
. При сборе какLazyPagingItems
он теперь также будет отображать пустой список сразу после первоначальной композиции.
Мультиплатформенная совместимость Kotlin
Пейджинг теперь предоставляет артефакты, совместимые с Kotlin Multiplatform, во многом благодаря работе над проектом мультиплатформенного пейджинга CashApp.
-
paging-common
перевел все API-интерфейсы Paging 3 наcommon
и теперь совместим с jvm и iOS в дополнение к Android. -
paging-testing
перевел свой код наcommon
и теперь совместим не только с Android, но и с jvm и iOS. -
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-бета01
3 апреля 2024 г.
androidx.paging:paging-*:3.3.0-beta01
выпущен без заметных изменений. Версия 3.3.0-beta01 содержит эти коммиты .
Версия 3.3.0-альфа05
20 марта 2024 г.
Выпущен androidx.paging:paging-*:3.3.0-alpha05
. Версия 3.3.0-alpha05 содержит эти коммиты .
Изменения API
- Пейджинг теперь использует аннотацию AndroidX
@MainThread
для общего кода. ( I78f0d , б/327682438 )
Версия 3.3.0-альфа04
6 марта 2024 г.
Выпущен androidx.paging:paging-*:3.3.0-alpha04
. Версия 3.3.0-alpha04 содержит эти коммиты .
Исправления ошибок
- Исправлены незначительные ошибки документации, связанные с добавлением мультиплатформенной совместимости Kotlin. ( аосп/2950785 )
Версия 3.3.0-альфа03
7 февраля 2024 г.
Выпущен androidx.paging:paging-*:3.3.0-alpha03
. Версия 3.3.0-alpha03 содержит эти коммиты.
Новые возможности
-
PagingDataPresenter
теперь является общедоступным классом. Многоплатформенные презентаторы теперь можно создавать поверхPagingDataPresenter
вместо необходимости использования внутренних API-интерфейсов пейджинга илиAsyncPagingDataDiffer
paging-runtime
. ( Id1f74 , б/315214786 ) - Добавлены новые вспомогательные методы
LoadStates
иCombinedLoadStates
, позволяющие проверить, находится лиLoadStates
в состоянии Error илиNotLoading
. Также добавлен новый API, который ожидаетLoadStateFlow
до тех пор, пока загрузка не перейдет в состояниеNotLoading
или Error. ( ID6c67 )
Изменение поведения
-
PagingData.empty()
теперь по умолчанию отправляет состоянияNotLoading
, если его конструктору не передаются пользовательскиеLoadStates
. Это отличается от существующего поведения, когда оно не отправляетLoadStates
при отправке вPagingDataAdapter
или отправляет состояния загрузки при сборе какLazyPagingItems
. При сборе какLazyPagingItems
он теперь также будет отображать пустой список сразу после первоначальной композиции. ( I4d11d , б/301833847 )
Версия 3.3.0-альфа02
20 сентября 2023 г.
Выпущен androidx.paging:paging-*:3.3.0-alpha02
. Версия 3.3.0-alpha02 содержит эти коммиты.
Мультиплатформенная совместимость Kotlin
Пейджинг теперь предоставляет артефакты, совместимые с Kotlin Multiplatform, во многом благодаря работе над проектом мультиплатформенного пейджинга CashApp. Это позволит нам избежать расхождений между двумя репозиториями и сохранить их совместимость.
-
paging-common
перевел все API-интерфейсы Paging 3 наcommon
и теперь совместим с jvm и iOS в дополнение к Android. -
paging-testing
перевел свой код наcommon
и теперь совместим не только с Android, но и с jvm и iOS. -
paging-compose
перенес свой код вcommon
и поставляет артефакт Android, соответствующий многоплатформенной поддержкеandroidx.compose
. -
paging-runtime
,paging-guava
,paging-rxjava2
иpaging-rxjava3
останутся только для Android.
Изменения API
- Публичный интерфейс Logger, предназначенный только для внутреннего использования, устарел ( I16e95 , b/288623117 ).
Внешний вклад
- Спасибо Вейндану из Cash App за помощь в переносе пейджинга на мультиплатформенность Kotlin ( #560 , #561 , #562 , #573 , #576 , #577 , #578 , #579 , #580 , #581 , #583 , #584 , # 586 , #609 )
Версия 3.3.0-альфа01
20 сентября 2023 г.
- Это первый мультиплатформенный выпуск библиотек androidx.paging. В этой версии есть только артефакты
*-jvm
и*-android
. Для вариантов macOS, iOS и Linux используйте3.3.0-alpha02
.
Версия 3.2
Версия 3.2.1
6 сентября 2023 г.
Выпущен androidx.paging:paging-*:3.2.1
. Версия 3.2.1 содержит эти коммиты.
Исправления ошибок
- Исправлена проблема, из-за которой API
asSnapshot()
артефакта тестирования подкачки зависал при передаче потока, созданного с использованием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, где его версия теперь соответствует всем остальным артефактам Paging. Изменения с версии 3.1.0 включают в себя:
- Поддержка предварительного просмотра списка поддельных данных путем создания
PagingData.from(fakeData)
и упаковки этихPagingData
вMutableStateFlow
(напримерMutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Передайте этот поток в составные элементы@Preview
в качестве приемника дляcollectAsLazyPagingItems()
для предварительного просмотра. - Поддержка всех ленивых макетов, таких как
LazyVerticalGrid
иHorizontalPager
, а также пользовательских ленивых компонентов из библиотек Wear и TV. Это было достигнуто за счет новых методов расширенияLazyPagingItems
нижнего уровняitemKey
иitemContentType
, которые помогают реализовать параметрыkey
иcontentType
в API стандартныхitems
, которые уже существуют дляLazyColumn
,LazyVerticalGrid
, а также их эквивалентов в API, таких какHorizontalPager
. -
items(lazyPagingItems)
иitemsIndexed(lazyPagingItems)
которые поддерживают толькоLazyListScope
устарели.
- Поддержка предварительного просмотра списка поддельных данных путем создания
- Новый артефакт
paging-testing
, который предоставляет API-интерфейсы, разработанные для модульного тестирования каждого уровня вашего приложения и его изолированной интеграции с подкачкой. Например, он включает в себя- Класс
TestPager
, который позволяет проверять поведение вашей собственной реализацииPagingSource
независимо от пейджера и реального пользовательского интерфейса. - API
asPagingSourceFactory
для преобразованияFlow<List<Value>>
или статическогоList<Value>
вPagingSourceFactory
, который можно передать пейджеру в тестах. -
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
. Эту фабрику можно использовать для создания экземпляра пейджера.
Версия 3.2.0-rc01
21 июня 2023 г.
Выпущен androidx.paging:paging-*:3.2.0-rc01
. Версия 3.2.0-rc01 содержит эти коммиты.
Внешний вклад
Версия 3.2.0-бета01
7 июня 2023 г.
Выпущен androidx.paging:paging-*:3.2.0-beta01
. Версия 3.2.0-beta01 содержит эти коммиты.
Пейджинговое создание
- Paging Compose официально достиг стабильности API. Таким образом, версия была обновлена с
1.0.0-alpha20
и теперь соответствует версии всех других артефактов пейджинга.
Изменения API
- Удалены устаревшие API
items(LazyPagingItems)
иitemsIndexed(LazyPagingItems)
из Paging Compose. См . примечания к выпуску Paging Compose1.0.0-alpha20
где приведен пример API-интерфейсов замены. ( I9626e )
Версия 3.2.0-альфа06
24 мая 2023 г.
Выпущен androidx.paging:paging-*:3.2.0-alpha06
. Версия 3.2.0-alpha06 содержит эти коммиты.
Новые возможности
- Добавлен новый функциональный интерфейс
PagingSourceFactory
, который обеспечивает более явную поверхность API, чем существующие лямбды() -> PagingSource
. Эту фабрику можно использовать для создания экземпляраPager
. ( I33165 , б / 280655188 ) - Добавлен новый API
paging-testing
List<Value>.asPagingSourceFactory()
чтобы получитьPagingSourceFactory
, который загружается только из неизменяемого списка данных. Существующее расширениеFlow<List<Value>>
по-прежнему следует использовать для тестирования с несколькими поколениями статических данных. ( Id34d1 , б/280655188 )
Изменения API
- Все общедоступные API при тестировании подкачки теперь помечены
@VisibleForTesting
, чтобы гарантировать использование этих API только в тестах. ( I7db6e ) - API
asSnapshot
больше не требует передачиCoroutineScope
. Теперь по умолчанию используется контекст, унаследованный от родительской области. ( Id0a78 , б/282240990 ) - Переупорядочены параметры конструктора
TestPager
, чтобы они интуитивно соответствовали порядку реальных параметров конструктораPager
( I6185a ). - Использование лямбда-типа
() -> PagingSource<Key, Value>
при тестировании подкачки перенесено на типPagingSourceFactory<Key, Value>
. ( I4a950 , б/280655188 )
Изменения поведения
- Главный диспетчер больше не требуется для запуска тестов
asSnapshot
Paging. Его установка больше не вносит никаких изменений в поведение теста. ( Ie56ea )
Версия 3.2.0-альфа05
3 мая 2023 г.
Выпущен androidx.paging:paging-*:3.2.0-alpha05
. Версия 3.2.0-alpha05 содержит эти коммиты.
Изменения API
- API тестирования пейджинга
asSnapshot
теперь по умолчанию устанавливает для параметраloadOperations
пустое лямбда-выражение. Это позволяет вызыватьasSnapshot
без каких-либо операций загрузки для получения данных из начальной загрузки обновления. ( Ied354 , б/277233770 )
Улучшения документации
- Обновлена документация по
asPagingSourceFactory()
, чтобы уточнить, что это метод расширенияFlow
, который возвращает повторно используемую фабрику для создания экземпляровPagingSource
. ( I5ff4f , I705b5 ) - Обновлена документация по конструктору
LoadResult.Page
, чтобы уточнить необходимость переопределенияitemsBefore
иitemsAfter
для поддержки перехода. ( Ied354 )
Внешние взносы
- Спасибо Вейндану за вклад в отход пейджинга от специфики Android/JVM. ( #525 , #523 , #520 , #519 , #507 , #506 , #505 , #499 , #497 , #496 , #493 )
Версия 3.2.0-альфа04
8 февраля 2023 г.
Выпущен androidx.paging:paging-*:3.2.0-alpha04
. Версия 3.2.0-alpha04 содержит эти коммиты.
Пейджинговое тестирование
- Артефакт
paging-testing
теперь содержит методasPagingSourceFactory
для созданияpagingSourceFactory
изFlow<List<Value>>
для передачи в пейджер. КаждыйList<Value>>
исходящий из потока, представляет собой генерацию постраничных данных. Это облегчает тестирование подкачки, например, преобразованийPagingData
, имитируя источник данных, из которого пейджер может собирать данные. ( I6f230 , б/235528239 ) Артефакт
paging-testing
был расширен новыми API, подходящими для проверки правильности данных, содержащихся вFlow<PagingData<T>>
. Это можно использовать, например, для подтверждения выводаFlow<PagingData<T>>
из уровня ViewModel.Это делается с помощью расширения
asSnapshot
Kotlin для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 values
asSnapshot
— это методsuspend
, который, как ожидается, будет запущен в рамкахrunTest
. Дополнительную информацию см. в разделе «Тестирование сопрограмм Kotlin на Android» . ( I55fd2 , I5bd26 , I7ce34 , I51f4d , I2249f , Id6223 , Ic4bab , Ib29b9 , Ic1238 , I96def , b/235528239 )
Изменения API
- Вызовы пользовательского интерфейса для
getItem
иpeek
вAsyncPagingDataDiffer
иPagingDataAdapter
теперь правильно помечаются как вызываемые только в основном потоке. ( I699b6 ) - Из универсальных типов, используемых
TestPager
, удалены подстановочные знаки, что упрощает использование результатов этих методов в коде, написанном на языке программирования Java. ( I56c42 )
Версия 3.2.0-альфа03
24 октября 2022 г.
Выпущен androidx.paging:paging-*:3.2.0-alpha03
. Версия 3.2.0-alpha03 содержит эти коммиты.
Пейджинговое тестирование
Этот выпуск содержит новый артефакт: paging-testing
. Этот артефакт предоставляет API-интерфейсы, разработанные для модульного тестирования каждого уровня вашего приложения и его изолированной интеграции с пейджингом.
Например, этот первый выпуск включает класс TestPager
, который позволяет вам проверять поведение вашей собственной пользовательской реализации PagingSource
независимо от Pager
и реального пользовательского интерфейса, который обычно необходим для имитации сквозной интеграции Paging.
TestPager
следует считать подделкой — тестовым двойником , который отражает реальную реализацию Pager
, одновременно предоставляя упрощенную поверхность API для тестирования PagingSource
. Эти API являются API suspend
, и их следует запускать в рамках runTest
, как описано в руководстве по тестированию сопрограмм Kotlin на Android .
Пример использования этих API можно найти в тестах room-paging
, которые были реорганизованы для использования TestPager
.
Изменения API
- Обеспечивает удобную итерацию над
LoadResult.Page.data
с помощьюLoadResult.Page.iterator()
. Это косвенно позволяет использовать методflatten
стандартной библиотеки Kotlin при наличииList<LoadResult.Page>
например, со свойствомpages
PagingState
, которое передается методуPagingSource.getRefreshKey
. ( Ie0718 )
Версия 3.2.0-альфа02
10 августа 2022 г.
Выпущен androidx.paging:paging-*:3.2.0-alpha02
. Версия 3.2.0-alpha02 содержит эти коммиты.
Новые возможности
- Пейджинг теперь предоставляет журналы через классы
AsyncPagingDataDiffer
илиPagingDataAdapter
для предоставления отладочной информации, собранной изPagingData
. - Журналы можно включить с помощью команды
adb shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE].
( б / 235527159 )
Исправления ошибок
- Исправлена отсутствующая ошибка конструктора
PagingDataDiffer
при использованииpaging-common:3.2.0-alpha01
со средой выполненияpaging-runtime:3.1.1
или более ранней версии. ( b/235256201 ).
Версия 3.2.0-альфа01
1 июня 2022 г.
Выпущен androidx.paging:paging-*:3.2.0-alpha01
. Версия 3.2.0-alpha01 содержит эти коммиты.
Изменения API
- Добавлены конструкторы для
PagingDataAdapter
иAsyncPagingDataDiffer
, которые принимаютCoroutineContext
вместоCoroutineDispatcher
. ( Idc878 ) - По умолчанию
PagingData.from()
иPagingData.empty()
больше не влияют наCombinedLoadStates
на стороне презентатора. Была добавлена новая перегрузка, которая позволяет передаватьsourceLoadStates
иremoteLoadStates
в эти конструкторы, чтобы сохранить существующее поведение установкиLoadStates
как полностью терминального (т. е.NotLoading(endOfPaginationReached = false)
), с возможностью включения при необходимости и удаленных состояний. . ЕслиLoadStates
не переданы, то предыдущиеCombinedLoadStates
будут сохранены на стороне презентатора, когда он получит статическиеPagingData
. ( Ic3ce5 , б/205344028 )
Исправления ошибок
- Результат
PagingSource.getRefreshKey()
теперь правильно присваивается приоритетуinitialKey
в тех случаях, когда он возвращает значение NULL, но был установлен ненулевойinitialKey
. ( Ic9542 , б/230391606 )
Внешний вклад
- Обновлено :compose:ui:ui-test api (updateApi) из-за миграции test-coroutines-lib ( I3366d )
Версия 3.1
Версия 3.1.1
9 марта 2022 г.
Выпущен androidx.paging:paging-*:3.1.1
. Версия 3.1.1 содержит эти коммиты.
Исправления ошибок
- Удалены промежуточные события
LoadState.NotLoading
между поколениями, которые были неправильно вставлены с помощью.cachedIn()
. Это изменение значительно упрощает реагирование на измененияLoadState
за счет удаления избыточных событийLoadState.NotLoading
, которые создавались между повторными попытками неудачной загрузки, при обновлении или во время аннулирования.
Версия 3.1.0
17 ноября 2021 г.
Выпущен androidx.paging:paging-*:3.1.0
. Версия 3.1.0 содержит эти коммиты.
Важные изменения с версии 3.0.0
- API
Flow<PagingData>.observable
иFlow<PagingData>.flowable
больше не являются экспериментальными. - Изменения в поведении
LoadState
:-
endOfPaginationReached
теперь всегда имеет значениеfalse
дляLoadType.REFRESH
как дляPagingSource
, так иRemoteMediator
-
LoadStates
из Paging теперь ожидает действительных значений как отPagingSource
, так иRemoteMediator
перед отправкой в нисходящий поток. Новые поколенияPagingData
теперь всегда будут правильно начинаться с состоянияLoading
для обновления», а не с неправильным сбросом вNotLoading
в некоторых случаях. -
.loadStateFlow
и.addLoadStateListener
в API-интерфейсах презентаторов больше не отправляют избыточно начальные значенияCombinedLoadStates
, в которых состояния посредника всегда имеют значениеnull
-
- Отмена прошлых поколений теперь быстро происходит при аннулировании/новых поколениях. Больше не требуется использовать
.collectLatest
вFlow<PagingData>
, хотя это по-прежнему рекомендуется делать. -
PagingSource.LoadResult.Invalid
был добавлен как новый тип возвращаемого значения изPagingSource.load
, что заставляет Paging отбрасывать все ожидающие или будущие запросы загрузки к этомуPagingSource
и делать его недействительным. Этот тип возврата предназначен для обработки потенциально недопустимых или устаревших данных, которые могут быть возвращены из базы данных или сети. - Добавлены API-интерфейсы презентаторов
.onPagesPresented
и.addOnPagesUpdatedListener
, которые активируются синхронно при представлении страниц в пользовательском интерфейсе. Обновления страницы могут происходить в следующих сценариях:- Первоначальная загрузка PagingData нового поколения завершается независимо от того, содержит ли новое поколение какие-либо изменения в представленных элементах. т. е. новое поколение, завершающее начальную загрузку без обновлений, поскольку список точно такой же, все равно вызовет этот обратный вызов.
- Страница вставляется, даже если вставленная страница не содержит новых элементов.
- Страница удаляется, даже если удаленная страница была пустой.
Версия 3.1.0-rc01
3 ноября 2021 г.
Выпущен androidx.paging:paging-*:3.1.0-rc01
. Версия 3.1.0-rc01 содержит эти коммиты.
Исправления ошибок
- Исправлено состояние гонки + утечка памяти в .cachedIn() в случаях, когда несколько событий загрузки отправлялись нисходящим Paging при отсутствии наблюдателей или между моментами, когда наблюдатель переключался на новый PagingData. ( Ib682e )
Версия 3.1.0-бета01
13 октября 2021 г.
Выпущен androidx.paging:paging-*:3.1.0-beta01
. Версия 3.1.0-beta01 содержит эти коммиты.
Исправления ошибок
- Исправлена проблема, из-за которой при частом быстром доступе к элементам они могли быть отброшены на рассмотрение в prefetchDistance, что приводило к остановке загрузки страниц. Это особенно проблема, когда множество элементов расположены одновременно в таком порядке, при котором приоритет загрузки будет зависеть от направления прокрутки пользователя. Доступ к этим элементам теперь буферизуется и синхронно распределяется по приоритетам, чтобы предотвратить их удаление. ( аосп/1833273 )
Версия 3.1.0-альфа04
29 сентября 2021 г.
Выпущен androidx.paging:paging-*:3.1.0-alpha04
. Версия 3.1.0-alpha04 содержит эти коммиты.
Изменения API
- API-интерфейсы
Flow<PagingData>.observable
иFlow<PagingData>.flowable
больше не являются экспериментальными. ( Ie0bdd )
Исправления ошибок
- Для LoadStates
endOfPaginationReached
теперь всегда имеетfalse
дляLoadType.REFRESH
. Раньше значение endOfPaginationReached могло бытьtrue
для RemoteMediatorREFRESH
, но не для PagingSource. Это поведение теперь консолидировано, чтобы всегда возвращатьfalse
поскольку REFRESH никогда не имеет смысла быть терминальным, и теперь документировано как часть контракта API в LoadStates. Принимая решение о прекращении нумерации страниц, вы всегда должны делать это в отношении направлений APPEND или PREPEND. ( I047b6 ) LoadStates из Paging теперь ожидает действительных значений как от PagingSource, так и от RemoteMediator, прежде чем отправлять их в нисходящий поток между поколениями. Это не позволяет новым поколениям PagingData отправлять NotLoading в CombindLoadStates.source.refresh, если он уже загружался; новые поколения PagingData теперь всегда будут правильно начинаться с состояния «Загрузка для обновления» вместо неправильного предварительного сброса в состояние «Незагрузка» в некоторых случаях.
Отмена прошлых поколений теперь с готовностью происходит при аннулировании/новых поколениях. Больше не требуется использовать .collectLatest в
Flow<PagingData>
, хотя это по-прежнему настоятельно рекомендуется. ( I0b2b5 , б / 177351336 , б / 195028524 ).loadStateFlow
и.addLoadStateListener
в API-интерфейсах презентаторов больше не отправляют избыточно начальные значенияCombinedLoadStates
, для которых состояния посредника всегда имеют значениеnull
, а состояния источника —NotLoading(endOfPaginationReached = false)
. Это означает, что:- состояния посредника всегда будут заполняться, если вы используете RemoteMediator.
- Регистрация нового прослушивателя loadState или нового сборщика в
.loadStateFlow
больше не будет немедленно выдавать текущее значение, если он не получил настоящийCombinedLoadStates
отPagingData
. Это может произойти, если сборщик или прослушиватель запускается до отправкиPagingData
. ( I1a748 )
Версия 3.1.0-альфа03
21 июля 2021 г.
Выпущен androidx.paging:paging-*:3.1.0-alpha03
. Версия 3.1.0-alpha03 содержит эти коммиты.
Изменения API
Третий тип возвращаемого значения LoadResult LoadResult.Invalid добавляется в PagingSource. Когда PagingSource.load возвращает LoadResult.Invalid, пейджинг отбрасывает загруженные данные и делает PagingSource недействительным. Этот тип возврата предназначен для обработки потенциально недопустимых или устаревших данных, которые могут быть возвращены из базы данных или сети.
Например, если базовая база данных записывается, но PagingSource не становится недействительным вовремя, он может возвращать противоречивые результаты, если его реализация зависит от неизменности резервного набора данных, из которого он загружается (например, реализации базы данных в стиле LIMIT OFFSET). В этом сценарии рекомендуется проверить недействительность после загрузки и вернуть LoadResult.Invalid, что приведет к тому, что Paging отбросит все ожидающие или будущие запросы загрузки к этому PagingSource и сделает его недействительным.
Этот тип возврата также поддерживается API Paging2, который использует LivePagedList или RxPagedList. При использовании PagingSource с API-интерфейсами PagedList Paging2 PagedList немедленно отсоединяется, останавливая дальнейшие попытки загрузки данных в этот PagedList и инициируя аннулирование PagingSource.
LoadResult — это запечатанный класс, что означает, что это изменение, несовместимое с исходным кодом, поэтому варианты использования, непосредственно использующие результаты PagingSource.load, должны будут обрабатывать LoadResult.Invalid во время компиляции. Например, пользователям Kotlin, использующим исчерпывающую проверку типа возвращаемого значения, придется добавить проверку на недопустимый тип. ( Id6bd3 , б/191806126 , б/192013267 )
Исправления ошибок
- Обратные вызовы недействительности, добавленные через PagingSource.registerInvalidatedCallback или DataSource.addInvalidatedCallback, теперь автоматически срабатывают, если они были зарегистрированы в PagingSource/DataSource, который уже был недействителен. Это устраняет состояние гонки, из-за которого Paging отбрасывал сигналы недействительности и зависал при предоставлении источника, который уже был недействителен во время начальной загрузки. Кроме того, недействительные обратные вызовы теперь корректно удаляются после запуска, поскольку они гарантированно будут вызваны не более одного раза. ( I27e69 )
- Отправка начального значения заполнителя (InitialPagedList) из вновь созданного потока PagedList, например LivePagedListBuilder или RxPagedListBuilder, больше не приведет к удалению ранее загруженных данных.
Версия 3.1.0-альфа02
1 июля 2021 г.
Выпущен androidx.paging:paging-*:3.1.0-alpha02
. Версия 3.1.0-alpha02 содержит эти коммиты.
Новые возможности
Добавлены API-интерфейсы прослушивателя onPagesPresented и презентатора потока, которые срабатывают сразу после обновления представленных страниц в пользовательском интерфейсе.
Поскольку эти обновления синхронизируются с пользовательским интерфейсом, вы можете вызывать методы адаптера, такие как .snapshot, .getItemCount, для проверки состояния после применения обновления. Обратите внимание, что .snapshot() оставлен для явного вызова, поскольку его выполнение при каждом обновлении может быть дорогостоящим.
Обновления страницы могут происходить в следующих сценариях:
- Первоначальная загрузка PagingData нового поколения завершается независимо от того, содержит ли новое поколение какие-либо изменения в представленных элементах. т. е. новое поколение, завершающее начальную загрузку без обновлений, поскольку список точно такой же, все равно вызовет этот обратный вызов.
- Страница вставляется, даже если вставленная страница не содержит новых элементов.
- Страница удаляется, даже если удаленная страница была пустой ( I272c9 , b/189999634 ).
Исправления ошибок
- Доступ к PagedList.dataSource из исходного значения, созданного LivePagedList или RxPagedList, больше не будет ошибочно вызывать исключение IllegalStateException ( I96707 ).
Версия 3.1.0-альфа01
2 июня 2021 г.
Выпущен androidx.paging:paging-*:3.1.0-alpha01
. Версия 3.1.0-alpha01 содержит эти коммиты.
Изменения API
- Классы, предоставляемые
paging-rxjava3
теперь находятся в пакетеandroidx.paging.rxjava3
, чтобы они не конфликтовали сpaging-rxjava2
( Ifa7f6 ).
Исправления ошибок
- Исправлена проблема, из-за которой пейджинг иногда отправлял неактивные события различия в RecyclerView, что могло привести к преждевременному срабатыванию некоторых прослушивателей. ( Ic507f , б/182510751 )
Внешний вклад
- В артефакт rxjava3 добавлены устаревшие API совместимости PagedList ( Id1ce2 , b/182497591 ).
Создание подкачки, версия 1.0.0
Версия 1.0.0-альфа20
24 мая 2023 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha20
. Версия 1.0.0-alpha20 содержит эти коммиты.
Новые возможности
- Paging Compose теперь поддерживает предварительный просмотр списка поддельных данных путем создания
PagingData.from(fakeData)
и упаковки этихPagingData
вMutableStateFlow
(например,MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
. Используя эти данные в качестве входных данных в@Preview
, вызовыcollectAsLazyPagingItems()
обеспечат возможность предварительного просмотраLazyPagingItems
. ( I8a78d , р/194544557 )
Исправления ошибок
- Кэшированные данные из
pager.flow.cachedIn
, собранные вLazyPagingItems
теперь будут доступны сразу после восстановления состояния без необходимости асинхронного сбора. Это означает, что кэшированные данные будут готовы к представлению сразу после первоначальной композиции после восстановления состояния. ( I97a60 , б/177245496 )
Версия 1.0.0-альфа19
3 мая 2023 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha19
. Версия 1.0.0-alpha19 содержит эти коммиты.
Поддержка всех ленивых макетов
Ранее Paging Compose предоставлял пользовательские items
и расширения itemsIndexed
для LazyListScope
, что означало, что вы не могли использовать Paging Compose с другими отложенными макетами, такими как LazyVerticalGrid
, HorizontalPager
или другими пользовательскими отложенными компонентами, предоставляемыми библиотеками Wear и TV. Устранение этой негибкости является основным обновлением этого выпуска.
Чтобы поддерживать более ленивые макеты, нам нужно было создать API на другом уровне — вместо того, чтобы предоставлять собственный API items
для каждого ленивого макета, Paging Compose теперь предоставляет методы расширения немного более низкого уровня для LazyPagingItems
в itemKey
и itemContentType
. Эти API направлены на то, чтобы помочь вам реализовать параметры key
и contentType
в API стандартных items
, которые уже существуют для LazyColumn
, LazyVerticalGrid
, а также их эквивалентов в API, таких как HorizontalPager
. ( Ifa13b , Ib04f0 , b/259385813 )
Это означает, что поддержка LazyVerticalGrid
будет выглядеть так:
// This part is unchanged
val lazyPagingItems = pager.collectAsLazyPagingItems()
LazyVerticalGrid(columns = GridCells.Fixed(2)) {
// Here we use the standard items API
items(
count = lazyPagingItems.itemCount,
// Here we use the new itemKey extension on LazyPagingItems to
// handle placeholders automatically, ensuring you only need to provide
// keys for real items
key = lazyPagingItems.itemKey { it.uniqueId },
// Similarly, itemContentType lets you set a custom content type for each item
contentType = lazyPagingItems.itemContentType { "contentType" }
) { index ->
// As the standard items call provides only the index, we get the item
// directly from our lazyPagingItems
val item = lazyPagingItems[index]
PagingItem(item = item)
}
}
Дополнительные примеры использования этих новых API см. в наших примерах .
Хотя эти изменения действительно делают примеры LazyColumn
и LazyRow
на несколько строк длиннее, мы считаем, что согласованность во всех ленивых макетах является важным фактором для тех, кто будет использовать Paging Compose в будущем. По этой причине существующие расширения LazyListScope
устарели. ( I0c459 , I92c8f , б/276989796 )
Изменения API
- Чтобы упростить переход на новые API, функции расширения
items
иitemsIndexed
вLazyListScope
теперь поддерживают параметрcontentType
, что отражает поддержку в новых API. ( Ib1918 , р/255283378 )
Обновления зависимостей
- Paging Compose обновил свою зависимость с Compose 1.0.5 до Compose 1.2.1. ( Ib1918 , р/255283378 )
Версия 1.0.0-альфа18
8 февраля 2023 г.
androidx.paging:paging-compose:1.0.0-alpha18
выпущен без изменений. Версия 1.0.0-alpha18 содержит эти коммиты.
Версия 1.0.0-альфа17
24 октября 2022 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha17
. Версия 1.0.0-alpha17 содержит эти коммиты.
Новые возможности
- Добавьте поддержку пользовательского
CoroutineContext
при вызовеcollectLazyPagingItems
. ( I7a574 , б / 243182795 , б / 233783862 )
Версия 1.0.0-альфа16
10 августа 2022 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha16
. Версия 1.0.0-alpha16 содержит эти коммиты.
Новые возможности
- Пейджинг теперь предоставляет журналы через класс
LazyPagingItems
, чтобы предоставлять отладочную информацию, собранную из PagingData. - Журналы можно включить с помощью команды
adb shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE]
. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
Исправления ошибок
- Исправлена недостающая ошибка конструктора
PagingDataDiffer
при использованииpaging-compose:1.0.0-alpha15
сpaging-common:3.1.1
или старше. ( b/235256201 , b/239868768 ).
Версия 1.0.0-альфа15
1 июня 2022 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha15
. Версия 1.0.0-alpha15 содержит эти коммиты.
Изменения API
- Добавлены конструкторы для
PagingDataAdapter
иAsyncPagingDataDiffer
, которые принимаютCoroutineContext
вместоCoroutineDispatcher
. ( Idc878 )
Исправления ошибок
-
LazyPagingItems
теперь устанавливает для начальногоloadState
обновлениеLoadState.Loading
. ( I55043 , б / 224855902 )
Версия 1.0.0-альфа14
13 октября 2021 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha14
. Версия 1.0.0-alpha14 содержит эти коммиты.
Версия 1.0.0-альфа13
29 сентября 2021 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha13
. Версия 1.0.0-alpha13 содержит эти коммиты.
Изменения API
- Функция
LazyPagingItems.snapshot()
заменена свойствомLazyPagingItems.itemSnapshotList
( Ie2da8 ). - Устаревший
LazyPagingItems.getAsState()
был удален ( Ie65e4 ).
Версия 1.0.0-альфа12
21 июля 2021 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha12
. Версия 1.0.0-alpha12 содержит эти коммиты.
Изменения API
-
items(lazyPagingItems)
иitemsIndexed(lazyPagingItems)
используемые для соединения Paging сLazyColumn/Row
теперь принимают параметр ключа опции, который позволяет указать стабильный ключ, представляющий элемент. Подробнее о ключах можно прочитать здесь. ( I7986d ) - Функция
lazyPagingItems.getAsState(index)
устарела. Вместо этого используйтеlazyPagingItems[index]
. ( I086cb , б/187339372 )
Версия 1.0.0-альфа11
30 июня 2021 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha11
. Версия 1.0.0-alpha11 содержит эти коммиты.
Версия 1.0.0-альфа10
2 июня 2021 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha10
. Версия 1.0.0-alpha10 содержит эти коммиты.
Версия 1.0.0-альфа09
18 мая 2021 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha09
. Версия 1.0.0-alpha09 содержит эти коммиты.
Исправления ошибок
- ItemCount и метод получения элемента LazyPagingItems теперь доступны для наблюдения, что позволяет использовать его также с LazyVerticalGrid ( Ie2446 , b/171872064 , b/168285687 ).
Совместимость с композицией
-
androidx.paging:paging-compose:1.0.0-alpha09
совместим только с Compose версии1.0.0-beta07
и выше.
Версия 1.0.0-альфа08
24 февраля 2021 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha08
. Версия 1.0.0-alpha08 содержит эти коммиты.
Обновлено для интеграции с Compose 1.0.0-beta01.
Версия 1.0.0-альфа07
10 февраля 2021 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha07
. Версия 1.0.0-alpha07 содержит эти коммиты.
Обновлено для интеграции с Compose Alpha12.
Версия 1.0.0-альфа06
28 января 2021 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha06
. Версия 1.0.0-alpha06 содержит эти коммиты.
Исправления ошибок
Обновлено в зависимости от Compose 1.0.0-alpha11.
Версия 1.0.0-альфа05
13 января 2021 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha05
. Версия 1.0.0-alpha05 содержит эти коммиты.
Обновлено в зависимости от Compose 1.0.0-alpha10.
Версия 1.0.0-альфа04
16 декабря 2020 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha04
. Версия 1.0.0-alpha04 содержит эти коммиты.
Исправления ошибок
- Обновлены удобные свойства
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
,CombinedLoadStates.append
для перехода отLoading
кNotLoading
только после того, как состояния загрузки посредника и источника станутNotLoading
, чтобы гарантировать применение удаленного обновления. ( I65619 )
Версия 1.0.0-альфа03
2 декабря 2020 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha03
. Версия 1.0.0-alpha03 содержит эти коммиты.
- Обновлено для соответствия Compose 1.0.0-alpha08.
Версия 1.0.0-альфа02
11 ноября 2020 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha02
. Версия 1.0.0-alpha02 содержит эти коммиты.
Изменения API
- Добавлены методы
.peek()
,.snapshot()
,.retry()
и.refresh()
вLazyPagingItem
, которые предоставляют ту же функциональность, что иAsyncPagingDataDiffer
/PagingDataAdapter
( Iddfe8 , b/172041660 ).
Версия 1.0.0-альфа01
28 октября 2020 г.
Выпущен androidx.paging:paging-compose:1.0.0-alpha01
. Версия 1.0.0-alpha01 содержит эти коммиты.
Новые возможности
Артефакт paging-compose
обеспечивает интеграцию между The Paging Library и Jetpack Compose . Простой пример использования:
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
Версия 3.0.1
Версия 3.0.1
21 июля 2021 г.
Выпущен androidx.paging:paging-*:3.0.1
. Версия 3.0.1 содержит эти коммиты.
Исправления ошибок
- Доступ к
PagedList.dataSource
из исходного значения, созданногоLivePagedList
илиRxPagedList
больше не будет ошибочно вызывать исключение IllegalStateException ( I96707 ).
Версия 3.0.0
Версия 3.0.0
5 мая 2021 г.
Выпущен androidx.paging:paging-*:3.0.0
. Версия 3.0.0 содержит эти коммиты.
Основные особенности версии 3.0.0
Большая часть существующего API из Paging 2.xx устарела в пользу новых API Paging 3, чтобы внести следующие улучшения:
- Первоклассная поддержка сопрограмм Kotlin и Flow.
- Поддержка отмены
- Встроенные сигналы состояния нагрузки и ошибок.
- Функция повтора + обновления
- Все три подкласса DataSource были объединены в единый класс PagingSource.
- Пользовательские преобразования страниц, включая встроенное преобразование для добавления разделителей.
- Загрузка верхних и нижних колонтитулов состояния
Версия 3.0.0-rc01
21 апреля 2021 г.
Выпущен androidx.paging:paging-*:3.0.0-rc01
. Версия 3.0.0-rc01 содержит эти коммиты.
Исправления ошибок
- Исправлена проблема, из-за которой пейджинг иногда отправлял неактивные события различия в RecyclerView, что могло привести к преждевременному срабатыванию некоторых прослушивателей. ( Ic507f , б/182510751 )
Версия 3.0.0-бета03
24 марта 2021 г.
Выпущен androidx.paging:paging-*:3.0.0-beta03
. Версия 3.0.0-beta03 содержит эти коммиты.
Исправления ошибок
- Мы обновили способ обработки заполнителей при перезагрузке списка, чтобы предотвратить неожиданные переходы в RecyclerView. Подробности смотрите в NullPaddedDiffing.md . ( Если1490 , б/170027529 , б/177338149 )
- Различные сборщики PagedList (старый путь совместимости) больше не неправильно синхронно вызывают
DataSource.Factory.create()
в главном потоке при вызове.build()
. ( б / 182798948 )
Версия 3.0.0-бета02
10 марта 2021 г.
Выпущен androidx.paging:paging-*:3.0.0-beta02
. Версия 3.0.0-beta02 содержит эти коммиты.
Изменения API
- Расширения Rx3 теперь правильно распространяют требование согласия
@ExperimentalCoroutinesApi
. Ранее они были отмечены в методе@get
, который игнорируется компилятором Kotlin по следующей причине: https://youtrack.jetbrains.com/issue/KT-45227 ( I5733c )
Исправления ошибок
- Ввести ограничения на публичное использование экспериментальных API ( I6aa29 , b/174531520 ).
- Исправлена ошибка, из-за которой
PagingState
всегда имело значениеnull
при вызове удаленного обновления. - Исправлена ошибка, из-за которой пустые страницы, возвращаемые PagingSource, могли препятствовать повторной выборке Paging для выполнения
prefetchDistance
, что приводило к «зависанию» Paging.
Версия 3.0.0-бета01
10 февраля 2021 г.
Выпущен androidx.paging:paging-*:3.0.0-beta01
. Версия 3.0.0-beta01 содержит эти коммиты.
Изменения API
- Обертки Rx2 и Rx3 теперь предоставляют экспериментальную аннотацию, от которой она зависит. Если вы используете оболочки совместимости Rx в paging-rxjava2 или paging-rxjava3, теперь вам нужно будет аннотировать использование с помощью
@OptIn(ExperimentalCoroutinesApi::class)
( Ib1f9d ).
Исправления ошибок
- Исправлено
IndexOutOfBoundsException: Inconsistency detected
, которое иногда возникало при использовании API-интерфейсовDataSource
версии 2 через пути совместимости. - Вызов
isInvalid
во время инициализацииDataSource
при использовании через пути совместимости теперь корректно запускается в fetchDispatcher, а не в основном потоке. Это исправляетIllegalStateException
из-за доступа к базе данных в основном потоке при использовании реализацииPagingSource
Room.
Версия 3.0.0-альфа13
27 января 2021 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha13
. Версия 3.0.0-alpha13 содержит эти коммиты.
Изменения API
-
PagingSource.getRefreshKey
больше не является необязательным для реализации, теперь это абстрактная функция без реализации по умолчанию. Мигрирующие пользователи могут либо продолжать возвращать реализацию по умолчанию, которая просто возвращаетnull
, ноgetRefreshKey()
должна иметь реальную реализацию, возвращающую ключ на основе текущей позиции прокрутки пользователя, что позволяет Paging продолжать загрузку, сосредоточенную вокруг области просмотра, черезPagingState.anchorPosition
, если это возможно. ( I4339a ) -
InvalidatingPagingSourceFactory
теперь является финальным классом ( Ia3b0a ). - Разрешите настройку поведения разделителя терминалов (верхний/нижний колонтитул) с помощью дополнительного необязательного параметра SeparatorType. Два варианта:
-
FULLY_COMPLETE
— существующее поведение; дождитесь, пока PagingSource и RemoteMediator пометят endOfPaginationReached, прежде чем добавлять разделители терминалов. Если RemoteMediator не используется, удаленный loadState игнорируется. Это в первую очередь полезно, если вы хотите отображать разделители разделов только тогда, когда раздел полностью загружен, включая выборку из удаленного источника, например, из сети. -
SOURCE_COMPLETE
— дождитесь, пока PagingSource отметит endOfPaginationReached, даже если используется RemoteMediator. Это позволяет отображать верхние и нижние колонтитулы синхронно с начальной загрузкой, что избавляет пользователей от необходимости прокручивать страницу, чтобы увидеть разделители терминалов. ( Ibe993 , б/174700218 )
-
Исправления ошибок
- Исправлена редкая утечка памяти, которая происходит, когда PagingSource становится недействительным еще до того, как PageFetcher может начать загрузку из него. ( I9606b , б/174625633 )
Версия 3.0.0-альфа12
13 января 2021 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha12
. Версия 3.0.0-alpha12 содержит эти коммиты.
Изменения API
- InvalidatingPagingSourceFactory больше не является абстрактным классом, поскольку у него никогда не было абстрактных методов. ( I4a8c4 )
- Добавлена перегрузка .cachedIn(), которая принимает ViewModel вместо Lifecycle или CoroutineScope для пользователей Java. ( I97d81 , б/175332619 )
- Разрешите вызывающим объектам Java использовать операции преобразования PagingData асинхронным способом, приняв Executor в аргументы оператора преобразования. У всех операторов преобразования -Sync теперь удален суффикс -Sync, и пользователям Kotlin Coroutine придется устранять неоднозначность, вызывая функцию расширения, которая вместо этого принимает приостанавливающий блок. Все операторы преобразования PagingData были перемещены в расширения статического класса PagingDataTransforms. Пользователям Java необходимо будет вызывать их через статические помощники, например,
PagingDataTransforms.map(pagingData, transform)
Для пользователей Kotlin синтаксис тот же, но вам нужно будет импортировать функцию. ( Если6885 , б/172895919 )
Исправления ошибок
- Исправлена ошибка, из-за которой
RemoteMediator.load()
не вызывался во времяadapter.refresh()
, если конец нумерации страниц уже был достигнут.
Версия 3.0.0-альфа11
16 декабря 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha11
. Версия 3.0.0-alpha11 содержит эти коммиты.
Новые возможности
- Добавлена поддержка сохраненного состояния для следующих основных вариантов использования (полная поддержка, особенно в случае с многоуровневым исходным кодом, все еще находится в стадии разработки):
- поток кэшируется, а приложение не уничтожается (например, поток кэшируется в модели представления, а активность воссоздается в процессе)
- Источник подкачки учитывается, заполнители включены, а макет не смещен.
Изменения API
-
PagingSource.getRefreshKey()
теперь является стабильным API ( I22f6f , b/173530980 ). -
PagingSource.invalidate
больше не является открытой функцией. Если вам нужно получать уведомления при аннулировании, рассмотрите возможность вызова метода RegisterInvalidatedCallback вместо переопределения инвалидации. ( I628d9 , б / 173029013 , б / 137971356 ) - Теперь у Pager есть один экспериментальный конструктор наряду с обычными конструкторами, вместо того, чтобы переносить экспериментальные API в неэкспериментальные общедоступные API через аннотацию согласия. ( I9dc61 , б/174531520 )
- Обновлены удобные свойства
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
,CombinedLoadStates.append
для перехода отLoading
кNotLoading
только после того, как состояния загрузки посредника и источника станутNotLoading
, чтобы гарантировать применение удаленного обновления. ( I65619 ) LoadParams.pageSize был удален (он уже устарел). Рекомендуется использовать
LoadParams.loadSize
в вашем PagingSource.LoadParams.loadSize
всегда равенPagingConfig.pageSize
за исключением вызова начальной загрузки, где он равенPagingConfig.initialLoadSize
.Если вы тестируете источник данных Paging2 без использования Pager или PagedList,
pageSize
может не соответствоватьPagingConfig.pageSize
, если вы также устанавливаетеinitialLoadSize
. Если это важно для ваших тестов, попробуйте вместо этого использовать Pager/PagedList, который внутренне установит правильный размер страницы для ваших методов загрузки источника данных. ( I98ac7 , б / 149157296 )
Исправления ошибок
- Исправлен сбой из-за IllegalStateException при использовании разделителей с установленным PagingConfig.maxSize. ( I0ed33 , б/174787528 )
- Исправлена ошибка, из-за которой состояние загрузки для PREPEND/APPEND не обновлялось до
NotLoading(endOfPaginationReached = true)
сразу после начальной загрузки, если был установлен RemoteMediator ( I8cf5a ). - Исправлена ошибка, из-за которой API на стороне презентатора, такие как .snapshot(), .peek() и т. д., возвращали предыдущий (устаревший) список в обновлениях ListUpdateCallback.
- Исправлена ошибка, из-за которой операторы разделителей не добавляли верхние и нижние колонтитулы при использовании с RemoteMediator.
- Исправлена ошибка, из-за которой обновления LoadState для NotLoading для RemoteMediator зависали в состоянии загрузки.
- Исправлена ошибка, из-за которой API совместимости Paging2.0,
.asPagingSourceFactory()
, мог привести к инициализации резервногоDataSource
на неправильном CoroutineDispatcher. Это устраняет сбой и возможные случаи ANR, особенно при использовании текущей реализации PagingSource от Room, которая использует этот путь совместимости.
Версия 3.0.0-альфа10
2 декабря 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha10
. Версия 3.0.0-alpha10 содержит эти коммиты.
Изменения API
Устаревшие API
dataRefreshFlow
иdataRefreshListener
были удалены, поскольку они являются избыточными при обновлениях loadStateFlow/прослушивателя. Для тех, кто мигрирует, эквивалент loadStateFlow:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
( Ib5570 , б/173530908 )
Исправления ошибок
- EndOfPaginationReached для RemoteMediator
REFRESH
теперь правильно распространяется на обновления LoadState и предотвращает запуск удаленныхAPPEND
иPREPEND
. ( I94a3f , б / 155290248 ) - Представление пустого списка из-за пустой начальной страницы или жесткой фильтрации больше не будет препятствовать пейджингу запускать загрузки
PREPEND
илиAPPEND
. ( I3e702 , б/168169730 ) - Исправлена проблема, из-за которой
getRefreshKey
не вызывался в последующих поколениях PagingSource при быстром возникновении недействительности. ( I45460 , б / 170027530 )
Внешний вклад
- Был добавлен новый абстрактный класс InvalidatingPagingSourceFactory с API
.invalidate()
, который пересылает недействительную информацию всем излучаемым им PagingSources. Спасибо @claraf3 ! ( Ie71fc , б/160716447 )
Известные проблемы
- Верхние и нижние колонтитулы преобразования .insertSeparators() могут отображаться не сразу при использовании RemoteMediator b/172254056.
- Использование RemoteMediator может привести к зависанию удаленного
LoadState
, если аннулирование иPagingSource.load(LoadParams.Refresh(...))
завершится до того, какRemoteMediator.load()
вернет b/173717820
Версия 3.0.0-альфа09
11 ноября 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha09
. Версия 3.0.0-alpha09 содержит эти коммиты.
Изменения API
- Полностью устаревшие методы dataRefreshFlow / Listener с предложением replaceWith. ( I6e2dd )
Исправления ошибок
- Исправлена ошибка, из-за которой
IllegalArgumentException
выдавалось при использовании разделителей с RemoteMediator, и сработала недействительность, пока удаленная загрузка, возвращающая endOfPagination, все еще выполняется ( I3a260 ).
Версия 3.0.0-альфа08
28 октября 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha08
. Версия 3.0.0-alpha08 содержит эти коммиты.
Изменения API
- Варианты
DataSource.InvalidatedCallback
для Kotlin/Java были объединены путем включения SAM-преобразований в Kotlin через функциональный интерфейс (доступен в Kotlin 1.4). Это также исправляет ошибку, из-за которой вариант обратных вызовов недействительности Kotlin не вызывался после преобразования с помощью.map
или.mapByPage
. ( I1f244 , б/165313046 )
Исправления ошибок
- Взаимодействие пейджинга с ViewPager было значительно улучшено. В частности, Paging больше не будет отменять вызов
RemoteMediator#load
из-за аннулирования страницы. Он также больше не будет выполнять запрос на добавление или добавление загрузки, если требуется REFRESH , до тех пор, пока запрос REFRESH не завершится успешно. ( I6390b , б/162252536 ) - Проверка API для MissingGetterMatchingBuilder включена для androidx ( I4bbea , b/138602561 )
- Исправлена ошибка, из-за которой помощники
.withLoadState*
ConcatAdapter
аварийно завершали работу из-за уведомления RecyclerView из фонового потока ( I18bb5 , b/170988309 ). - Исправлена ошибка, из-за которой загрузка очень маленькой непустой страницы иногда мешала правильной загрузке предварительной выборки. Iffda3 б/169259468
Версия 3.0.0-альфа07
1 октября 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha07
. Версия 3.0.0-alpha07 содержит эти коммиты.
Изменения API
- Операторы на основе Async PagingData Guava теперь принимают Executor в качестве параметра для управления контекстом выполнения. ( ID4372 )
Исправления ошибок
- Исправлено исключение IndexOutOfBounds, возникающее в RemoteMediator из-за состояния гонки. ( I00b7f , б/165821814 )
- Исправлено состояние гонки в преобразовании DataSource -> PagingSource, из-за которого результирующий PagingSource мог игнорировать сигналы недействительности от DataSource.
- Исправлена проблема в логике выборки страниц, из-за которой иногда не удавалось получить новые поколения PagingSource до тех пор, пока не был вызван PagingDataAdapter.refresh().
- Исправлена проблема, из-за которой иногда терялась позиция прокрутки при использовании DataSource, преобразованного в PagingSource (например, созданного Room), в сочетании с RemoteMediator.
Внешний вклад
- Спасибо @simonschiller за добавление операторов асинхронного преобразования на основе RxJava2, RxJava3 и Guava для PagingData!
Версия 3.0.0-альфа06
2 сентября 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha06
. Версия 3.0.0-alpha06 содержит эти коммиты.
Изменения API
-
UnsupportedOperationException
с более четким сообщением об отсутствии поддержки стабильных идентификаторов теперь выдается при каждом вызовеPagingDataAdapter.setHasStableIds
. ( Ib3890 , б/158801427 )
Исправления ошибок
- InsertSeparators больше не отфильтровывает пустые страницы, позволяя презентатору соблюдать расстояние предварительной выборки даже в тех случаях, когда вставлено много пустых страниц. ( I9cff6 , б/162538908 )
Версия 3.0.0-альфа05
19 августа 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha05
. Версия 3.0.0-alpha05 содержит эти коммиты.
Исправления ошибок
- Пейджинг теперь корректно выполняет предварительную выборку страниц, даже если представленные данные сильно фильтруются.
- Возврат
LoadResult.Error
при повторной загрузке больше не приводит к неправильному повторному запуску повторной попытки при доступе к элементу.
Внешний вклад
- Спасибо Кларе Ф за помощь в подчистке некоторых тестов! ( 549612 )
Версия 3.0.0-альфа04
5 августа 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha04
. Версия 3.0.0-alpha04 содержит эти коммиты.
Изменения API
- Добавлен API
peek()
вAsyncPagingDataDiffer
иPagingDataAdapter
, чтобы разрешить доступ к представленным данным без запуска загрузки страниц. ( I38898 , б / 159104197 ) - В
PagingDataAdapter
иAsyncPagingDataDiffer
добавлен APIsnapshot()
, позволяющий извлекать представленные элементы без запуска выборки страницы. ( I566b6 , б/159104197 ) - Добавлен конструктор
PagingData.from(List<T>)
, позволяющий представлять статические списки, которые можно комбинировать с общим потоком PagingData для отображения статических списков в определенных состояниях, например, до завершения первоначального REFRESH или просто для тестирования преобразований. ( Id134d ) - Устаревшие API-интерфейсы dataRefresh Flow / Listener, поскольку они предназначались для раскрытия представленного состояния элементов при REFRESH, но с улучшениями времени обратного вызова loadState Flow / Listener и свойства itemCount они стали избыточными ( Ia19f3 ).
- Добавлены оболочки совместимости RxJava3 для
PagingSource
иRemoteMediator
( I49ef3 , b/161480176 ).
Исправления ошибок
-
PositionalDataSource
преобразован вPagingSource
с помощью помощникаtoPagingSourceFactory
, включаяPagingSource
, созданный Room, теперь правильно помечает себя для поддержки прыжков. ( I3e84c , б/162161201 ) - Исправлена ошибка, из-за которой использование синхронного варианта submitData иногда приводило к гонке, вызывающей
ClosedSendChannelException
( I4d702 , b/160192222 ).
Внешний вклад
- Спасибо Заку Свирсу за добавление оболочек совместимости RxJava3 от имени Slack! ( I49ef3 , б / 161480176 )
Версия 3.0.0-альфа03
22 июля 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha03
. Версия 3.0.0-alpha03 содержит эти коммиты.
Изменения API
- Конструктор PagingState теперь общедоступен, что должно упростить тестирование реализации getRefreshKey() ( I8bf15 ).
- Спрятаны варианты функции карты Kotlin DataSource из Java, чтобы устранить неоднозначность между исходными вариантами и вариантами Kotlin. ( If7b23 , b/161150011 )
- Избыточные API, предназначенные для удобства пользователей Kotlin, помечены @JvmSynthetic ( I56ae5 ).
- Добавлены перегрузки для конструктора LoadResult.Page, который по умолчанию для itemsBefore и itemsAfter имеет значение COUNT_UNDEFINED ( I47849 ).
- Существующие операторы PagingData теперь принимают методы приостановки, а также введены новые не приостанавливающие операторы MapSync, FlatMapSync и FilterSync для пользователей Java. Существующие методы преобразования были перенесены в функции расширения, поэтому пользователям Kotlin теперь необходимо будет их импортировать. ( I34239 , б / 159983232 )
Исправления ошибок
- Room (и PositionalDataSource) PagingSources теперь будет отображать ведущий разделитель как часть первой страницы, поэтому пользователю не нужно прокручивать его, чтобы отобразить. ( I6f747 , б / 160257628 )
- Доступ к элементам заполнителей теперь правильно запускает загрузку PagingSource до тех пор, пока не будет возвращена страница, соответствующая запрошенному индексу, после преобразования с помощью PagingData.filter() ( I95625 , b/158763195 ).
- Исправлена ошибка, из-за которой иногда прокрутка после того, как PagingSource возвращает ошибку, могла помешать повторной попытке PagingDataAdapter.retry(). ( I1084f , б / 160194384 )
- Устраняет проблему, из-за которой доступ к элементу после удаления страницы мог не загружать страницы, хотя доступ к элементу находился в пределах prefetchDistance ( Ie95ae , b/160038730 ).
- Настройка PagingConfig.maxSize больше не включает заполнители после события перетаскивания ( I2be29 , b/159667766 ).
Версия 3.0.0-альфа02
24 июня 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha02
. Версия 3.0.0-alpha02 содержит эти коммиты.
Изменения API
- Добавлены перегрузки для конструктора
PagingConfig
с общими значениями по умолчанию ( I39c50 , b/158576040 ). - Добавлены перегрузки для конструкторов
PagingDataAdapter
иAsyncPagingDataDiffer
с общими значениями по умолчанию ( Ie91f5 ). - API-интерфейсы адаптера
dataRefreshFlow
иdataRefreshListener
теперь передают логическое значение, сигнализирующее о том, пуст лиPagingData
( I6e37e , b/159054196 ). - Добавлены API-интерфейсы RxJava и Guava для RemoteMediator — RxRemoteMediator и ListenableFutureRemoteMediator.
- Добавлены помощники в PagingState для доступа к общим элементам, такие как
isEmpty()
иfirstItemOrNull()
( I3b5b6 , b/158892717 ).
Исправления ошибок
- Пейджер теперь проверяет повторное использование PagingSource на заводе, чтобы предотвратить случайное повторное использование недействительных PagingSources, которые выдавали неясную ошибку ( I99809 , b/158486430 ).
- Сбои RemoteMediator REFRESH больше не препятствуют загрузке PagingSource ( I38b1b , b/158892717 ).
- Неприостанавливаемая версия
submitData
больше не вызывает сбой из-за одновременного сбора несколькихPagingData
при вызове после приостанавливающей версииsubmitData
. ( I26358 , б / 158048877 ) - Исправлено исключение «невозможно дважды получить данные с пейджера», которое могло возникнуть после изменения конфигурации ( I58bcc , b/158784811 ).
Версия 3.0.0-альфа01
10 июня 2020 г.
Выпущен androidx.paging:paging-*:3.0.0-alpha01
. Версия 3.0.0-alpha01 содержит эти коммиты.
Библиотека подкачки обновлена до версии 3.0, чтобы включить несколько важных новых функций.
Новые возможности версии 3.0
- Первоклассная поддержка сопрограмм Kotlin и Flow.
- Поддержка асинхронной загрузки с помощью функций приостановки сопрограмм, примитивов RxJava Single или Guava ListenableFuture .
- Встроенные сигналы состояния загрузки и ошибок для гибкого дизайна пользовательского интерфейса, включая функции повтора и обновления.
- Улучшения уровня репозитория
- Упрощенный интерфейс источника данных
- Упрощенная сеть + нумерация страниц базы данных
- Поддержка отмены
- Улучшения уровня представления
Известные проблемы
- Java-документы Paging 3 пока недоступны. А пока используйте руководства, указанные выше, или документацию Kotlin. ( б / 158614050 )
Версия 2.1.2
Версия 2.1.2
18 марта 2020 г.
Выпущен androidx.paging:paging:2.1.2
. Версия 2.1.2 содержит эти коммиты против 2.1.0 .
Исправления ошибок
- Исправлено исключение
IndexOutOfBoundsException
в редких случаях при конвертации позиции во время недействительности.
Проблема с выпуском
Версия подкачки
2.1.1
была выпущена неправильно из неправильно настроенной ветки, что обнажило частично реализованные API и функции, которые появятся в будущем выпуске.Пейджинг
2.1.2
содержит исправление центрирования нагрузки, первоначально выпущенное в версии 2.1.1, но на этот раз правильно выбранное поверх версии 2.1.0. Настоятельно рекомендуется выполнить обновление до этой версии, если вы сейчас используете версию 2.1.1.
Версия 2.1.1
Версия 2.1.1
18 декабря 2019 г.
Выпущен androidx.paging:paging-*:2.1.1
. Версия 2.1.1 содержит эти коммиты .
Исправления ошибок
- Непрерывные первоначальные загрузки из PositionalDataSources теперь сосредоточены вокруг последнего доступа, когда заполнители отключены.
Версия 2.1.0
Версия 2.1.0
25 января 2019 г.
Пейджинг 2.1.0
выпущен без изменений по сравнению с 2.1.0-rc01
.
Версия 2.1.0-rc01
6 декабря 2018 г.
Пейджинг 2.1.0-rc01
выпущен без изменений по сравнению с 2.1.0-beta01
.
Версия 2.1.0-бета01
1 ноября 2018 г.
Пейджинг 2.1.0-beta01
выпущен без изменений по сравнению с 2.1.0-alpha01
.
Версия 2.1.0-альфа01
12 октября 2018 г.
Пейджинг 2.1.0-alpha01
имеет два основных дополнения — удаление страниц и библиотеки расширений KTX для каждого артефакта, а также несколько других изменений API и исправлений.
Изменения API
- Добавлен
PagedList.Config.Builder.setMaxSize()
для ограничения количества загружаемых элементов в памяти. - Добавлен
androidx.paging.Config()
в качестве альтернативы Kotlin дляPagedList.Config.Builder
- Добавлен
androidx.paging.PagedList()
в качестве альтернативы Kotlin дляPagedList.Builder
- Добавлен
DataSourceFactory.toLiveData()
в качестве альтернативы Kotlin дляLivePagedListBuilder
- Добавлены
DataSourceFactory.toObservable()
иtoFlowable()
в качестве альтернатив Kotlin дляRxPagedListBuilder
- Добавлен
AsyncPagedListDiffer.addPagedListListener()
для прослушивания при замене PagedList. б/111698609 - Добавлен вариант
PagedListAdapter.onCurrentListChanged()
, который передает старый и новый список, предыдущий вариант устарел. - Добавлены варианты
PagedListAdapter/AsyncPagedListDiffer.submitList()
, которые принимают дополнительный обратный вызов, который срабатывает, если/когда отображается список страниц после сравнения. Это позволяет синхронизировать обмен PagedList с другими обновлениями пользовательского интерфейса. б/73781068 - Добавлен
PagedList.getLoadedCount()
, чтобы вы знали, сколько элементов находится в памяти. Обратите внимание, что возвращаемое значение всегда равно.size()
, если заполнители отключены.
Исправления ошибок
- Исправлено состояние гонки при различении повторного использования списков b/111591017.
-
PagedList.loadAround()
теперь генерирует исключениеIndexOutOfBoundsException
, когда индекс недействителен. Раньше это могло привести к сбою из-за неясного другого исключения. - Исправлен случай, когда чрезвычайно маленький размер начальной загрузки вместе с неизмененными данными приводил к невозможности дальнейшей загрузки b/113122599.
Версия 2.0.0
Версия 2.0.0
1 октября 2018 г.
Paging 2.0.0
выпущен с одним исправлением.
Исправления ошибок
- Исправлен сбой, который мог произойти при очень быстрой прокрутке с использованием
PositionalDataSource
и заполнителей b/114635383 .
Версия 2.0.0-бета01
2 июля 2018 г.
Исправления ошибок
- Исправлено исчезновение содержимого в некоторых случаях добавления в начало (заполнители отключены, PositionalDataSource) b/80149146
- (Уже выпущено в
1.0.1
) Исправлены сбои, из-за которыхPagedListAdapter
иAsyncPagedListDiffer
не могли сигнализировать о событиях перемещения. б/110711937
Зависимости до AndroidX
Для последующих версий Paging до AndroidX включите следующие зависимости:
dependencies {
def paging_version = "1.0.0"
implementation "android.arch.paging:runtime:$paging_version"
// alternatively - without Android dependencies for testing
testImplementation "android.arch.paging:common:$paging_version"
// optional - RxJava support
implementation "android.arch.paging:rxjava2:$paging_version"
}
Версия 1.0.1
Версия 1.0.1
26 июня 2018 г.
Paging 1.0.1
выпущен с единственным исправлением ошибки во runtime
. Мы настоятельно рекомендуем использовать 1.0.1
для стабильности. Также выпущен Paging RxJava2 1.0.1
, который идентичен 1.0.0-rc1
.
Исправления ошибок
- Исправлены сбои, из-за которых
PagedListAdapter
иAsyncPagedListDiffer
не могли сигнализировать о событиях перемещения. б/110711937
RxJava2 версия 1.0.0
RxJava2 Версия 1.0.0-rc1
16 мая 2018 г.
Пейджинг RxJava2 1.0.0-rc1
переходит в версию-кандидат без изменений по сравнению с исходной альфа-версией.
Версия 1.0.0
Версия 1.0.0-rc1
19 апреля 2018 г. Paging Release Candidate
У нас больше нет известных проблем или новых функций, запланированных для выпуска Paging 1.0.0
. Пожалуйста, обновите свои проекты для использования 1.0.0-rc1
и помогите нам протестировать его, чтобы мы могли выпустить надежную версию 1.0.0
.
В этом релизе нет никаких изменений, он такой же, как и 1.0.0-beta1
.
Версия 1.0.0-бета1
5 апреля 2018 г.
Пейджинг некоторое время будет находиться в стадии бета-тестирования, прежде чем перейти к выпуску-кандидату. Мы не планируем дальнейших изменений API для Paging 1.0
, и планка для любых изменений API очень высока.
Поддержка Alpha RxJava2 для пейджинга выпущена как отдельный дополнительный модуль ( android.arch.paging:rxjava2:1.0.0-alpha1
) и будет временно поддерживать отдельные версии до стабилизации.
Эта новая библиотека предоставляет RxJava2 альтернативу LivePagedListBuilder
, способную создавать Observable
и Flowable
, используя Scheduler
вместо Executor
:
Котлин
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
Ява
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
Новые возможности
-
RxPagedListBuilder
добавляется через новый артефактandroid.arch.paging:rxjava2
.
Изменения API
Изменения API для уточнения роли исполнителей в строителях:
Переименован
setBackgroundThreadExecutor()
вsetFetchExecutor()
(вPagedList.Builder
иLivePagedListBuilder
).Переименован
setMainThreadExecutor()
вsetNotifyExecutor()
(вPagedList.Builder
).
Исправлен член
PagedList.mCallbacks
, который стал частным.
Исправления ошибок
LivePagedListBuilder
запускает начальную загрузкуPagedList
на указанном исполнителе вместо пула потоков ввода-вывода компонентов Arch.Исправлено поведение недействительности во внутренних оболочках
DataSource
(используется для реализацииDataSource.map
, а также отключенной загрузкиPositionalDataSource
с помощью заполнителя) b/77237534
Версия 1.0.0-альфа7
21 марта 2018 г.
Paging 1.0.0-alpha7
выпускается вместе с Lifecycles 1.1.1
. Поскольку Paging Alpha7 зависит от перемещения класса Function
, упомянутого выше, вам необходимо обновить зависимость lifecycle:runtime
до android.arch.lifecycle:runtime:1.1.1
.
Планируется, что Paging alpha7
станет последней версией перед тем, как Paging выйдет в бета-версию.
Изменения API
- Объекты
DataSource.LoadParams
теперь имеют общедоступный конструктор, а объектыDataSource.LoadCallback
теперь являются абстрактными. Это позволяет обернутьDataSource
или напрямую протестироватьDataSource
с помощью фиктивного обратного вызова. б/72600421 - Сопоставители для DataSource и DataSource.Factory
-
map(Function<IN,OUT>)
позволяет преобразовывать, переносить или украшать результаты, загруженныеDataSource
. -
mapByPage(<List<IN>,List<OUT>>)
позволяет сделать то же самое для пакетной обработки (например, если элементы, загруженные из SQL, необходимо дополнительно запросить отдельную базу данных, это можно сделать как пакетную обработку).
-
-
PagedList#getDataSource()
добавлен как удобный метод b/72611341. - Из API были удалены все устаревшие классы, включая остатки пакета
recyclerview.extensions
иLivePagedListProvider
. -
DataSource.Factory
заменен из интерфейса на абстрактный класс, чтобы обеспечить функциональность карты.
Исправления ошибок
- Изменены Строители, чтобы они стали окончательными. б/70848565
- Реализация Room
DataSource
теперь исправлена для обработки многотабличных запросов — это исправление содержится в Room 1.1.0-beta1, см. выше. - Исправлена ошибка, из-за которой
BoundaryCallback.onItemAtEndLoaded
не вызывался дляPositionalDataSource
, если заполнители включены, а общий размер точно кратен размеру страницы.
Версия 1.0.0-альфа5
22 января 2018 г.
Исправления ошибок
- Исправлена загрузка страницы, когда заполнители отключены b/70573345.
- Дополнительное ведение журнала для отслеживания ошибки IllegalArgumentException b/70360195 (и спекулятивное исправление на стороне комнаты)
- Исправления примера кода Javadoc b/70411933 , b/71467637