Пейджинг

Библиотека Paging Library упрощает постепенную и корректную загрузку данных в RecyclerView вашего приложения.

В этой таблице перечислены все артефакты, входящие в группу androidx.paging .

Артефакт Стабильный релиз Предварительная версия релиза Бета-версия Альфа-версия
пейджин-* 3.3.6 - 3.4.0-beta01 -
paging-compose 3.3.6 - 3.4.0-beta01 -
Последнее обновление этой библиотеки: 17 декабря 2025 г.

Объявление зависимостей

Чтобы добавить зависимость от Paging, необходимо добавить репозиторий Google Maven в ваш проект. Для получения дополнительной информации ознакомьтесь с информацией в репозитории Google Maven .

Добавьте зависимости для необходимых артефактов в файл build.gradle вашего приложения или модуля:

Круто

dependencies {
  def paging_version = "3.3.6"

  implementation "androidx.paging:paging-runtime:$paging_version"

  // alternatively - without Android dependencies for tests
  testImplementation "androidx.paging:paging-common:$paging_version"

  // optional - RxJava2 support
  implementation "androidx.paging:paging-rxjava2:$paging_version"

  // optional - RxJava3 support
  implementation "androidx.paging:paging-rxjava3:$paging_version"

  // optional - Guava ListenableFuture support
  implementation "androidx.paging:paging-guava:$paging_version"

  // optional - Jetpack Compose integration
  implementation "androidx.paging:paging-compose:3.4.0-beta01"
}

Котлин

dependencies {
  val paging_version = "3.3.6"

  implementation("androidx.paging:paging-runtime:$paging_version")

  // alternatively - without Android dependencies for tests
  testImplementation("androidx.paging:paging-common:$paging_version")

  // optional - RxJava2 support
  implementation("androidx.paging:paging-rxjava2:$paging_version")

  // optional - RxJava3 support
  implementation("androidx.paging:paging-rxjava3:$paging_version")

  // optional - Guava ListenableFuture support
  implementation("androidx.paging:paging-guava:$paging_version")

  // optional - Jetpack Compose integration
  implementation("androidx.paging:paging-compose:3.4.0-beta01")
}

Для получения информации об использовании расширений Kotlin см. документацию ktx .

Для получения дополнительной информации о зависимостях см. раздел «Добавление зависимостей сборки» .

Обратная связь

Ваши отзывы помогают улучшить Jetpack. Сообщите нам, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете проголосовать за существующую проблему, нажав кнопку со звездочкой.

Создать новую задачу

Для получения более подробной информации см. документацию по системе отслеживания ошибок .

Версия 3.4

Версия 3.4.0-beta01

17 декабря 2025 г.

Выпущена версия androidx.paging:paging-*:3.4.0-beta01 . Версия 3.4.0-beta01 содержит следующие коммиты .

Исправлены ошибки

  • Исправлена ​​ошибка, приводящая к конфликту состояний между загрузками RecyclerView и Refresh вызывающим IndexOutOfBoundsException в RecyclerView . Прерванные обновления пользовательского интерфейса из-за непрерывных загрузок Refresh могут привести к рассинхронизации состояния постраничной навигации с RecyclerView . Это исправлено путем сброса состояния постраничной навигации до состояния до обновления, если обновление прерывается (т. е. последовательной загрузкой Refresh ). ( I771b0 , b/409809768 )

Версия 3.4.0-alpha04

10 сентября 2025 г.

Выпущена версия androidx.paging:paging-*:3.4.0-alpha04 . Версия 3.4.0-alpha04 содержит следующие коммиты .

Изменения в API

  • Добавлен новый API PagingState closestItemAroundPosition для получения загруженного элемента, наиболее близкого к целевой позиции и соответствующего входному предикату. Это можно использовать для генерации ключей обновления на основе элементов, когда идеальный якорный элемент находится рядом, но не точно в целевой позиции. ( I96e5c , b/440187139 )

Версия 3.4.0-alpha03

27 августа 2025 г.

Выпущена версия androidx.paging:paging-*:3.4.0-alpha03 . Версия 3.4.0-alpha03 содержит следующие коммиты .

Новые функции

  • Paging-common добавил поддержку настольных приложений в качестве новой целевого объекта Kotlin Multiplatform (KMP). В общей сложности теперь он поддерживает JVM (Android и настольные приложения), нативные приложения (Linux, iOS, watchOS, tvOS, macOS, MinGW) и веб-приложения (JavaScript, WasmJS). ( Id2483 , b/436884811 )
  • В Paging-testing добавлены новые целевые платформы Kotlin Multiplatform (KMP). В общей сложности теперь поддерживаются JVM (Android и Desktop), нативные приложения (Linux, iOS, watchOS, tvOS, macOS, MinGW) и веб-приложения (JavaScript, WasmJS). ( I0c543 , b/435014650 )
  • Paging-compose добавил новые цели Kotlin Multiplatform (KMP). В общей сложности теперь он поддерживает JVM (Android и Desktop), нативные приложения (Linux, iOS, watchOS, tvOS, macOS, MinGW) и веб-приложения (JavaScript, WasmJS). ( I70d44 , b/436884801 )

Изменения в API

Версия 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 содержит следующие коммиты .

Новые функции

Исправлены ошибки

  • В модульных тестах Android, использующих Paging 3.3 или более позднюю версию, PagingLogger больше не будет выдавать ошибок ( Ia9400 , b/331684448 ).
  • Исправлена ​​ошибка, из-за которой RecyclerView выбрасывал IndexOutOfBoundsException при прокрутке пользователем во время обновления RecyclerView ( Id1f16 , b/381024738 ).
  • Исправлена ​​ошибка, из-за которой постраничная навигация не могла запускать дополнительные загрузки при обновлении страницы во время прокрутки. ( I60ca5 , b/352586078 )
  • Исправлена ​​ошибка, приводившая к сбою при прокрутке во время обновления элементов постраничной навигации. ( I8c65a , b/347649763 )

Версия 3.3

Версия 3.3.6

12 февраля 2025 г.

Выпущена androidx.paging:paging-*:3.3.6 . Версия 3.3.6 содержит следующие коммиты .

Исправлены ошибки

  • Сигналы обновления и повторной отправки, отправленные во время первоначального обновления, теперь будут сохраняться и автоматически отправляться повторно, как только презентер пейджинга будет готов.

Внешний вклад

  • Спасибо Еве за отправку исправления ошибки ( #754 )

Версия 3.3.5

11 декабря 2024 г.

Выпущена androidx.paging:paging-*:3.3.5 . Версия 3.3.5 содержит следующие коммиты .

Исправлены ошибки

  • Исправлена ​​ошибка, из-за которой RecyclerView выдавал IndexOutOfBoundsException при прокрутке пользователем во время обновления RecyclerView . ( Id1f16 , b/381024738 )

Версия 3.3.4

13 ноября 2024 г.

Выпущена androidx.paging:paging-*:3.3.4 . Версия 3.3.4 содержит следующие коммиты .

Исправлены ошибки

  • В модульных тестах Android, использующих Paging 3.3 или более позднюю версию, больше не будет возникать ошибка типа Method isLoggable in android.util.Log not mocked ( Ia9400 , b/331684448 ).

Версия 3.3.2

7 августа 2024 г.

Выпущена androidx.paging:paging-*:3.3.2 . Версия 3.3.2 содержит следующие коммиты .

Новые функции

  • В paging-common и paging-testing добавлены новые многоплатформенные цели Kotlin: watchos , tvos и linuxArm64 ( 90c9768 ), ( 53e0eca ).

Версия 3.3.1

24 июля 2024 г.

Выпущена androidx.paging:paging-*:3.3.1 . Версия 3.3.1 содержит следующие коммиты .

Исправлены ошибки

  • Исправлена ​​ошибка, из-за которой AsyncPagingDataDiffer или построенные на его основе API, такие как PagingDataAdapter используемый с RecyclerView , не могли инициировать повторную загрузку при обновлении источника данных во время прокрутки. ( I60ca5 , b/352586078 )
  • Исправлена ​​ошибка, приводящая к сбою, который происходит при удалении элементов из источника данных во время прокрутки RecyclerView с использованием PagingDataAdapter или AsyncPagingDataDiffer . ( I8c65a , b/347649763 )

Версия 3.3.0

14 мая 2024 г.

Выпущена androidx.paging:paging-*:3.3.0 . Версия 3.3.0 содержит следующие коммиты .

Важные изменения по сравнению с версией 3.2.0

  • Класс PagingDataPresenter теперь является публичным. Теперь на основе PagingDataPresenter можно создавать многоплатформенные презентеры, не требуя внутренних API для работы с пейджингом или AsyncPagingDataDiffer из paging-runtime .
  • Добавлены новые вспомогательные методы LoadStates и CombinedLoadStates в hasError и isIdle для проверки состояния LoadStates — Error или NotLoading соответственно. Также добавлен новый метод расширения Kotlin awaitNotLoading() для Flow<CombinedLoadStates> , который ожидает, пока загрузка не перейдет в состояние NotLoading или Error.
  • Теперь PagingData.empty() по умолчанию отправляет состояния NotLoading , если в его конструктор не переданы пользовательские LoadStates . Это отличается от существующего поведения, когда LoadStates не отправлялись при передаче в PagingDataAdapter или отправлялись состояния Loading при сборе в качестве LazyPagingItems . При сборе в качестве LazyPagingItems теперь также будет отображаться пустой список сразу после первоначального формирования.

Многоплатформенная совместимость Kotlin

Благодаря работе над проектом multiplatform-paging от CashApp, теперь Paging поставляется с артефактами, совместимыми с Kotlin Multiplatform.

  • paging-common все API Paging 3 перенесены в common , и теперь он совместим с JVM и iOS в дополнение к Android.
  • paging-testing перенесен код в common , и теперь он совместим с JVM и iOS в дополнение к Android.
  • paging-compose перенесла свой код в common и включает в себя артефакт для Android, что соответствует многоплатформенной поддержке androidx.compose .
  • paging-runtime , paging-guava , paging-rxjava2 и paging-rxjava3 останутся эксклюзивными для Android.

Версия 3.3.0-rc01

1 мая 2024 г.

Выпущена androidx.paging:paging-*:3.3.0-rc01 без изменений в Paging 3.3.0-beta01. Версия 3.3.0-rc01 содержит следующие коммиты .

Версия 3.3.0-beta01

3 апреля 2024 г.

Выпущена androidx.paging:paging-*:3.3.0-beta01 без существенных изменений. Версия 3.3.0-beta01 содержит следующие коммиты .

Версия 3.3.0-alpha05

20 марта 2024 г.

Выпущена версия androidx.paging:paging-*:3.3.0-alpha05 . Версия 3.3.0-alpha05 содержит следующие коммиты .

Изменения в API

  • Теперь для общего кода в постраничной навигации используется аннотация AndroidX @MainThread . ( I78f0d , b/327682438 )

Версия 3.3.0-alpha04

6 марта 2024 г.

Выпущена версия androidx.paging:paging-*:3.3.0-alpha04 . Версия 3.3.0-alpha04 содержит следующие коммиты .

Исправлены ошибки

  • Исправлены незначительные ошибки в документации, связанные с добавлением многоплатформенной совместимости Kotlin. ( aosp/2950785 )

Версия 3.3.0-alpha03

7 февраля 2024 г.

Выпущена версия androidx.paging:paging-*:3.3.0-alpha03 . Версия 3.3.0-alpha03 содержит следующие коммиты.

Новые функции

  • Класс PagingDataPresenter теперь является публичным. Теперь на основе PagingDataPresenter можно создавать многоплатформенные презентеры, не требуя внутренних API для работы с пейджингом или AsyncPagingDataDiffer из paging-runtime . ( Id1f74 , b/315214786 )
  • Добавлены новые вспомогательные методы LoadStates и CombinedLoadStates для проверки состояния LoadStates : Error или NotLoading . Также добавлен новый API, который ожидает завершения LoadStateFlow до тех пор, пока загрузка не перейдет в состояние NotLoading или Error. ( Id6c67 )

Изменение поведения

  • Теперь PagingData.empty() по умолчанию отправляет состояния NotLoading , если в его конструктор не переданы пользовательские LoadStates . Это отличается от существующего поведения, когда LoadStates не отправлялись при передаче в PagingDataAdapter или отправлялись состояния Loading при сборе в качестве LazyPagingItems . При сборе в качестве LazyPagingItems теперь также будет отображаться пустой список сразу после первоначального формирования. ( I4d11d , b/301833847 )

Версия 3.3.0-alpha02

20 сентября 2023 г.

Выпущена версия androidx.paging:paging-*:3.3.0-alpha02 . Версия 3.3.0-alpha02 содержит следующие коммиты.

Многоплатформенная совместимость Kotlin

Благодаря работе над проектом multiplatform-paging от CashApp, теперь Paging поставляется с артефактами, совместимыми с Kotlin Multiplatform. Это позволит нам избежать расхождений между двумя репозиториями и обеспечить их совместимость.

  • paging-common все API Paging 3 перенесены в common , и теперь он совместим с JVM и iOS в дополнение к Android.
  • paging-testing перенесен код в common , и теперь он совместим с JVM и iOS в дополнение к Android.
  • paging-compose перенесла свой код в common и включает в себя артефакт для Android, что соответствует многоплатформенной поддержке androidx.compose .
  • paging-runtime , paging-guava , paging-rxjava2 и paging-rxjava3 останутся эксклюзивными для Android.

Изменения в API

  • Общедоступный интерфейс Logger, предназначенный только для внутреннего использования, устарел ( I16e95 , b/288623117 ).

Внешний вклад

Версия 3.3.0-alpha01

20 сентября 2023 г.

  • Это первый многоплатформенный релиз библиотек androidx.paging. Эта версия содержит только артефакты *-jvm и *-android . Для macOS, iOS и Linux используйте версию 3.3.0-alpha02 .

Версия 3.2

Версия 3.2.1

6 сентября 2023 г.

Выпущена androidx.paging:paging-*:3.2.1 . Версия 3.2.1 содержит следующие коммиты.

Исправлены ошибки

  • Исправлена ​​ошибка, из-за которой API asSnapshot() артефакта Paging Testing зависал при передаче потока, построенного с использованием PagingData.from(List) поскольку asSnapshot() не содержал никакой информации о завершении загрузки (в отличие от перегрузки PagingData.from(List, LoadStates) ). Это обходное решение работает только для завершаемых потоков (например, flowOf(PagingData.from(...)) ). Для незавершаемых потоков (например, MutableStateFlow ) используйте перегрузку PagingData.from , которая предоставляет LoadStates ). ( I502c3 )
  • Теперь в Paging Compose используется внутренний механизм AndroidUiDispatcher.Main , гарантирующий доступность новых данных в том же кадре, что и завершение загрузки. ( Ia55af )

Версия 3.2.0

26 июля 2023 г.

Выпущена androidx.paging:paging-*:3.2.0 . Версия 3.2.0 содержит следующие коммиты.

Важные изменения по сравнению с версией 3.1.0

  • API Paging Compose стабилизировался и был интегрирован обратно в остальную часть Paging, где его версия теперь соответствует всем остальным артефактам Paging. Изменения по сравнению с версией 3.1.0 включают:
    • Поддержка предварительного просмотра списка фиктивных данных путем создания объекта PagingData.from(fakeData) и обертывания этого PagingData в MutableStateFlow (например MutableStateFlow(PagingData.from(listOf(1, 2, 3))) ). Передайте этот поток в составные объекты @Preview в качестве получателя для collectAsLazyPagingItems() для предварительного просмотра.
    • Поддержка всех ленивых макетов, таких как LazyVerticalGrid и HorizontalPager , а также пользовательских ленивых компонентов из библиотек Wear и TV. Это было достигнуто за счет новых методов расширения нижнего уровня LazyPagingItems itemKey и itemContentType , которые позволяют реализовать параметры key и contentType в стандартных API items , уже существующих для LazyColumn , LazyVerticalGrid , а также их эквивалентов в API, таких как HorizontalPager .
    • items(lazyPagingItems) и itemsIndexed(lazyPagingItems) , поддерживающие только LazyListScope , устарели.
  • Новый артефакт paging-testing , предоставляющий API, разработанные для модульного тестирования каждого слоя вашего приложения и его интеграции с системой постраничной навигации в изолированном режиме. Например, он включает в себя:
    • Класс TestPager , позволяющий проверить поведение вашей собственной реализации PagingSource независимо от Pager и реального пользовательского интерфейса.
    • API-интерфейсы asPagingSourceFactory позволяют преобразовывать либо Flow<List<Value>> , либо статический List<Value> в PagingSourceFactory , который можно передать в Pager в тестах.
    • Расширение Kotlin ` asSnapshot для Flow<PagingData<Value>> ` преобразует Flow<PagingData<Value>> непосредственно в ` List<Value> . asSnapshot lambda позволяет имитировать пользовательский интерфейс вашего приложения с помощью таких API, как scrollTo или appendScrollWhile чтобы вы могли проверить корректность снимка данных в любой точке вашего набора постраничных данных.
  • Добавлены стандартные логи для отображения отладочной информации о постраничной навигации на двух уровнях: VERBOSE и DEBUG . Включение логов осуществляется с помощью команды adb shell setprop log.tag.Paging [DEBUG|VERBOSE] . Это относится как к постраничной навигации с использованием представлений, так и к постраничной навигации с использованием Compose.
  • Добавлены конструкторы для PagingDataAdapter и AsyncPagingDataDiffer , которые принимают CoroutineContext вместо CoroutineDispatcher .
  • Добавлен новый функциональный интерфейс PagingSourceFactory , который обеспечивает более явный интерфейс API, чем предыдущие лямбда-функции () -> PagingSource . Эта фабрика может использоваться для создания экземпляра Pager.

Версия 3.2.0-rc01

21 июня 2023 г.

Выпущена androidx.paging:paging-*:3.2.0-rc01 . Версия 3.2.0-rc01 содержит следующие коммиты.

Внешний вклад

  • Спасибо Вейндану за вклад в перенос функции Paging из специфичных для Android/JVM областей. ( #553 , #554 , #555 , #559 )

Версия 3.2.0-beta01

7 июня 2023 г.

Выпущена версия androidx.paging:paging-*:3.2.0-beta01 . Версия 3.2.0-beta01 содержит следующие коммиты.

Пейджингом Создать

  • API Paging Compose официально достиг стабильного состояния. В связи с этим версия была обновлена ​​с 1.0.0-alpha20 и теперь соответствует версии всех остальных компонентов Paging.

Изменения в API

Версия 3.2.0-alpha06

24 мая 2023 г.

Выпущена версия androidx.paging:paging-*:3.2.0-alpha06 . Версия 3.2.0-alpha06 содержит следующие коммиты.

Новые функции

  • Добавлен новый функциональный интерфейс PagingSourceFactory , который обеспечивает более явный интерфейс API, чем существующие лямбда-функции () -> PagingSource . Эта фабрика может использоваться для создания экземпляра Pager . ( I33165 , b/280655188 )
  • Добавлен новый API paging-testing : List<Value>.asPagingSourceFactory() , позволяющий получить PagingSourceFactory , загружающий данные только из неизменяемого списка. Существующее расширение для Flow<List<Value>> следует по-прежнему использовать для тестирования с несколькими поколениями статических данных. ( Id34d1 , b/280655188 )

Изменения в API

  • Теперь все публичные API в paging-testing аннотированы аннотацией @VisibleForTesting , чтобы гарантировать, что эти API используются только в тестах. ( I7db6e )
  • API asSnapshot больше не требует передачи CoroutineScope . Теперь по умолчанию используется контекст, унаследованный от родительской области видимости. ( Id0a78 , b/282240990 )
  • Изменен порядок параметров конструктора TestPager , чтобы он интуитивно соответствовал порядку реальных параметров конструктора Pager ( I6185a ).
  • В paging-testing перенесено использование типа лямбда () -> PagingSource<Key, Value> на тип PagingSourceFactory<Key, Value> . ( I4a950 , b/280655188 )

Изменения в поведении

  • Для запуска тестов постраничной навигации asSnapshot больше не требуется основной диспетчер. Его установка больше не вносит никаких изменений в поведение тестов. ( IE56EA )

Версия 3.2.0-alpha05

3 мая 2023 г.

Выпущена версия androidx.paging:paging-*:3.2.0-alpha05 . Версия 3.2.0-alpha05 содержит следующие коммиты.

Изменения в API

  • API тестирования постраничной навигации asSnapshot теперь по умолчанию устанавливает параметр loadOperations в пустое значение лямбда-функции. Это позволяет вызывать asSnapshot без передачи каких-либо операций загрузки для получения данных из первоначальной загрузки обновления. ( Ied354 , b/277233770 )

Улучшения в документации

  • Внесены изменения в документацию по asPagingSourceFactory() , чтобы уточнить, что это метод расширения для Flow , который возвращает многократно используемую фабрику для генерации экземпляров PagingSource . ( I5ff4f , I705b5 )
  • Обновлена ​​документация по конструктору LoadResult.Page , чтобы уточнить необходимость переопределения itemsBefore и itemsAfter для поддержки перехода. ( Ied354 )

Внешние вклады

Версия 3.2.0-alpha04

8 февраля 2023 г.

Выпущена версия androidx.paging:paging-*:3.2.0-alpha04 . Версия 3.2.0-alpha04 содержит следующие коммиты.

Тестирование пейджинга

  • Артефакт paging-testing теперь содержит метод asPagingSourceFactory для создания pagingSourceFactory из Flow<List<Value>> , который будет передаваться в пейджер. Каждый List<Value>> генерируемый из Flow, представляет собой генерацию данных для пейджинга. Это упрощает тестирование пейджинга, например, для преобразований PagingData , путем имитации источника данных, из которого пейджер будет получать данные. ( I6f230 , b/235528239 )
  • Артефакт paging-testing был расширен новыми API, подходящими для проверки корректности данных, содержащихся в Flow<PagingData<T>> . Это можно использовать, например, для проверки правильности выходных данных Flow<PagingData<T>> из слоя ViewModel.

    Это делается с помощью расширения Kotlin asSnapshot для Flow<PagingData<Value>> , которое преобразует Flow<PagingData<Value>> в прямой List<Value> . Лямбда-функция asSnapshot позволяет имитировать пользовательский интерфейс вашего приложения с помощью таких API, как scrollTo или appendScrollWhile таким образом, чтобы это было повторяемым и согласованным способом, позволяющим проверять правильность снимка данных в любой момент времени в вашем наборе постраничных данных.

    // Create your ViewModel instance
    val viewModel = 
    // Get the Flow of PagingData from the ViewModel
    val data< Flow<PagingData<String>> = viewModel.data
    val snapshot: List<String> = data.asSnapshot {
      // Each operation inside the lambda waits for the data to settle before continuing
      scrollTo(index = 50)
    
      // While you can’t view the items within the asSnapshot call,
      // you can continuously scroll in a direction while some condition is true
      // i.e., in this case until you hit a placeholder item
      appendScrollWhile {  item: String -> item != Header 1 }
    }
    // With the asSnapshot complete, you can now verify that the snapshot
    // has the expected 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-alpha03

24 октября 2022 г.

Выпущена версия androidx.paging:paging-*:3.2.0-alpha03 . Версия 3.2.0-alpha03 содержит следующие коммиты.

Тестирование пейджинга

В этом релизе представлен новый артефакт: paging-testing . Этот артефакт предоставляет API, разработанные для модульного тестирования каждого слоя вашего приложения и его интеграции с Paging в изолированном режиме.

Например, в этот первый релиз включен класс TestPager , который позволяет проверять поведение вашей собственной реализации PagingSource независимо от Pager и реального пользовательского интерфейса, которые обычно необходимы для имитации сквозной интеграции Paging.

TestPager следует рассматривать как подделкутестовый двойник , который имитирует реальную реализацию Pager , предоставляя при этом упрощенную поверхность API для тестирования PagingSource . Эти API являются suspend API и должны запускаться в рамках runTest , как описано в руководстве по тестированию сопрограмм Kotlin на Android .

Пример использования этих API можно найти в тестах room-paging , которые были переработаны для использования TestPager .

Изменения в API

  • Обеспечивает удобную итерацию по LoadResult.Page.data с помощью LoadResult.Page.iterator() . Это косвенно позволяет использовать метод flatten из стандартной библиотеки Kotlin при передаче List<LoadResult.Page> , например, со свойством pages объекта PagingState , которое передается методу PagingSource.getRefreshKey . ( IE0718 )

Версия 3.2.0-alpha02

10 августа 2022 г.

Выпущена версия androidx.paging:paging-*:3.2.0-alpha02 . Версия 3.2.0-alpha02 содержит следующие коммиты.

Новые функции

  • Теперь функция Paging предоставляет журналы через классы AsyncPagingDataDiffer или PagingDataAdapter , позволяющие отображать отладочную информацию, собранную из PagingData .
  • Включить ведение журналов можно с помощью команды adb shell : adb shell setprop log.tag.Paging [DEBUG|VERBOSE]. ( b/235527159 )

Исправлены ошибки

  • Исправлена ​​ошибка отсутствия конструктора PagingDataDiffer при использовании paging-common:3.2.0-alpha01 с paging-runtime:3.1.1 или более старыми версиями. ( b/235256201 )

Версия 3.2.0-alpha01

1 июня 2022 г.

Выпущена версия androidx.paging:paging-*:3.2.0-alpha01 . Версия 3.2.0-alpha01 содержит следующие коммиты.

Изменения в API

  • Добавлены конструкторы для PagingDataAdapter и AsyncPagingDataDiffer , которые принимают CoroutineContext вместо CoroutineDispatcher . ( Idc878 )
  • По умолчанию PagingData.from() и PagingData.empty() больше не влияют на CombinedLoadStates на стороне презентера. Добавлена ​​новая перегрузка, позволяющая передавать sourceLoadStates и remoteLoadStates в эти конструкторы, чтобы сохранить существующее поведение установки LoadStates в полностью терминальное состояние (т.е. NotLoading(endOfPaginationReached = false) ), с возможностью включения удаленных состояний при необходимости. Если LoadStates не передаются, то предыдущие значения CombinedLoadStates будут сохранены на стороне презентера при получении статического объекта PagingData . ( Ic3ce5 , b/205344028 )

Исправлены ошибки

  • Результат PagingSource.getRefreshKey() теперь корректно имеет приоритет над initialKey в тех случаях, когда он должен был бы вернуть null, но был установлен ненулевой initialKey . ( Ic9542 , b/230391606 )

Внешний вклад

  • Обновлен API :compose:ui:ui-test (updateApi) в связи с миграцией библиотеки test-coroutines-lib ( I3366d ).

Версия 3.1

Версия 3.1.1

9 марта 2022 г.

Выпущена androidx.paging:paging-*:3.1.1 . Версия 3.1.1 содержит следующие коммиты.

Исправлены ошибки

  • Удалены промежуточные события LoadState.NotLoading между поколениями, которые были некорректно добавлены методом .cachedIn() . Это изменение значительно упрощает реагирование на изменения LoadState , удаляя избыточные события LoadState.NotLoading , которые возникали между повторными попытками загрузки, при обновлении или во время аннулирования.

Версия 3.1.0

17 ноября 2021 г.

Выпущена androidx.paging:paging-*:3.1.0 . Версия 3.1.0 содержит следующие коммиты.

Важные изменения с версии 3.0.0

  • API-интерфейсы Flow<PagingData>.observable и Flow<PagingData>.flowable больше не являются экспериментальными.
  • Изменения в поведении функции LoadState :
    • Теперь endOfPaginationReached всегда false для LoadType.REFRESH как для PagingSource , так и RemoteMediator
    • Теперь LoadStates из Paging ожидают корректных значений от PagingSource и RemoteMediator , прежде чем передавать их дальше. Новые поколения PagingData теперь всегда будут корректно начинаться с состояния Loading для обновления, вместо того чтобы в некоторых случаях некорректно сбрасываться в состояние NotLoading .
    • .loadStateFlow и .addLoadStateListener в API презентера больше не отправляют избыточное начальное значение CombinedLoadStates , в котором состояния посредника всегда установлены в null
  • Теперь аннулирование данных прошлых поколений происходит автоматически при аннулировании/создании новых поколений. Использование .collectLatest для Flow<PagingData> больше не требуется, хотя его по-прежнему рекомендуется использовать.
  • В качестве нового возвращаемого типа для PagingSource.load добавлен PagingSource.LoadResult.Invalid , который заставляет Paging отбрасывать все ожидающие или будущие запросы на загрузку данных в этот PagingSource и аннулировать его. Этот возвращаемый тип предназначен для обработки потенциально некорректных или устаревших данных, которые могут быть возвращены из базы данных или сети.
  • Добавлены API-интерфейсы презентера .onPagesPresented и .addOnPagesUpdatedListener , которые срабатывают синхронно по мере отображения страниц в пользовательском интерфейсе. Обновление страниц может происходить в следующих сценариях:
    • Первоначальная загрузка нового поколения PagingData завершается независимо от того, содержит ли новое поколение какие-либо изменения в отображаемых элементах. То есть, если новое поколение завершает первоначальную загрузку без обновлений, поскольку список остается точно таким же, это все равно вызовет этот обратный вызов.
    • Страница вставляется, даже если вставленная страница не содержит новых элементов.
    • Страница перетаскивается, даже если она была пустой.

Версия 3.1.0-rc01

3 ноября 2021 г.

Выпущена androidx.paging:paging-*:3.1.0-rc01 . Версия 3.1.0-rc01 содержит следующие коммиты.

Исправлены ошибки

  • Исправлена ​​ошибка состояния гонки и утечки памяти в методе .cachedIn() в случаях, когда Paging отправлял несколько событий загрузки нижестоящим потоком, когда не было наблюдателей, или когда наблюдатель переключался на новые данные PagingData. ( Ib682e )

Версия 3.1.0-beta01

13 октября 2021 г.

Выпущена версия androidx.paging:paging-*:3.1.0-beta01 . Версия 3.1.0-beta01 содержит следующие коммиты.

Исправлены ошибки

  • Исправлена ​​ошибка, из-за которой многочисленные быстрые обращения к элементам могли приводить к их удалению для учета в параметре prefetchDistance, что вызывало зависание загрузки страницы. Это особенно актуально, когда множество элементов отображаются одновременно в порядке, который отдает приоритет загрузке относительно направления прокрутки пользователя. Теперь обращения к этим элементам буферизуются и синхронно приоритезируются, чтобы предотвратить их удаление. ( aosp/1833273 )

Версия 3.1.0-alpha04

29 сентября 2021 г.

Выпущена версия androidx.paging:paging-*:3.1.0-alpha04 . Версия 3.1.0-alpha04 содержит следующие коммиты.

Изменения в API

  • API-интерфейсы Flow<PagingData>.observable и Flow<PagingData>.flowable больше не являются экспериментальными. ( Ie0bdd )

Исправлены ошибки

  • Для LoadStates endOfPaginationReached теперь всегда равно false для LoadType.REFRESH . Ранее endOfPaginationReached могло быть true для RemoteMediator REFRESH , но не для PagingSource. Теперь это поведение зафиксировано на уровне false , поскольку REFRESH никогда не является завершающим этапом, и теперь это задокументировано как часть контракта API в LoadStates. При принятии решения о завершении пагинации всегда следует учитывать либо направление APPEND, либо направление PREPEND. ( I047b6 )
  • Теперь события LoadStates из Paging ожидают корректных значений как от PagingSource, так и от RemoteMediator, прежде чем передавать их дальше между поколениями. Это предотвращает отправку NotLoading новыми поколениями PagingData в CombinedLoadStates.source.refresh, если оно уже было Loading; новые поколения PagingData теперь всегда будут корректно начинать с Loading для состояния обновления, вместо того чтобы сначала некорректно сбрасываться на NotLoading в некоторых случаях.

    Теперь аннулирование данных прошлых поколений происходит автоматически при аннулировании/создании новых поколений. Использование метода .collectLatest для Flow<PagingData> больше не требуется, хотя его по-прежнему настоятельно рекомендуется использовать. ( I0b2b5 , b/177351336 , b/195028524 )

  • .loadStateFlow и .addLoadStateListener в API презентера больше не отправляют избыточно начальное значение CombinedLoadStates , в котором состояния посредника всегда установлены в null , а состояния источника — в NotLoading(endOfPaginationReached = false) . Это означает, что:

    1. При использовании RemoteMediator состояния посредника всегда будут заполнены.
    2. Регистрация нового слушателя loadState или нового сборщика в .loadStateFlow больше не будет немедленно выдавать текущее значение, если он не получил реального CombinedLoadStates от PagingData . Это может произойти, если сборщик или слушатель запускается до того, как будет отправлен PagingData . ( I1a748 )

Версия 3.1.0-alpha03

21 июля 2021 г.

Выпущена версия androidx.paging:paging-*:3.1.0-alpha03 . Версия 3.1.0-alpha03 содержит следующие коммиты.

Изменения в API

  • В метод PagingSource добавлен третий тип возвращаемого значения LoadResult: LoadResult.Invalid. Если метод PagingSource.load возвращает LoadResult.Invalid, постраничная обработка отбрасывает загруженные данные и делает PagingSource недействительным. Этот тип возвращаемого значения предназначен для обработки потенциально недействительных или устаревших данных, которые могут быть возвращены из базы данных или сети.

    Например, если в базовую базу данных производится запись, но PagingSource не обновляется вовремя, он может возвращать противоречивые результаты, если его реализация зависит от неизменяемости базового набора данных, из которого он загружается (например, реализации баз данных в стиле LIMIT OFFSET). В этом сценарии рекомендуется проверять обновление после загрузки и возвращать LoadResult.Invalid, что заставляет PagingSource отбрасывать все ожидающие или будущие запросы на загрузку к этому PagingSource и обновлять его.

    Этот тип возвращаемого значения также поддерживается API Paging2, использующим LivePagedList или RxPagedList. При использовании PagingSource с API PagedList Paging2, PagedList немедленно отсоединяется, что прекращает дальнейшие попытки загрузки данных в этот PagedList и приводит к аннулированию PagingSource.

    LoadResult — это закрытый класс, что означает, что это изменение несовместимо с исходным кодом, так что в случаях, когда результаты PagingSource.load используются напрямую, обработка LoadResult.Invalid должна происходить во время компиляции. Например, пользователям Kotlin, использующим exhaustive-when для проверки типа возвращаемого значения, придется добавить проверку на недопустимый тип. ( Id6bd3 , b/191806126 , b/192013267 )

Исправлены ошибки

  • Добавленные с помощью PagingSource.registerInvalidatedCallback или DataSource.addInvalidatedCallback обработчики событий аннулирования теперь автоматически срабатывают, если они были зарегистрированы для PagingSource/DataSource, который уже был недействителен. Это устраняет состояние гонки, из-за которого Paging Source отбрасывал сигналы аннулирования и зависал при предоставлении источника, который уже был недействителен во время первоначальной загрузки. Кроме того, обработчики событий аннулирования теперь корректно удаляются после срабатывания, поскольку гарантируется, что они будут вызваны не более одного раза. ( I27e69 )
  • Отправка начального значения-заполнителя (InitialPagedList) из вновь созданного потока PagedList, например, LivePagedListBuilder или RxPagedListBuilder, больше не приведет к очистке ранее загруженных данных.

Версия 3.1.0-alpha02

1 июля 2021 г.

Выпущена версия androidx.paging:paging-*:3.1.0-alpha02 . Версия 3.1.0-alpha02 содержит следующие коммиты.

Новые функции

  • Добавлены API-интерфейсы для обработки событий onPagesPresented и представления потока, которые срабатывают сразу после обновления отображаемых страниц в пользовательском интерфейсе.

    Поскольку эти обновления синхронны с пользовательским интерфейсом, вы можете вызывать методы адаптера, такие как `.snapshot`, `.getItemCount`, чтобы проверить состояние после применения обновления. Обратите внимание, что вызов метода `.snapshot()` был оставлен явным, поскольку его выполнение при каждом обновлении может быть затратным.

    Обновление страницы может происходить в следующих случаях:

    • Первоначальная загрузка нового поколения PagingData завершается независимо от того, содержит ли новое поколение какие-либо изменения в отображаемых элементах. То есть, если новое поколение завершает первоначальную загрузку без обновлений, поскольку список остается точно таким же, это все равно вызовет этот обратный вызов.
    • Страница вставляется, даже если вставленная страница не содержит новых элементов.
    • Страница перетаскивается, даже если она была пустой ( I272c9 , b/189999634 )

Исправлены ошибки

  • При обращении к PagedList.dataSource из начального значения, полученного с помощью LivePagedList или RxPagedList, больше не будет некорректно возникать исключение IllegalStateException ( I96707 ).

Версия 3.1.0-alpha01

2 июня 2021 г.

Выпущена версия androidx.paging:paging-*:3.1.0-alpha01 . Версия 3.1.0-alpha01 содержит следующие коммиты.

Изменения в API

  • Классы, предоставляемые paging-rxjava3 теперь находятся в пакете androidx.paging.rxjava3 , чтобы избежать конфликтов с paging-rxjava2 ( Ifa7f6 ).

Исправлены ошибки

  • Исправлена ​​ошибка, из-за которой функция Paging иногда отправляла в RecyclerView события, не выполняющие никаких действий, что могло привести к преждевременному срабатыванию некоторых обработчиков событий. ( Ic507f , b/182510751 )

Внешний вклад

  • Добавлены устаревшие API совместимости PagedList в артефакт rxjava3 ( Id1ce2 , b/182497591 )

Paging Compose Версия 1.0.0

Версия 1.0.0-alpha20

24 мая 2023 г.

Выпущена версия androidx.paging:paging-compose:1.0.0-alpha20 . Версия 1.0.0-alpha20 содержит следующие коммиты.

Новые функции

  • Теперь Paging Compose поддерживает предварительный просмотр списка фиктивных данных путем создания объекта PagingData.from(fakeData) и обертывания этого PagingData в MutableStateFlow (например, MutableStateFlow(PagingData.from(listOf(1, 2, 3))) ). Используя эти данные в качестве входных данных для вашего @Preview , вызовы collectAsLazyPagingItems() будут предоставлять LazyPagingItems с возможностью предварительного просмотра. ( I8a78d , b/194544557 )

Исправлены ошибки

  • Кэшированные данные из pager.flow.cachedIn , собранные в LazyPagingItems , теперь будут доступны сразу после восстановления состояния без необходимости асинхронной сборки. Это означает, что кэшированные данные будут готовы к отображению сразу после первоначального формирования данных после восстановления состояния. ( I97a60 , b/177245496 )

Версия 1.0.0-alpha19

3 мая 2023 г.

Выпущена версия androidx.paging:paging-compose:1.0.0-alpha19 . Версия 1.0.0-alpha19 содержит следующие коммиты.

Поддержка всех ленивых макетов.

Ранее Paging Compose предоставлял пользовательские items и расширения itemsIndexed для LazyListScope , что означало невозможность использования Paging Compose с другими ленивыми макетами, такими как LazyVerticalGrid , HorizontalPager или другими пользовательскими ленивыми компонентами, предоставляемыми библиотеками Wear и TV. Устранение этой негибкости является основным обновлением в этом релизе.

To support more lazy layouts, we needed to build out APIs at a different layer - rather than providing a custom items API for each lazy layout, Paging Compose now provides slightly lower level extension methods on LazyPagingItems in itemKey and itemContentType . These APIs focus on helping you implement the key and contentType parameters to the standard items APIs that already exist for LazyColumn , LazyVerticalGrid as well as their equivalents in APIs like HorizontalPager . ( Ifa13b , Ib04f0 , b/259385813 )

This means that supporting a LazyVerticalGrid would look like:

// This part is unchanged
val lazyPagingItems = pager.collectAsLazyPagingItems()

LazyVerticalGrid(columns = GridCells.Fixed(2)) {
  // Here we use the standard items API
  items(
    count = lazyPagingItems.itemCount,
    // Here we use the new itemKey extension on LazyPagingItems to
    // handle placeholders automatically, ensuring you only need to provide
    // keys for real items
    key = lazyPagingItems.itemKey { it.uniqueId },
    // Similarly, itemContentType lets you set a custom content type for each item
    contentType = lazyPagingItems.itemContentType { "contentType" }
  ) { index ->
    // As the standard items call provides only the index, we get the item
    // directly from our lazyPagingItems
    val item = lazyPagingItems[index]
    PagingItem(item = item)
  }
}

For more examples of using these new APIs, please see our samples .

While these changes do make the LazyColumn and LazyRow examples a few lines longer, we felt that consistency across all lazy layouts was an important factor for those using Paging Compose going forward. For that reason, the existing extensions to LazyListScope have now been deprecated. ( I0c459 , I92c8f , b/276989796 )

Изменения в API

  • To ease the migration to the new APIs, the items and itemsIndexed extension functions on LazyListScope now support a contentType parameter, mirroring the support in the new APIs. ( Ib1918 , b/255283378 )

Обновления зависимостей

  • Paging Compose has updated its dependency from Compose 1.0.5 to Compose 1.2.1. ( Ib1918 , b/255283378 )

Version 1.0.0-alpha18

8 февраля 2023 г.

androidx.paging:paging-compose:1.0.0-alpha18 is released with no changes. Version 1.0.0-alpha18 contains these commits.

Version 1.0.0-alpha17

24 октября 2022 г.

androidx.paging:paging-compose:1.0.0-alpha17 is released. Version 1.0.0-alpha17 contains these commits.

Новые функции

Version 1.0.0-alpha16

10 августа 2022 г.

androidx.paging:paging-compose:1.0.0-alpha16 is released. Version 1.0.0-alpha16 contains these commits.

Новые функции

  • Paging now provides logs via the LazyPagingItems class to expose debugging information collected from PagingData.
  • The logs can be enabled via the adb shell command adb shell setprop log.tag.Paging [DEBUG|VERBOSE] . ([b/235527159}(https://issuetracker.google.com/issues/235527159))

Исправлены ошибки

  • Fixed the missing PagingDataDiffer constructor error when using paging-compose:1.0.0-alpha15 with paging-common:3.1.1 or older.( b/235256201 , b/239868768 )

Version 1.0.0-alpha15

1 июня 2022 г.

androidx.paging:paging-compose:1.0.0-alpha15 is released. Version 1.0.0-alpha15 contains these commits.

Изменения в API

  • Added constructors for PagingDataAdapter and AsyncPagingDataDiffer which accept CoroutineContext instead of CoroutineDispatcher . ( Idc878 )

Исправлены ошибки

  • LazyPagingItems now sets the initial loadState to have a LoadState.Loading refresh. ( I55043 , b/224855902 )

Version 1.0.0-alpha14

13 октября 2021 г.

androidx.paging:paging-compose:1.0.0-alpha14 is released. Version 1.0.0-alpha14 contains these commits.

Version 1.0.0-alpha13

29 сентября 2021 г.

androidx.paging:paging-compose:1.0.0-alpha13 is released. Version 1.0.0-alpha13 contains these commits.

Изменения в API

  • LazyPagingItems.snapshot() function was replaced with LazyPagingItems.itemSnapshotList property ( Ie2da8 )
  • Deprecated LazyPagingItems.getAsState() was removed ( Ie65e4 )

Version 1.0.0-alpha12

21 июля 2021 г.

androidx.paging:paging-compose:1.0.0-alpha12 is released. Version 1.0.0-alpha12 contains these commits.

Изменения в API

  • items(lazyPagingItems) and itemsIndexed(lazyPagingItems) used to connect Paging with LazyColumn/Row now accept the option key param which allows you to specify a stable key representing the item. You can read more about keys here. ( I7986d )
  • Function lazyPagingItems.getAsState(index) is now deprecated. Use lazyPagingItems[index] instead. ( I086cb , b/187339372 )

Version 1.0.0-alpha11

30 июня 2021 г.

androidx.paging:paging-compose:1.0.0-alpha11 is released. Version 1.0.0-alpha11 contains these commits.

Version 1.0.0-alpha10

2 июня 2021 г.

androidx.paging:paging-compose:1.0.0-alpha10 is released. Version 1.0.0-alpha10 contains these commits.

Version 1.0.0-alpha09

18 мая 2021 г.

androidx.paging:paging-compose:1.0.0-alpha09 is released. Version 1.0.0-alpha09 contains these commits.

Исправлены ошибки

  • LazyPagingItems' itemCount and item getter are now observable which allows it to be used with LazyVerticalGrid as well ( Ie2446 , b/171872064 , b/168285687 )

Compose Compatibility

  • androidx.paging:paging-compose:1.0.0-alpha09 is only compatible with Compose version 1.0.0-beta07 and above.

Версия 1.0.0-alpha08

24 февраля 2021 г.

androidx.paging:paging-compose:1.0.0-alpha08 is released. Version 1.0.0-alpha08 contains these commits.

Updated to integrate with Compose 1.0.0-beta01.

Версия 1.0.0-alpha07

10 февраля 2021 г.

androidx.paging:paging-compose:1.0.0-alpha07 is released. Version 1.0.0-alpha07 contains these commits.

Updated to integrate with Compose alpha12.

Версия 1.0.0-alpha06

28 января 2021 г.

androidx.paging:paging-compose:1.0.0-alpha06 is released. Version 1.0.0-alpha06 contains these commits.

Исправлены ошибки

Updated to depend on Compose 1.0.0-alpha11.

Версия 1.0.0-alpha05

13 января 2021 г.

androidx.paging:paging-compose:1.0.0-alpha05 is released. Version 1.0.0-alpha05 contains these commits.

Updated to depend on Compose 1.0.0-alpha10.

Версия 1.0.0-alpha04

16 декабря 2020 г.

androidx.paging:paging-compose:1.0.0-alpha04 is released. Version 1.0.0-alpha04 contains these commits.

Исправлены ошибки

  • Updated the convenience properties, CombinedLoadStates.refresh , CombinedLoadStates.prepend , CombinedLoadStates.append to only transition from Loading to NotLoading after both mediator and source load states are NotLoading to ensure the remote update has been applied. ( I65619 )

Версия 1.0.0-alpha03

2 декабря 2020 г.

androidx.paging:paging-compose:1.0.0-alpha03 is released. Version 1.0.0-alpha03 contains these commits.

  • Updated to match Compose 1.0.0-alpha08.

Версия 1.0.0-alpha02

11 ноября 2020 г.

androidx.paging:paging-compose:1.0.0-alpha02 is released. Version 1.0.0-alpha02 contains these commits.

Изменения в API

  • Added .peek() , .snapshot() , .retry() and .refresh() methods to LazyPagingItem s which expose the same functionality available in AsyncPagingDataDiffer / PagingDataAdapter ( Iddfe8 , b/172041660 )

Версия 1.0.0-alpha01

28 октября 2020 г.

androidx.paging:paging-compose:1.0.0-alpha01 is released. Version 1.0.0-alpha01 contains these commits.

Новые функции

The paging-compose artifact provides integration between The Paging Library and Jetpack Compose . A simple usage example:

  @Composable
  @OptIn(ExperimentalLazyDsl::class)
  fun ItemsDemo(flow: Flow<PagingData<String>>) {
      val lazyPagingItems = flow.collectAsLazyPagingItems()
      LazyColumn {
          items(lazyPagingItems) {
              Text("Item is $it")
          }
      }
  }

Версия 3.0.1

Версия 3.0.1

21 июля 2021 г.

androidx.paging:paging-*:3.0.1 is released. Version 3.0.1 contains these commits.

Исправлены ошибки

  • Accessing PagedList.dataSource from the initial value produced by LivePagedList or RxPagedList will no longer incorrectly throw an IllegalStateException ( I96707 )

Версия 3.0.0

Версия 3.0.0

5 мая 2021 г.

androidx.paging:paging-*:3.0.0 is released. Version 3.0.0 contains these commits.

Major features of 3.0.0

The majority of the existing API from Paging 2.xx has been deprecated in favor of the new Paging 3 APIs to bring the following improvements:

  • First-class support for Kotlin coroutines and Flow
  • Support for cancellation
  • Built-in load state and error signals
  • Retry + refresh functionality
  • All three DataSource subclasses have been combined into a unified PagingSource class
  • Custom page transformations including a built-in one for adding separators
  • Loading state headers and footers

Version 3.0.0-rc01

21 апреля 2021 г.

androidx.paging:paging-*:3.0.0-rc01 is released. Version 3.0.0-rc01 contains these commits.

Исправлены ошибки

  • Fixed an issue where Paging would sometimes send no-op differ events to RecyclerView, which could cause certain listeners to trigger early. ( Ic507f , b/182510751 )

Version 3.0.0-beta03

24 марта 2021 г.

androidx.paging:paging-*:3.0.0-beta03 is released. Version 3.0.0-beta03 contains these commits.

Исправлены ошибки

  • We've revamped how placeholders are handled when list is reloaded to prevent unexpected jumps in RecyclerView. See NullPaddedDiffing.md for details. ( If1490 , b/170027529 , b/177338149 )
  • The various PagedList builders (old compatibility path) no longer incorrectly synchronously call DataSource.Factory.create() on Main thread when .build() is called. ( b/182798948 )

Version 3.0.0-beta02

10 марта 2021 г.

androidx.paging:paging-*:3.0.0-beta02 is released. Version 3.0.0-beta02 contains these commits.

Изменения в API

  • Rx3 extensions now correctly propagate @ExperimentalCoroutinesApi Opt-In requirement. Previously they were marked on the @get method, which is ignored by the Kotlin Compiler due to: https://youtrack.jetbrains.com/issue/KT-45227 ( I5733c )

Исправлены ошибки

  • Enforce restrictions on public usage of experimental APIs ( I6aa29 , b/174531520 )
  • Fixed a bug causing PagingState to always be null when remote refresh is called.
  • Fixed a bug where empty pages returned by PagingSource could prevent Paging from fetching again to fulfill prefetchDistance causing Paging to get “stuck”.

Version 3.0.0-beta01

10 февраля 2021 г.

androidx.paging:paging-*:3.0.0-beta01 is released. Version 3.0.0-beta01 contains these commits.

Изменения в API

  • Rx2 and Rx3 wrappers now expose the experimental annotation it depends on. If you are using the Rx compat wrappers in paging-rxjava2 or paging-rxjava3, you will now need to annotate usages with @OptIn(ExperimentalCoroutinesApi::class) ( Ib1f9d )

Исправлены ошибки

  • Fixed IndexOutOfBoundsException: Inconsistency detected sometimes thrown when using v2 DataSource APIs through compatibility paths
  • isInvalid call during initialization of DataSource when used via compatibility paths are now correctly launched on fetchDispatcher instead of on the main thread. This fixes an IllegalStateException due to Db access on the main thread when using Room's PagingSource implementation.

Version 3.0.0-alpha13

27 января 2021 г.

androidx.paging:paging-*:3.0.0-alpha13 is released. Version 3.0.0-alpha13 contains these commits.

Изменения в API

  • PagingSource.getRefreshKey is no longer optional to implement, it is now an abstract function without a default implementation. Migrating users can either continue returning the default implementation, which simply returns null , but getRefreshKey() should have a real implementation returning a key based on user's current scroll position that allows Paging to continue loading centered around the viewport via PagingState.anchorPosition if possible. ( I4339a )
  • InvalidatingPagingSourceFactory is now a final class ( Ia3b0a )
  • Allow configuration of terminal separator (header / footer) behavior with an additional optional SeparatorType parameter. The two options are:
    • FULLY_COMPLETE - existing behavior; wait for both PagingSource and RemoteMediator to mark endOfPaginationReached before adding terminal separators. If RemoteMediator is not used, remote loadState is ignored. This is primarily useful if you only want to show section separators when the section is fully loaded, including fetching from remote source eg, network.
    • SOURCE_COMPLETE - only wait for PagingSource to mark endOfPaginationReached even if RemoteMediator is used. This allows headers and footers to be presented synchronously with the initial load, which prevents users from needing to scroll to see terminal separators. ( Ibe993 , b/174700218 )

Исправлены ошибки

  • Fixed a rare memory leak which happens when a PagingSource is invalidated before PageFetcher can even begin to start loading from it. ( I9606b , b/174625633 )

Version 3.0.0-alpha12

13 января 2021 г.

androidx.paging:paging-*:3.0.0-alpha12 is released. Version 3.0.0-alpha12 contains these commits.

Изменения в API

  • InvalidatingPagingSourceFactory is no longer an abstract class as it never had any abstract methods. ( I4a8c4 )
  • Added an overload of .cachedIn() that accepts ViewModel instead of Lifecycle or CoroutineScope for Java users. ( I97d81 , b/175332619 )
  • Allow Java callers to use PagingData transform operations in an async way, by accepting an Executor into transform operator arguments. All of the -Sync transform operators have the -Sync suffix removed now, and Kotlin Coroutine users will need to disambiguate by calling the extension function which accepts a suspending block instead. All PagingData transformation operators have been moved to extensions under the static PagingDataTransforms class. Java users will need to call them via static helpers eg, PagingDataTransforms.map(pagingData, transform) For Kotlin users, the syntax is the same but you'll need to import the function. ( If6885 , b/172895919 )

Исправлены ошибки

  • Fixed a bug where RemoteMediator.load() would not be called during adapter.refresh() if the end of pagination had already been reached.

Version 3.0.0-alpha11

16 декабря 2020 г.

androidx.paging:paging-*:3.0.0-alpha11 is released. Version 3.0.0-alpha11 contains these commits.

Новые функции

  • Saved state support added for the following basic use cases (full support, especially in the layered source case is still a work in progress):
    • flow is cached and application is not killed (eg flow is cached in a view model and activity is recreated in process)
    • paging source is counted, placeholders are enabled and the layout is not staggered.

Изменения в API

  • PagingSource.getRefreshKey() is now stable API ( I22f6f , b/173530980 )
  • PagingSource.invalidate is no longer an open function. If you need to get notified when invalidation happens, consider calling the registerInvalidatedCallback method instead of overriding invalidate. ( I628d9 , b/173029013 , b/137971356 )
  • Pager now has a single experimental constructor alongside its regular constructors, rather than leaking experimental APIs into non-experimental public API via the opt-in annotation. ( I9dc61 , b/174531520 )
  • Updated the convenience properties, CombinedLoadStates.refresh , CombinedLoadStates.prepend , CombinedLoadStates.append to only transition from Loading to NotLoading after both mediator and source load states are NotLoading to ensure the remote update has been applied. ( I65619 )
  • LoadParams.pageSize has been removed (it was already deprecated). The recommendation is to use LoadParams.loadSize in your PagingSource.

    LoadParams.loadSize is always equal to the PagingConfig.pageSize except for the initial load call where it is equal to the PagingConfig.initialLoadSize .

    If you are testing your Paging2 DataSource without using a Pager or PagedList, pageSize may not match the PagingConfig.pageSize if you are also setting initialLoadSize . If it is important for your tests, try using a Pager/PagedList instead which will internally set the correct PageSize for your DataSource load methods. ( I98ac7 , b/149157296 )

Исправлены ошибки

  • Fixed a crash due to IllegalStateException when using separators with PagingConfig.maxSize set. ( I0ed33 , b/174787528 )
  • Fixed a bug where load state for PREPEND / APPEND would not update to NotLoading(endOfPaginationReached = true) immediately after initial load if RemoteMediator was set ( I8cf5a )
  • Fixed a bug where presenter-side APIs such as .snapshot(), .peek(), etc., would return the previous (out-of-date) list within ListUpdateCallback updates.
  • Fixed a bug where Separators operators would not add headers or footers when used with RemoteMediator
  • Fixed a bug where LoadState updates to NotLoading for RemoteMediator would get stuck in the Loading state
  • Fixed a bug where the Paging2.0 compatibility API, .asPagingSourceFactory() , could cause the backing DataSource to be initialized on the incorrect CoroutineDispatcher. This resolves a crash and possible ANR cases, especially when using Room's current implementation of PagingSource, which uses this compatibility path.

Version 3.0.0-alpha10

2 декабря 2020 г.

androidx.paging:paging-*:3.0.0-alpha10 is released. Version 3.0.0-alpha10 contains these commits.

Изменения в API

  • The deprecated dataRefreshFlow and dataRefreshListener APIs have been removed as they are redundant with loadStateFlow / Listener updates. For those migrating, the loadStateFlow equivalent is:

    loadStateFlow.distinctUntilChangedBy { it.refresh }
        .filter { it.refresh is NotLoading }
    

    ( Ib5570 , b/173530908 )

Исправлены ошибки

  • endOfPaginationReached for RemoteMediator REFRESH now correctly propagate to LoadState updates and prevents remote APPEND and PREPEND from triggering. ( I94a3f , b/155290248 )
  • Presenting an empty list either due to empty initial page or heavy filtering will no longer prevent Paging from kicking off PREPEND or APPEND loads. ( I3e702 , b/168169730 )
  • Fixed an issue where getRefreshKey does not get called on subsequent generations of PagingSource when invalidations occur rapidly. ( I45460 , b/170027530 )

Внешний вклад

  • A new abstract class InvalidatingPagingSourceFactory has been added with an .invalidate() API that forwards invalidate to all of the PagingSources it emits. Thanks to @claraf3 ! ( Ie71fc , b/160716447 )

Известные проблемы

  • Headers and footers from the .insertSeparators() transform may not appear immediately when using RemoteMediator b/172254056
  • Using RemoteMediator can cause remote LoadState to get stuck if invalidation and PagingSource.load(LoadParams.Refresh(...)) completes before RemoteMediator.load() returns b/173717820

Version 3.0.0-alpha09

11 ноября 2020 г.

androidx.paging:paging-*:3.0.0-alpha09 is released. Version 3.0.0-alpha09 contains these commits.

Изменения в API

  • Fully deprecate dataRefreshFlow / Listener methods with a replaceWith clause. ( I6e2dd )

Исправлены ошибки

  • Fix for IllegalArgumentException being throw when using separators with RemoteMediator and an invalidate is triggered while a remote load that would return endOfPagination is still running ( I3a260 )

Version 3.0.0-alpha08

28 октября 2020 г.

androidx.paging:paging-*:3.0.0-alpha08 is released. Version 3.0.0-alpha08 contains these commits.

Изменения в API

  • The Kotlin / Java variants of DataSource.InvalidatedCallback have been combined by enabling SAM-conversions in Kotlin via functional interface (available in Kotlin 1.4). This also fixes a bug where the kotlin variant of invalidate callbacks were not called after transformed by .map or .mapByPage . ( I1f244 , b/165313046 )

Исправлены ошибки

  • Paging's interaction with ViewPager has been improved considerably. Specifically, Paging will no longer cancel a RemoteMediator#load call due to a page invalidation. It will also no longer make an append/prepend load request, if REFRESH is required , until REFRESH request completes successfully. ( I6390b , b/162252536 )
  • API lint check for MissingGetterMatchingBuilder is enabled for androidx ( I4bbea , b/138602561 )
  • Fixed a bug where .withLoadState* ConcatAdapter helpers would crash due to notifying RecyclerView from background thread ( I18bb5 , b/170988309 )
  • Fixed a bug where loading a very small non-empty page would sometimes prevent prefetch from triggering loads correctly. Iffda3 b/169259468

Version 3.0.0-alpha07

1 октября 2020 г.

androidx.paging:paging-*:3.0.0-alpha07 is released. Version 3.0.0-alpha07 contains these commits.

Изменения в API

  • Async PagingData Guava-based operators now accept an Executor as a param, to control execution context. ( Id4372 )

Исправлены ошибки

  • Fixed IndexOutOfBounds exception thrown in RemoteMediator due to a race condition. ( I00b7f , b/165821814 )
  • Fixed a race condition in DataSource -> PagingSource conversion that could cause the resulting PagingSource to ignore invalidation signals from DataSource.
  • Fixed an issue in page fetchin logic that would sometimes cause it to fail to pick up new generations of PagingSource until PagingDataAdapter.refresh() was invoked
  • Fixed an issue that would cause scroll-position to sometimes be lost when using a DataSource converted into a PagingSource (such as the one produced by Room), in conjunction with RemoteMediator

Внешний вклад

  • Thanks to @simonschiller for adding RxJava2, RxJava3, and Guava-based async transformation operators for PagingData!

Version 3.0.0-alpha06

2 сентября 2020 г.

androidx.paging:paging-*:3.0.0-alpha06 is released. Version 3.0.0-alpha06 contains these commits.

Изменения в API

  • UnsupportedOperationException with clearer messaging around lack of support for stable ids is now thrown whenever PagingDataAdapter.setHasStableIds is called. ( Ib3890 , b/158801427 )

Исправлены ошибки

  • insertSeparators no longer filters out empty pages allowing prefetch distance to be respected by the presenter even in cases where many empty pages are inserted. ( I9cff6 , b/162538908 )

Version 3.0.0-alpha05

19 августа 2020 г.

androidx.paging:paging-*:3.0.0-alpha05 is released. Version 3.0.0-alpha05 contains these commits.

Исправлены ошибки

  • Paging now correctly prefetches pages even when the presented data is heavily filtered
  • Returning LoadResult.Error to a retried load no longer causes Item accesses to incorrectly re-trigger retry

Внешний вклад

  • Thanks to Clara F for helping clean up some tests! ( 549612 )

Version 3.0.0-alpha04

5 августа 2020 г.

androidx.paging:paging-*:3.0.0-alpha04 is released. Version 3.0.0-alpha04 contains these commits.

Изменения в API

  • Added peek() API to AsyncPagingDataDiffer and PagingDataAdapter to allow presented data access without trigger page loads. ( I38898 , b/159104197 )
  • Added a snapshot() API to PagingDataAdapter and AsyncPagingDataDiffer to allow retrieving the presented items without triggering page fetch. ( I566b6 , b/159104197 )
  • Added a PagingData.from(List<T>) constructor to allow presenting static lists, which can be combined with the overall PagingData flow to show static lists in certain states, eg, before initial REFRESH finishes or simply for testing transformations. ( Id134d )
  • Deprecate dataRefresh Flow / Listener APIs as they were intended to expose the presented items state on REFRESH, but with improvements to loadState Flow / Listener callback timing, and itemCount property, it is redundant ( Ia19f3 )
  • Added RxJava3 compatibility wrappers for PagingSource and RemoteMediator ( I49ef3 , b/161480176 )

Исправлены ошибки

  • PositionalDataSource converted into PagingSource via toPagingSourceFactory helper, including PagingSource generated by Room now correctly mark themselves to support jumping. ( I3e84c , b/162161201 )
  • Fixed a bug where using the synchronous variant of submitData would sometimes lead to a race causing a ClosedSendChannelException ( I4d702 , b/160192222 )

Внешний вклад

  • Thanks to Zac Sweers for adding RxJava3 compatibility wrappers on behalf of Slack! ( I49ef3 , b/161480176 )

Version 3.0.0-alpha03

22 июля 2020 г.

androidx.paging:paging-*:3.0.0-alpha03 is released. Version 3.0.0-alpha03 contains these commits.

Изменения в API

  • The constructor for PagingState is now public, which should make testing implementations of getRefreshKey() easier ( I8bf15 )
  • Hid DataSource kotlin map function variants from Java, to resolve ambiguity between original and kotlin variants. ( If7b23 , b/161150011 )
  • Redundant APIs intended as conveniences for Kotlin users have been marked @JvmSynthetic ( I56ae5 )
  • Added overloads for LoadResult.Page's constructor which defaults itemsBefore and itemsAfter to COUNT_UNDEFINED ( I47849 )
  • Made existing PagingData operators accept suspending methods and introduced new mapSync, flatMapSync, and filterSync non-suspending operators for Java users. The existing transformation methods have been moved to extension functions so Kotlin users will now need to import them. ( I34239 , b/159983232 )

Исправлены ошибки

  • Room (and PositionalDataSource) PagingSources will now display a leading separator as part of the first page, so the user doesn't need to scroll to reveal it. ( I6f747 , b/160257628 )
  • Item accesses on placeholders now correctly trigger PagingSource loads until a page is returned that fulfills the requested index after being transformed by PagingData.filter() ( I95625 , b/158763195 )
  • Fix for a bug where sometimes scrolling after PagingSource returns an error could prevent PagingDataAdapter.retry() from retrying. ( I1084f , b/160194384 )
  • Fixes an issue where item accesses after dropping a page might not load pages although the item access was within prefetchDistance ( Ie95ae , b/160038730 )
  • Setting PagingConfig.maxSize no longer enables placeholders after a drop event ( I2be29 , b/159667766 )

Version 3.0.0-alpha02

24 июня 2020 г.

androidx.paging:paging-*:3.0.0-alpha02 is released. Version 3.0.0-alpha02 contains these commits.

Изменения в API

  • Added overloads for PagingConfig 's constructor with common default values ( I39c50 , b/158576040 )
  • Added overloads for constructors of PagingDataAdapter and AsyncPagingDataDiffer with common default values ( Ie91f5 )
  • The adapter APIs, dataRefreshFlow and dataRefreshListener now pass a Boolean to signal whether a PagingData is empty ( I6e37e , b/159054196 )
  • Added RxJava and Guava APIs for RemoteMediator - RxRemoteMediator and ListenableFutureRemoteMediator
  • Added helpers to PagingState for common item access such as isEmpty() and firstItemOrNull() ( I3b5b6 , b/158892717 )

Исправлены ошибки

  • Pager now checks for PagingSource reuse in factory, to prevent accidental reuse of invalid PagingSources, which gave an unclear error ( I99809 , b/158486430 )
  • Failures from RemoteMediator REFRESH no longer prevent PagingSource from loading ( I38b1b , b/158892717 )
  • The non-suspending version of submitData no longer causes a crash due to concurrent collection on multiple PagingData when called after the suspending version of submitData . ( I26358 , b/158048877 )
  • Fixed "cannot collect twice from pager" exception that could occur after config change ( I58bcc , b/158784811 )

Version 3.0.0-alpha01

10 июня 2020 г.

androidx.paging:paging-*:3.0.0-alpha01 is released. Version 3.0.0-alpha01 contains these commits.

The Paging Library has updated to 3.0, to enable several major new features.

New Features of 3.0

Известные проблемы

  • Paging 3 javadocs are not yet available. In the interim, please use the guides linked above or the Kotlin docs. ( b/158614050 )

Версия 2.1.2

Версия 2.1.2

18 марта 2020 г.

androidx.paging:paging:2.1.2 is released. Version 2.1.2 contains these commits against 2.1.0 .

Исправлены ошибки

  • Fix for IndexOutOfBoundsException in rare cases when converting a position during invalidation.

Release issue

  • Paging version 2.1.1 was released incorrectly from a misconfigured branch, exposing partially-implemented APIs and functionality upcoming in a future release.

  • Paging 2.1.2 contains the load-centering fix originally released in 2.1.1, but this time correctly cherry-picked atop the 2.1.0 release. It is strongly recommended to upgrade to this release, if you are currently on 2.1.1.

Версия 2.1.1

Версия 2.1.1

18 декабря 2019 г.

androidx.paging:paging-*:2.1.1 is released. Version 2.1.1 contains these commits .

Исправлены ошибки

  • Contiguous initial loads from PositionalDataSources are now centered around last access when placeholders disabled

Версия 2.1.0

Версия 2.1.0

25 января 2019 г.

Paging 2.1.0 is released with no changes from 2.1.0-rc01 .

Версия 2.1.0-rc01

6 декабря 2018 г.

Paging 2.1.0-rc01 is released with no changes from 2.1.0-beta01 .

Версия 2.1.0-beta01

1 ноября 2018 г.

Paging 2.1.0-beta01 is released with no changes from 2.1.0-alpha01 .

Version 2.1.0-alpha01

12 октября 2018 г.

Paging 2.1.0-alpha01 has two major additions - page dropping, and KTX extension libraries for every artifact - as well as several other API changes and bugfixes.

Изменения в API

  • Added PagedList.Config.Builder.setMaxSize() for limiting the number of loaded items in memory.
  • Added androidx.paging.Config() as a Kotlin alternative for PagedList.Config.Builder
  • Added androidx.paging.PagedList() as a Kotlin alternative for PagedList.Builder
  • Added DataSourceFactory.toLiveData() as a Kotlin alternative for LivePagedListBuilder
  • Added DataSourceFactory.toObservable() and toFlowable() as Kotlin alternatives for RxPagedListBuilder
  • Added AsyncPagedListDiffer.addPagedListListener() for listening to when PagedList is swapped. b/111698609
  • Added PagedListAdapter.onCurrentListChanged() variant that passes old and new list, deprecated previous variant.
  • Added PagedListAdapter/AsyncPagedListDiffer.submitList() variants which take an additional callback that triggers if/when the pagedlist is displayed, after diffing. This allows you to synchronize a PagedList swap with other UI updates. b/73781068
  • PagedList.getLoadedCount() added to let you know how many items are in memory. Note that the return value is always equal to .size() if placeholders are disabled.

Исправлены ошибки

  • Fixed a race condition when diffing if lists are reused b/111591017
  • PagedList.loadAround() now throws IndexOutOfBoundsException when index is invalid. Previously it could crash with an unclear other exception.
  • Fixed a case where an extremely small initial load size together with unchanged data would result in no further loading b/113122599

Версия 2.0.0

Версия 2.0.0

1 октября 2018 г.

Paging 2.0.0 is released with a single bugfix.

Исправлены ошибки

  • Fixed a crash that could occur with very fast scrolling using PositionalDataSource and placeholders b/114635383 .

Version 2.0.0-beta01

2 июля 2018 г.

Исправлены ошибки

  • Fixed content disappearing in some prepend cases (placeholders disabled, PositionalDataSource) b/80149146
  • (Already released in 1.0.1 ) Fixed crashes where PagedListAdapter and AsyncPagedListDiffer would fail to signal move events. b/110711937

Pre-AndroidX Dependencies

For the pre-AndroidX versions of Paging that follow, include these dependencies:

dependencies {
    def paging_version = "1.0.0"

    implementation "android.arch.paging:runtime:$paging_version"

    // alternatively - without Android dependencies for testing
    testImplementation "android.arch.paging:common:$paging_version"

    // optional - RxJava support
    implementation "android.arch.paging:rxjava2:$paging_version"
}

Версия 1.0.1

Версия 1.0.1

26 июня 2018 г.

Paging 1.0.1 is released with a single bugfix in runtime . We highly recommend using 1.0.1 for stability. Paging RxJava2 1.0.1 is also released, and is identical to 1.0.0-rc1 .

Исправлены ошибки

  • Fixed crashes where PagedListAdapter and AsyncPagedListDiffer would fail to signal move events. b/110711937

RxJava2 Version 1.0.0

RxJava2 Version 1.0.0-rc1

16 мая 2018 г.

Paging RxJava2 1.0.0-rc1 is moving to release candidate with no changes from the initial alpha.

Версия 1.0.0

Version 1.0.0-rc1

April 19, 2018 Paging Release Candidate

We do not have any more known issues or new features scheduled for the Paging 1.0.0 release. Please upgrade your projects to use 1.0.0-rc1 and help us battle test it so that we can ship a rock solid 1.0.0 .

There are no changes in this release, it is the same as 1.0.0-beta1 .

Version 1.0.0-beta1

5 апреля 2018 г.

Paging will be in beta for a short time before progressing to release candidate. We are not planning further API changes for Paging 1.0 , and the bar for any API changes is very high.

Alpha RxJava2 support for Paging is released as a separate optional module ( android.arch.paging:rxjava2:1.0.0-alpha1 ) and will temporarily be versioned separately until it stabilizes.

This new library provides an RxJava2 alternative to LivePagedListBuilder , capable of constructing Observable s and Flowable s, taking Scheduler s instead of Executor s:

Котлин

val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50)
        .setFetchScheduler(myNetworkScheduler)
        .buildObservable()

Java

Observable<PagedList<Item>> pagedItems =
        RxPagedListBuilder(myDataSource, /* page size */ 50)
                .setFetchScheduler(myNetworkScheduler)
                .buildObservable();

Новые функции

  • RxPagedListBuilder is added via the new android.arch.paging:rxjava2 artifact.

Изменения в API

  • API changes to clarify the role of executors in builders:

    • Renamed setBackgroundThreadExecutor() to setFetchExecutor() (in PagedList.Builder and LivePagedListBuilder )

    • Renamed setMainThreadExecutor() to setNotifyExecutor() (in PagedList.Builder ).

  • Fixed PagedList.mCallbacks member to be private.

Исправлены ошибки

  • LivePagedListBuilder triggers initial PagedList load on the specified executor, instead of the Arch Components IO thread pool.

  • Fixed invalidate behavior in internal DataSource wrappers (used to implement DataSource.map , as well as placeholder-disabled PositionalDataSource loading) b/77237534

Version 1.0.0-alpha7

21 марта 2018 г.

Paging 1.0.0-alpha7 is released alongside Lifecycles 1.1.1 . As Paging alpha7 depends on the move of the Function class mentioned above, you will need to update your lifecycle:runtime dependency to android.arch.lifecycle:runtime:1.1.1 .

Paging alpha7 is planned to be the final release before Paging hits beta.

Изменения в API

  • DataSource.LoadParams objects now have a public constructor and DataSource.LoadCallback objects are now abstract. This enables wrapping a DataSource or directly testing a DataSource with a mock callback. b/72600421
  • Mappers for DataSource and DataSource.Factory
    • map(Function<IN,OUT>) allows you to transform, wrap, or decorate results loaded by a DataSource .
    • mapByPage(<List<IN>,List<OUT>>) enables the same for batch processing (eg if items loaded from SQL need to additionally query a separate database, that can be done as a batch.)
  • PagedList#getDataSource() is added as a convenience method b/72611341
  • All deprecated classes have been removed from the API, including the remains of recyclerview.extensions package, and the LivePagedListProvider .
  • DataSource.Factory is changed from an interface to an abstract class to enable map functionality.

Исправлены ошибки

  • Changed Builders to be final. b/70848565
  • Room DataSource implementation is now fixed to handle multi-table queries - this fix is contained within Room 1.1.0-beta1, see above.
  • Fixed a bug where BoundaryCallback.onItemAtEndLoaded would not be invoked for PositionalDataSource if placeholders are enabled and the total size is an exact multiple of the page size.

Version 1.0.0-alpha5

22 января 2018 г.

Исправлены ошибки

  • Fix page loading when placeholders are disabled b/70573345
  • Additional logging for tracking down IllegalArgumentException bug b/70360195 (and speculative Room-side fix)
  • Javadoc sample code fixes b/70411933 , b/71467637