Страницы

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

В этой таблице перечислены все объекты в группе androidx.paging.

Объект Основная версия Релиз-кандидат Бета-версия Альфа-версия
paging-* 3.5.3 - - -
paging-compose 3.5.3 - - -
Последнее обновление библиотеки: 12 октября 2026 г.

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

Чтобы добавить зависимость от Paging, необходимо добавить в проект репозиторий Google Maven. Подробную информацию можно найти в статье Репозиторий Google Maven.

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

Яркий

dependencies {
  def paging_version = "3.5.3"

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

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

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

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

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

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

Kotlin

dependencies {
  val paging_version = "3.5.3"

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

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

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

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

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

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

Информацию об использовании расширений Kotlin можно найти в документации по KTX.

Подробнее о добавлении зависимостей сборки…

Отзыв

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

Создать новую проблему

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

Версия 3.5

Версия 3.5.3

12 октября 2026 г.

Выход сингла "androidx.paging:paging-*:3.5.3". Версия 3.5.3 содержит эти коммиты.

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

  • ItemSnapshotListFlow больше не будет выдавать ошибку IllegalArgumentException, когда RemoteMediator достигает конца разбивки на страницы в любом направлении, а верхний или нижний колонтитул преобразуется в конечный разделитель. (I821c7, b/566336825)
  • Если количество загруженных страниц превышает PagingConfig.maxSize, оно не уменьшится до значения меньше двух, чтобы область просмотра была заполнена данными. (I037a0, b/565835910)

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

Благодарим Игоря за исправление ошибки b/565835910.

Версия 3.5.2

7 октября 2026 г.

Выход androidx.paging:paging-*:3.5.2. Версия 3.5.2 содержит эти коммиты.

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

  • Вызовы Pager.append() до завершения первоначального обновления больше не будут вызывать ошибку NoSuchElementException. Вызов append не будет работать. (Ide387, b/556780796)

Версия 3.5.1

12 августа 2026 г.

Выход сингла "androidx.paging:paging-*:3.5.1". Версия 3.5.1 содержит эти коммиты.

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

  • Исправлена ошибка, из-за которой PagingSource.getRefreshKey предоставлял неверный anchorPosition, который был слишком большим при обновлении страницы с разделителями во время прокрутки до плейсхолдеров. (I475f0, b/516565503)

Версия 3.5.0

6 мая 2026 г.

Выход сингла "androidx.paging:paging-*:3.5.0". Версия 3.5.0 содержит эти коммиты.

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

  • Добавлен оператор Flow<PagingData>.asItemSnapshotListFlow для преобразования Flow<PagingData> в Flow<ItemSnapshotList>. Это означает, что загруженные данные теперь доступны за пределами уровня интерфейса, что позволяет объединять Flow<ItemSnapshotList> с другими источниками данных, кэшировать и изменять данные на страницах локально, а также предоставлять данные на страницах как часть состояния интерфейса и т. д.

  • Добавлены функции расширения Pager.append и Pager.prepend, позволяющие вручную загружать больше данных без прокрутки.

  • Добавлены функции расширения Pager.refresh и Paging.retry для восстановления после ошибок загрузки при использовании asItemSnapshotListFlow API.

Версия 3.5.0-rc01

22 апреля 2026 г.

Выход сингла "androidx.paging:paging-*:3.5.0-rc01". Версия 3.5.0-rc01 содержит эти коммиты.

Пользователь не внес никаких изменений

  • В версии 3.5.0-beta01 нет значительных изменений.

Версия 3.5.0-beta01

8 апреля 2026 г.

Выход androidx.paging:paging-*:3.5.0-beta01. Версия 3.5.0-beta01 содержит эти коммиты.

Изменения в API

  • API Flow<PagingData>.asState переименован в Flow<PagingData>.asItemSnapshotListFlow (I0dc11, b/496548025).

Версия 3.5.0-alpha01

11 марта 2026 г.

Выход сингла "androidx.paging:paging-*:3.5.0-alpha01". Версия 3.5.0-alpha01 содержит эти коммиты.

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

  • Артефакт paging-common теперь содержит новый оператор потока asState для Flow<PagingData>, который преобразует его в Flow<ItemSnapshotList>. Это позволяет:

    • объединять поток ItemSnapshotList с другими источниками данных;
    • share flow with multiple collectors without cachedIn
    • кешировать данные страниц локально;
    • изменять данные в памяти, разбитые на страницы
    • предоставлять данные с разбивкой по страницам как часть состояния пользовательского интерфейса
    // In your ViewModel
    val pager = Pager(pagingConfig, pagingSourceFactory)
    val pagerFlow = pager.flow.asState()
    
    // alterantively convert the flow to a SharedFlow
    val pagerFlow = pager.flow.asState().stateIn()
    
    // In presenter layer
    val snapshotFlow = viewModel.pagerFlow.collectAsStateWithLifecycle(initialList)
    val snapshot = itemsFlow.value
    
    LazyColumn {
    items(items = snapshot.items) { ... }
    }
    
  • В артефакт paging-common также добавлены API Pager.append и Pager.prepend, позволяющие вручную запускать загрузку с любого края загруженных элементов.

    • При использовании с paging-runtime или paging-compose предоставляет альтернативный способ загрузки дополнительных данных (помимо прокрутки).
    • При использовании с новым API asState это единственный способ загрузить больше данных.
    LazyColumn {
    item {
           /**
           * Load more items when users scroll near the top of loaded items.
           */
           LaunchedEffect(viewModel) { viewModel.prepend() }
        }
    items(snapshot.items) { item -> Text("Item: $item") }
    item {
            /**
            * Load more items when users scroll near the bottom of loaded items.
            */
          LaunchedEffect(viewModel) { viewModel.append() }
      }
    }
    
  • Добавлены методы Pager.refresh и Pager.retry для восстановления после ошибок загрузки при использовании asState API. Дополнительные примеры использования новых API приведены в этом документе. (I1e1e9, If3c87, Idbd48, Id1e1d, I816fe)

Версия 3.4

Версия 3.4.2

11 марта 2026 г.

Выход сингла "androidx.paging:paging-*:3.4.2". Версия 3.4.2 содержит эти коммиты.

Пользователь не внес никаких изменений

  • В этом выпуске нет изменений в API или поведении по сравнению с версией 3.4.1.

Версия 3.4.1

11 февраля 2026 г.

Выход сингла "androidx.paging:paging-*:3.4.1". Версия 3.4.1 содержит эти коммиты.

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

  • Зависимость guava в paging-guava обновлена с версии 31.1 до 32.0.1.

Версия 3.4.0

28 января 2026 г.

Выход сингла "androidx.paging:paging-*:3.4.0". Версия 3.4.0 содержит эти коммиты.

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

  • Добавлено больше целей KMP для paging-common, paging-testing и paging-compose. Теперь все они поддерживают JVM(Android и ПК), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) и Web (JavaScript, WasmJS).
  • В paging-common, paging-testing и paging-compose удалена поддержка macosX64, iosX64, watchosX64 и tvosX64, поскольку Jetbrains прекратила поддержку целевых платформ macosX64.
  • Добавлен новый PagingState API closestItemAroundPosition для получения загруженного элемента, который находится ближе всего к целевой позиции и соответствует входному предикату. Это можно использовать для создания ключей обновления на основе элементов, когда идеальный закрепляемый элемент находится рядом с целевой позицией, но не точно в ней.

Версия 3.4.0-rc01

14 января 2026 г.

Выход androidx.paging:paging-*:3.4.0-rc01. Версия 3.4.0-rc01 содержит эти коммиты.

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

Версия 3.4.0-beta01

17 декабря 2025 г.

Выход androidx.paging:paging-*:3.4.0-beta01. Версия 3.4.0-beta01 содержит эти коммиты.

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

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

Версия 3.4.0-alpha04

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

Выход сингла "androidx.paging:paging-*:3.4.0-alpha04". Версия 3.4.0-alpha04 содержит эти коммиты.

Изменения в API

  • Добавлен новый PagingState API 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 и ПК), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) и Web (JavaScript, WasmJS). (Id2483, b/436884811)
  • В библиотеку Paging-testing добавлены новые целевые платформы Kotlin Multiplatform (KMP). Теперь она поддерживает JVM(Android и ПК), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) и Web (JavaScript, WasmJS). (I0c543, b/435014650)
  • В Paging-compose добавлены новые целевые платформы Kotlin Multiplatform (KMP). Теперь он поддерживает JVM(Android и Desktop), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) и Web (JavaScript, WasmJS). (I70d44, b/436884801)

Изменения в API

Версия 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 при прокрутке во время обновления RecyclerView возникала ошибка IndexOutOfBoundsException (Id1f16, b/381024738).
  • Исправлена ошибка, из-за которой при обновлении во время прокрутки не загружались дополнительные страницы. (I60ca5, b/352586078)
  • Исправлен сбой при прокрутке во время обновления элементов Paging. (I8c65a, b/347649763)

Версия 3.3

Версия 3.3.6

12 февраля 2025 г.

Выход androidx.paging:paging-*:3.3.6. Версия 3.3.6 содержит эти коммиты.

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

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

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

  • Благодарим Еву за исправление ошибки (#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 Multiplatform: watchos, tvos и linuxArm64 (90c9768, 53e0eca).

Версия 3.3.1

24 июля 2024 г.

Выход сингла "androidx.paging:paging-*:3.3.1". Версия 3.3.1 содержит эти коммиты.

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

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

Версия 3.3.0

14 мая 2024 г.

Выход androidx.paging:paging-*:3.3.0. Версия 3.3.0 содержит эти коммиты.

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

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

Совместимость с Kotlin Multiplatform

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

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

Версия 3.3.0-rc01

1 мая 2024 г.

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

Версия 3.3.0-beta01

3 апреля 2024 г.

androidx.paging:paging-*:3.3.0-beta01 не содержит значительных изменений. Версия 3.3.0-beta01 содержит эти коммиты.

Версия 3.3.0-alpha05

20 марта 2024 г.

Выход сингла "androidx.paging:paging-*:3.3.0-alpha05". Версия 3.3.0-alpha05 содержит эти коммиты.

Изменения в API

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

Версия 3.3.0-alpha04

6 марта 2024 г.

Выход сингла "androidx.paging:paging-*:3.3.0-alpha04". Версия 3.3.0-alpha04 содержит эти коммиты.

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

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

Версия 3.3.0-alpha03

7 февраля 2024 г.

Выход сингла "androidx.paging:paging-*:3.3.0-alpha03". Версия 3.3.0-alpha03 содержит эти коммиты.

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

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

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

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

Версия 3.3.0-alpha02

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

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

Совместимость с Kotlin Multiplatform

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

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

Изменения в API

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

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

Версия 3.3.0-alpha01

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

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

Версия 3.2

Версия 3.2.1

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

Выход androidx.paging:paging-*:3.2.1. Версия 3.2.1 содержит эти коммиты.

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

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

Версия 3.2.0

26 июля 2023 г.

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

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

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

Версия 3.2.0-rc01

21 июня 2023 г.

Выход androidx.paging:paging-*:3.2.0-rc01. Версия 3.2.0-rc01 содержит эти коммиты.

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

  • Благодарим Veyndan за помощь в переносе Paging из Android/JVM. (#553, #554, #555, #559)

Версия 3.2.0-beta01

7 июня 2023 г.

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

Paging Compose

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

Изменения в API

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

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

  • Для выполнения тестов Paging asSnapshot больше не требуется основной диспетчер. Теперь этот параметр не влияет на поведение теста. (Ie56ea)

Версия 3.2.0-alpha05

3 мая 2023 г.

Выход сингла "androidx.paging:paging-*:3.2.0-alpha05". Версия 3.2.0-alpha05 содержит эти коммиты.

Изменения в API

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

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

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

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

Версия 3.2.0-alpha04

8 февраля 2023 г.

Выход сингла "androidx.paging:paging-*:3.2.0-alpha04". Версия 3.2.0-alpha04 содержит эти коммиты.

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

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

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

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

    asSnapshot – это метод suspend, который должен выполняться в runTest. Подробнее о тестировании сопрограмм Kotlin в Android… (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)

Изменения в API

  • Вызовы UI к getItem и peek в AsyncPagingDataDiffer и PagingDataAdapter теперь правильно помечены как вызываемые только в основном потоке. (I699b6)
  • Удалены подстановочные знаки из общих типов, используемых TestPager, что упрощает использование результатов этих методов в коде, написанном на языке программирования Java. (I56c42)

Версия 3.2.0-alpha03

24 октября 2022 г.

Выход androidx.paging:paging-*:3.2.0-alpha03. Версия 3.2.0-alpha03 содержит эти коммиты.

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

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

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

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

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

Изменения в API

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

Версия 3.2.0-alpha02

10 августа 2022 г.

Выход androidx.paging:paging-*:3.2.0-alpha02. Версия 3.2.0-alpha02 содержит эти коммиты.

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

  • Теперь Paging предоставляет журналы через классы AsyncPagingDataDifferили PagingDataAdapter, чтобы показывать сведения для отладки, собранные из PagingData.
  • Журналы можно включить с помощью команды adb 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 в случаях, когда он возвращает нулевое значение, но задано ненулевое значение initialKey. (Ic9542, b/230391606)

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

  • Обновлен API :compose:ui:ui-test (updateApi) в связи с переходом на test-coroutines-lib (I3366d).

Версия 3.1

Версия 3.1.1

9 марта 2022 г.

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

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

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

Версия 3.1.0

17 ноября 2021 г.

Выход androidx.paging:paging-*:3.1.0. Версия 3.1.0 содержит эти коммиты.

Важные изменения, внесенные после версии 3.0.0

  • Flow<PagingData>.observable и Flow<PagingData>.flowable API больше не являются экспериментальными
  • Изменения в 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 downstream, когда не было наблюдателей или когда наблюдатель переключался на новые PagingData. (Ib682e)

Версия 3.1.0-beta01

13 октября 2021 г.

Выход androidx.paging:paging-*:3.1.0-beta01. Версия 3.1.0-beta01 содержит эти коммиты.

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

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

Версия 3.1.0-alpha04

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

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

Изменения в API

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

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

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

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

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

    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, что заставляет Paging отклонять любые ожидающие или будущие запросы на загрузку для этого PagingSource и аннулировать его.

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

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

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

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

Версия 3.1.0-alpha02

1 июля 2021 г.

Выход androidx.paging:paging-*:3.1.0-alpha02. Версия 3.1.0-alpha02 содержит эти коммиты.

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

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

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

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

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

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

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

Версия 3.1.0-alpha01

2 июня 2021 г.

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

Изменения в API

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

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

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

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

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

Paging Compose 1.0.0

Версия 1.0.0-alpha20

24 мая 2023 г.

Выход сингла "androidx.paging:paging-compose:1.0.0-alpha20". Версия 1.0.0-alpha20 содержит эти коммиты.

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

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

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

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

Версия 1.0.0-alpha19

3 мая 2023 г.

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

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

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

Чтобы поддерживать больше ленивых макетов, нам нужно было создать API на другом уровне. Вместо того чтобы предоставлять настраиваемый API items для каждого ленивого макета, Paging Compose теперь предоставляет методы расширения немного более низкого уровня для LazyPagingItems в itemKey и itemContentType. Эти API помогают реализовать параметры key и contentType в стандартных API items, которые уже существуют для LazyColumn, LazyVerticalGrid, а также их эквиваленты в API, таких как HorizontalPager. (Ifa13b, Ib04f0, b/259385813)

Это означает, что поддержка LazyVerticalGrid будет выглядеть следующим образом:

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

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

Дополнительные примеры использования новых API можно найти в наших примерах.

Хотя из-за этих изменений примеры LazyColumn и LazyRow стали на несколько строк длиннее, мы посчитали, что согласованность всех ленивых макетов является важным фактором для тех, кто в дальнейшем будет использовать Paging Compose. По этой причине поддержка существующих расширений для LazyListScope прекращена. (I0c459, I92c8f, b/276989796)

Изменения в API

  • Чтобы упростить переход на новые API, функции расширения items и itemsIndexed в LazyListScope теперь поддерживают параметр contentType, как и новые API. Ib1918, b/255283378

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

  • В библиотеке Paging Compose зависимость от Compose была обновлена с версии 1.0.5 до 1.2.1. Ib1918, b/255283378

Версия 1.0.0-alpha18

8 февраля 2023 г.

androidx.paging:paging-compose:1.0.0-alpha18 выпускается без изменений. Версия 1.0.0-alpha18 содержит эти коммиты.

Версия 1.0.0-alpha17

24 октября 2022 г.

Выход androidx.paging:paging-compose:1.0.0-alpha17. Версия 1.0.0-alpha17 содержит эти коммиты.

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

  • Добавлена поддержка пользовательского значения CoroutineContext при вызове collectLazyPagingItems. (I7a574, b/243182795, b/233783862)

Версия 1.0.0-alpha16

10 августа 2022 г.

Выход androidx.paging:paging-compose:1.0.0-alpha16. Версия 1.0.0-alpha16 содержит следующие коммиты:

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

  • Теперь в библиотеке Paging есть журналы, которые можно получить с помощью класса LazyPagingItems. В них содержится сведения для отладки, собранные из PagingData.
  • Журналы можно включить с помощью команды adb 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-alpha15

1 июня 2022 г.

Выход androidx.paging:paging-compose:1.0.0-alpha15. Версия 1.0.0-alpha15 содержит эти коммиты.

Изменения в API

  • Добавлены конструкторы для PagingDataAdapter и AsyncPagingDataDiffer, которые принимают CoroutineContext вместо CoroutineDispatcher. (Idc878)

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

  • LazyPagingItems теперь задает начальное значение loadState, чтобы оно обновлялось каждые LoadState.Loading. (I55043, b/224855902)

Версия 1.0.0-alpha14

13 октября 2021 г.

Выход androidx.paging:paging-compose:1.0.0-alpha14. Версия 1.0.0-alpha14 содержит эти коммиты.

Версия 1.0.0-alpha13

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

Выход сингла "androidx.paging:paging-compose:1.0.0-alpha13". Версия 1.0.0-alpha13 содержит следующие коммиты.

Изменения в API

  • Функция LazyPagingItems.snapshot() заменена свойством LazyPagingItems.itemSnapshotList (Ie2da8).
  • Удален устаревший атрибут "LazyPagingItems.getAsState()" (Ie65e4)

Версия 1.0.0-alpha12

21 июля 2021 г.

Выход сингла "androidx.paging:paging-compose:1.0.0-alpha12". Версия 1.0.0-alpha12 содержит эти коммиты.

Изменения в API

  • items(lazyPagingItems) и itemsIndexed(lazyPagingItems), используемые для подключения Paging к LazyColumn/Row, теперь принимают параметр ключа option, который позволяет указать стабильный ключ, представляющий элемент. Подробнее о ключах… (I7986d)
  • Прекращена поддержка функции lazyPagingItems.getAsState(index). Используйте вместо него lazyPagingItems[index]. (I086cb, b/187339372)

Версия 1.0.0-alpha11

30 июня 2021 г.

Выход сингла "androidx.paging:paging-compose:1.0.0-alpha11". Версия 1.0.0-alpha11 содержит следующие коммиты:

Версия 1.0.0-alpha10

2 июня 2021 г.

Выход androidx.paging:paging-compose:1.0.0-alpha10. Версия 1.0.0-alpha10 содержит следующие коммиты:

Версия 1.0.0-alpha09

18 мая 2021 г.

Выход сингла "androidx.paging:paging-compose:1.0.0-alpha09". Версия 1.0.0-alpha09 содержит эти коммиты.

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

  • Теперь itemCount и геттер элементов LazyPagingItems можно отслеживать, что позволяет использовать их с LazyVerticalGrid (Ie2446, b/171872064, b/168285687).

Совместимость с Compose

  • androidx.paging:paging-compose:1.0.0-alpha09 совместим только с Compose версии 1.0.0-beta07 и более поздних.

Версия 1.0.0-alpha08

24 февраля 2021 г.

Выход androidx.paging:paging-compose:1.0.0-alpha08. Версия 1.0.0-alpha08 содержит эти коммиты.

Добавлена интеграция с Compose 1.0.0-beta01.

Версия 1.0.0-alpha07

10 февраля 2021 г.

Выход androidx.paging:paging-compose:1.0.0-alpha07. Версия 1.0.0-alpha07 содержит эти коммиты.

Обновлено для интеграции с Compose alpha12.

Версия 1.0.0-alpha06

28 января 2021 г.

Выход сингла "androidx.paging:paging-compose:1.0.0-alpha06". Версия 1.0.0-alpha06 содержит следующие коммиты.

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

Обновлена зависимость от Compose 1.0.0-alpha11.

Версия 1.0.0-alpha05

13 января 2021 г.

Выход androidx.paging:paging-compose:1.0.0-alpha05. Версия 1.0.0-alpha05 содержит эти коммиты.

Обновлена зависимость от Compose 1.0.0-alpha10.

Версия 1.0.0-alpha04

16 декабря 2020 г.

Выход androidx.paging:paging-compose:1.0.0-alpha04. Версия 1.0.0-alpha04 содержит эти коммиты.

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

  • Удобные свойства CombinedLoadStates.refresh, CombinedLoadStates.prepend и CombinedLoadStates.append теперь переходят из состояния Loading в состояние NotLoading только после того, как и медиатор, и источник перейдут в состояние NotLoading. Это гарантирует, что удаленное обновление было применено. (I65619)

Версия 1.0.0-alpha03

2 декабря 2020 г.

Выход сингла "androidx.paging:paging-compose:1.0.0-alpha03". Версия 1.0.0-alpha03 содержит эти коммиты.

  • Обновлено в соответствии с Compose 1.0.0-alpha08.

Версия 1.0.0-alpha02

11 ноября 2020 г.

Выход androidx.paging:paging-compose:1.0.0-alpha02. Версия 1.0.0-alpha02 содержит эти коммиты.

Изменения в API

  • В LazyPagingItem добавлены методы .peek(), .snapshot(), .retry() и .refresh(), которые предоставляют те же функции, что и AsyncPagingDataDiffer / PagingDataAdapter (Iddfe8, b/172041660).

Версия 1.0.0-alpha01

28 октября 2020 г.

Выход androidx.paging:paging-compose:1.0.0-alpha01. Версия 1.0.0-alpha01 содержит эти коммиты.

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

Артефакт paging-compose обеспечивает интеграцию между библиотекой разбивки на страницы и Jetpack Compose. Пример использования:

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

Версия 3.0.1

Версия 3.0.1

21 июля 2021 г.

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

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

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

Версия 3.0.0

Версия 3.0.0

5 мая 2021 г.

Выход androidx.paging:paging-*:3.0.0. Версия 3.0.0 содержит следующие коммиты:

Основные функции версии 3.0.0

Большинство существующих API из библиотеки Paging 2.x.x объявлены устаревшими и заменены новыми API из библиотеки Paging 3. Это сделано, чтобы обеспечить следующие улучшения:

  • Поддержка сопрограмм и потоков Kotlin
  • Поддержка по вопросам отмены
  • Встроенные сигналы о состоянии загрузки и ошибках
  • Функция повтора и обновления
  • Все три подкласса DataSource объединены в единый класс PagingSource.
  • Специальные преобразования страниц, в том числе встроенное преобразование для добавления разделителей.
  • Загрузка верхних и нижних колонтитулов штатов

Версия 3.0.0-rc01

21 апреля 2021 г.

Выход androidx.paging:paging-*:3.0.0-rc01. Версия 3.0.0-rc01 содержит эти коммиты.

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

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

Версия 3.0.0-beta03

24 марта 2021 г.

Выход сингла "androidx.paging:paging-*:3.0.0-beta03". Версия 3.0.0-beta03 содержит эти коммиты.

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

  • Мы изменили способ обработки плейсхолдеров при перезагрузке списка, чтобы предотвратить неожиданные переходы в RecyclerView. Подробную информацию можно найти в файле NullPaddedDiffing.md. (If1490, b/170027529, b/177338149)
  • Различные конструкторы PagedList (старый путь совместимости) больше не вызывают DataSource.Factory.create() в основном потоке синхронно при вызове .build(). (b/182798948)

Версия 3.0.0-beta02

10 марта 2021 г.

Выход сингла "androidx.paging:paging-*:3.0.0-beta02". Версия 3.0.0-beta02 содержит следующие коммиты:

Изменения в API

  • Расширения Rx3 теперь корректно распространяют требование о согласии @ExperimentalCoroutinesApi. Ранее они были отмечены в методе @get, который игнорируется компилятором Kotlin из-за ошибки https://youtrack.jetbrains.com/issue/KT-45227 (I5733c).

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

  • Принудительно применяются ограничения на публичное использование экспериментальных API (I6aa29, b/174531520).
  • Исправлена ошибка, из-за которой PagingState всегда принимал значение null при вызове удаленного обновления.
  • Исправлена ошибка, из-за которой пустые страницы, возвращаемые PagingSource, могли препятствовать повторному получению данных Paging для выполнения запроса prefetchDistance, в результате чего Paging "зависал".

Версия 3.0.0-beta01

10 февраля 2021 г.

Выход сингла "androidx.paging:paging-*:3.0.0-beta01". Версия 3.0.0-beta01 содержит следующие коммиты:

Изменения в API

  • Оболочки Rx2 и Rx3 теперь предоставляют экспериментальную аннотацию, от которой они зависят. Если вы используете совместимые обертки Rx в paging-rxjava2 или paging-rxjava3, вам нужно будет аннотировать их с помощью @OptIn(ExperimentalCoroutinesApi::class) (Ib1f9d).

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

  • Исправлена ошибка IndexOutOfBoundsException: Inconsistency detected, которая иногда возникала при использовании API DataSource версии 2 через пути совместимости.
  • Вызов isInvalid во время инициализации DataSource при использовании путей совместимости теперь правильно запускается в fetchDispatcher, а не в основном потоке. Исправлена ошибка IllegalStateException, связанная с доступом к базе данных в основном потоке при использовании реализации PagingSource библиотеки Room.

Версия 3.0.0-alpha13

27 января 2021 г.

Выход сингла "androidx.paging:paging-*:3.0.0-alpha13". Версия 3.0.0-alpha13 содержит эти коммиты.

Изменения в API

  • Метод PagingSource.getRefreshKey больше не является необязательным. Теперь это абстрактная функция без реализации по умолчанию. Переносимые пользователи могут продолжать возвращать реализацию по умолчанию, которая просто возвращает null, но getRefreshKey() должна иметь реальную реализацию, возвращающую ключ на основе текущей позиции прокрутки пользователя, которая позволяет Paging продолжать загрузку по центру области просмотра с помощью PagingState.anchorPosition, если это возможно. (I4339a)
  • InvalidatingPagingSourceFactory теперь является финальным классом (Ia3b0a).
  • Добавлена возможность настраивать поведение разделителя терминала (заголовка или нижнего колонтитула) с помощью дополнительного необязательного параметра SeparatorType. Доступны два варианта:
    • FULLY_COMPLETE – существующее поведение; дождитесь, пока PagingSource и RemoteMediator не отметят endOfPaginationReached, прежде чем добавлять конечные разделители. Если RemoteMediator не используется, удаленное состояние loadState игнорируется. Это полезно, если вы хотите показывать разделители разделов только после полной загрузки раздела, включая получение данных из удаленного источника, например сети.
    • SOURCE_COMPLETE – ожидать, пока PagingSource не отметит endOfPaginationReached, даже если используется RemoteMediator. Это позволяет синхронно показывать колонтитулы при первоначальной загрузке, чтобы пользователям не приходилось прокручивать страницу, чтобы увидеть конечные разделители. (Ibe993, b/174700218)

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

  • Исправлена редкая утечка памяти, которая происходит, когда PagingSource становится недействительным до того, как PageFetcher может начать загрузку из него. (I9606b, b/174625633)

Версия 3.0.0-alpha12

13 января 2021 г.

Выход сингла "androidx.paging:paging-*:3.0.0-alpha12". Версия 3.0.0-alpha12 содержит следующие коммиты:

Изменения в API

  • InvalidatingPagingSourceFactory больше не является абстрактным классом, поскольку у него никогда не было абстрактных методов. (I4a8c4)
  • Добавлена перегрузка .cachedIn(), которая принимает ViewModel вместо Lifecycle или CoroutineScope для пользователей Java. (I97d81, b/175332619)
  • Разрешить вызывающим объектам Java использовать операции преобразования PagingData асинхронно, принимая Executor в аргументы оператора преобразования. У всех операторов преобразования -Sync удален суффикс -Sync. Пользователям Kotlin Coroutine нужно будет устранить неоднозначность, вызвав функцию расширения, которая принимает приостанавливающий блок. Все операторы преобразования PagingData были перенесены в расширения под статическим классом PagingDataTransforms. Пользователям Java нужно будет вызывать их через статические вспомогательные методы, например: PagingDataTransforms.map(pagingData, transform) Для пользователей Kotlin синтаксис такой же, но нужно будет импортировать функцию. (If6885, b/172895919)

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

  • Исправлена ошибка, из-за которой RemoteMediator.load() не вызывался во время adapter.refresh(), если конец пагинации уже был достигнут.

Версия 3.0.0-alpha11

16 декабря 2020 г.

Выход androidx.paging:paging-*:3.0.0-alpha11. Версия 3.0.0-alpha11 содержит эти коммиты.

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

  • Добавлена поддержка сохраненного состояния для следующих основных вариантов использования (полная поддержка, особенно в случае многослойного источника, пока находится в разработке):
    • Поток кешируется, а приложение не закрывается (например, поток кешируется в модели представления, а действие воссоздается в процессе).
    • источник разбивки на страницы подсчитывается, плейсхолдеры включены, а макет не является ступенчатым.

Изменения в API

  • PagingSource.getRefreshKey() теперь стабильный API (I22f6f, b/173530980)
  • Функция PagingSource.invalidate больше не является открытой. Если вам нужно получать уведомления о недействительности, используйте метод registerInvalidatedCallback вместо переопределения invalidate. (I628d9, b/173029013, b/137971356)
  • Теперь у Pager есть один экспериментальный конструктор наряду с обычными конструкторами. Экспериментальные API больше не попадают в общедоступные неэкспериментальные API через аннотацию согласия. (I9dc61, b/174531520)
  • Обновлены свойства CombinedLoadStates.refresh, CombinedLoadStates.prepend и CombinedLoadStates.append, чтобы переход от Loading к NotLoading происходил только после того, как состояния загрузки посредника и источника станут NotLoading. Это гарантирует, что удаленное обновление было применено. (I65619)
  • Удален параметр LoadParams.pageSize (он уже был устаревшим). Рекомендуется использовать LoadParams.loadSize в PagingSource.

    LoadParams.loadSize всегда равно PagingConfig.pageSize, за исключением первого вызова, когда оно равно PagingConfig.initialLoadSize.

    Если вы тестируете DataSource из Paging2 без использования Pager или PagedList, pageSize может не соответствовать PagingConfig.pageSize, если вы также задаете initialLoadSize. Если это важно для ваших тестов, попробуйте использовать Pager/PagedList, который будет внутренне устанавливать правильный PageSize для методов загрузки DataSource. (I98ac7, b/149157296)

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

  • Исправлен сбой из-за IllegalStateException при использовании разделителей с заданным значением PagingConfig.maxSize. (I0ed33, b/174787528)
  • Исправлена ошибка, из-за которой состояние загрузки для PREPEND / APPEND не обновлялось до NotLoading(endOfPaginationReached = true) сразу после начальной загрузки, если был задан RemoteMediator (I8cf5a).
  • Исправлена ошибка, из-за которой API на стороне презентера, такие как .snapshot(), .peek() и т. д., возвращали предыдущий (устаревший) список в обновлениях ListUpdateCallback.
  • Исправлена ошибка, из-за которой операторы Separators не добавляли верхние или нижние колонтитулы при использовании с RemoteMediator.
  • Исправлена ошибка, из-за которой обновления LoadState до NotLoading для RemoteMediator застревали в состоянии Loading.
  • Исправлена ошибка, из-за которой API совместимости Paging 2.0 (.asPagingSourceFactory()) мог инициализировать резервный DataSource в неправильном CoroutineDispatcher. Это позволяет устранить сбои и возможные ошибки ANR, особенно при использовании текущей реализации PagingSource в Room, которая использует этот путь совместимости.

Версия 3.0.0-alpha10

2 декабря 2020 г.

Выход androidx.paging:paging-*:3.0.0-alpha10. Версия 3.0.0-alpha10 содержит эти коммиты.

Изменения в API

  • Устаревшие API dataRefreshFlow и dataRefreshListener были удалены, поскольку они дублируют обновления loadStateFlow и Listener. Для тех, кто переходит на новую версию, эквивалентом loadStateFlow является:

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

    (Ib5570, b/173530908)

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

  • endOfPaginationReached для RemoteMediator REFRESH теперь правильно распространяется на обновления LoadState и предотвращает запуск удаленных APPEND и PREPEND. (I94a3f, b/155290248)
  • Если список пуст из-за пустой начальной страницы или строгой фильтрации, это больше не будет мешать Paging запускать загрузку PREPEND или APPEND. (I3e702, b/168169730)
  • Исправлена ошибка, из-за которой getRefreshKey не вызывался для последующих поколений PagingSource при быстром аннулировании. (I45460, b/170027530)

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

  • Добавлен новый абстрактный класс InvalidatingPagingSourceFactory с API .invalidate(), который перенаправляет invalidate во все создаваемые им PagingSource. Спасибо @claraf3! (Ie71fc, b/160716447)

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

  • Верхние и нижние колонтитулы из преобразования .insertSeparators() могут не сразу появляться при использовании RemoteMediator b/172254056.
  • Использование RemoteMediator может привести к зависанию удаленного объекта LoadState, если аннулирование и PagingSource.load(LoadParams.Refresh(...)) завершатся до того, как RemoteMediator.load() вернет значение b/173717820.

Версия 3.0.0-alpha09

11 ноября 2020 г.

Выход androidx.paging:paging-*:3.0.0-alpha09. Версия 3.0.0-alpha09 содержит эти коммиты.

Изменения в API

  • Полностью прекратить поддержку методов dataRefreshFlow / Listener с помощью пункта replaceWith. (I6e2dd)

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

  • Исправлена ошибка IllegalArgumentException, возникающая при использовании разделителей с RemoteMediator и при запуске invalidate во время удаленной загрузки, которая должна вернуть endOfPagination (I3a260).

Версия 3.0.0-alpha08

28 октября 2020 г.

Выход сингла "androidx.paging:paging-*:3.0.0-alpha08". Версия 3.0.0-alpha08 содержит эти коммиты.

Изменения в API

  • Варианты DataSource.InvalidatedCallback для Kotlin и Java были объединены путем включения SAM-преобразований в Kotlin через функциональный интерфейс (доступно в Kotlin 1.4). Также исправлена ошибка, из-за которой обратные вызовы invalidate в Kotlin не выполнялись после преобразования с помощью .map или .mapByPage. (I1f244, b/165313046)

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

  • Значительно улучшено взаимодействие библиотеки Paging с ViewPager. В частности, Paging больше не будет отменять вызов RemoteMediator#load из-за недействительности страницы. Кроме того, если требуется обновить контент, он больше не будет отправлять запрос на загрузку с добавлением или вставкой в начало, пока запрос на обновление не будет успешно выполнен. (I6390b, b/162252536)
  • Для androidx включена проверка API на наличие MissingGetterMatchingBuilder (I4bbea, b/138602561).
  • Исправлена ошибка, из-за которой вспомогательные функции .withLoadState* ConcatAdapter завершали работу из-за уведомления RecyclerView из фонового потока (I18bb5, b/170988309).
  • Исправлена ошибка, из-за которой при загрузке очень маленькой непустой страницы предзагрузка иногда не запускала загрузку правильно.Iffda3 b/169259468

Версия 3.0.0-alpha07

1 октября 2020 г.

Выход сингла "androidx.paging:paging-*:3.0.0-alpha07". Версия 3.0.0-alpha07 содержит эти коммиты.

Изменения в API

  • Операторы Async PagingData на основе Guava теперь принимают Executor в качестве параметра для управления контекстом выполнения. (Id4372)

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

  • Исправлена ошибка IndexOutOfBounds, возникавшая в RemoteMediator из-за состояния гонки. (I00b7f, b/165821814)
  • Исправлено состояние гонки в преобразовании DataSource -> PagingSource, из-за которой полученный объект PagingSource мог игнорировать сигналы недействительности от DataSource.
  • Исправлена ошибка в логике получения страниц, из-за которой иногда не удавалось получить новые поколения PagingSource, пока не вызывался метод PagingDataAdapter.refresh().
  • Исправлена ошибка, из-за которой позиция прокрутки иногда терялась при использовании DataSource, преобразованного в PagingSource (например, созданного Room), в сочетании с RemoteMediator.

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

  • Благодарим @simonschiller за добавление операторов асинхронного преобразования на основе RxJava2, RxJava3 и Guava для PagingData.

Версия 3.0.0-alpha06

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

Выход сингла "androidx.paging:paging-*:3.0.0-alpha06". Версия 3.0.0-alpha06 содержит следующие коммиты.

Изменения в API

  • UnsupportedOperationException с более понятным сообщением об отсутствии поддержки стабильных идентификаторов теперь выдается при каждом вызове PagingDataAdapter.setHasStableIds. (Ib3890, b/158801427)

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

  • insertSeparators больше не отфильтровывает пустые страницы, позволяя докладчику соблюдать расстояние предварительной выборки даже в тех случаях, когда вставлено много пустых страниц. (I9cff6, b/162538908)

Версия 3.0.0-alpha05

19 августа 2020 г.

Выход сингла "androidx.paging:paging-*:3.0.0-alpha05". Версия 3.0.0-alpha05 содержит следующие коммиты.

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

  • Теперь при пролистывании страницы правильно загружаются заранее, даже если представленные данные сильно отфильтрованы.
  • Возврат LoadResult.Error при повторной загрузке больше не приводит к тому, что доступ к объектам ошибочно запускает повторную попытку.

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

  • Спасибо Кларе Ф. (Clara F) за помощь в очистке некоторых тестов. (549612)

Версия 3.0.0-alpha04

5 августа 2020 г.

Выход сингла "androidx.paging:paging-*:3.0.0-alpha04". Версия 3.0.0-alpha04 содержит эти коммиты.

Изменения в API

  • В AsyncPagingDataDiffer и PagingDataAdapter добавлен peek() API, который позволяет получать доступ к представленным данным без загрузки страниц. (I38898, b/159104197)
  • В PagingDataAdapter и AsyncPagingDataDiffer добавлен API snapshot(), позволяющий получать представленные элементы без запуска извлечения страницы. (I566b6, b/159104197)
  • Добавлен конструктор PagingData.from(List<T>), позволяющий представлять статические списки, которые можно комбинировать с общим потоком PagingData для отображения статических списков в определенных состояниях, например до завершения начального REFRESH или просто для тестирования преобразований. (Id134d)
  • Прекращена поддержка API dataRefresh Flow и Listener, поскольку они предназначались для показа состояния представленных элементов при обновлении, но с улучшением времени обратного вызова loadState Flow и Listener, а также свойства itemCount это стало излишним (Ia19f3).
  • Добавлены оболочки совместимости RxJava3 для PagingSource и RemoteMediator (I49ef3, b/161480176).

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

  • PositionalDataSource, преобразованные в PagingSource с помощью вспомогательного инструмента toPagingSourceFactory, включая PagingSource, созданные Room, теперь правильно помечают себя для поддержки перехода. (I3e84c, b/162161201)
  • Исправлена ошибка, из-за которой использование синхронного варианта submitData иногда приводило к гонке, вызывающей ClosedSendChannelException (I4d702, b/160192222).

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

  • Благодарим Зака Свирса за добавление оберток совместимости RxJava3 от имени Slack! (I49ef3, b/161480176)

Версия 3.0.0-alpha03

22 июля 2020 г.

Выход сингла "androidx.paging:paging-*:3.0.0-alpha03". Версия 3.0.0-alpha03 содержит следующие коммиты.

Изменения в API

  • Конструктор для PagingState теперь общедоступен, что упрощает тестирование реализаций getRefreshKey() (I8bf15).
  • Скрыты варианты функции карты Kotlin DataSource от Java, чтобы устранить неоднозначность между исходным и вариантами Kotlin. (If7b23, b/161150011)
  • Избыточные API, предназначенные для удобства пользователей Kotlin, помечены как @JvmSynthetic (I56ae5).
  • Добавлены перегрузки для конструктора LoadResult.Page, в котором для itemsBefore и itemsAfter по умолчанию задано значение COUNT_UNDEFINED (I47849).
  • Существующие операторы PagingData теперь принимают методы приостановки, а для пользователей Java добавлены новые операторы mapSync, flatMapSync и filterSync, которые не приостанавливают работу. Существующие методы преобразования были перенесены в функции расширения, поэтому пользователям Kotlin теперь нужно будет импортировать их. (I34239, b/159983232)

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

  • Источники PagingSource для Room (и PositionalDataSource) теперь будут показывать начальный разделитель в составе первой страницы, чтобы пользователю не нужно было прокручивать экран, чтобы увидеть его. (I6f747, b/160257628)
  • Доступ к элементам в плейсхолдерах теперь корректно запускает загрузку PagingSource, пока не будет возвращена страница, которая соответствует запрошенному индексу после преобразования с помощью PagingData.filter() (I95625, b/158763195).
  • Исправлена ошибка, из-за которой прокрутка после того, как PagingSource возвращает ошибку, могла препятствовать повторной попытке PagingDataAdapter.retry(). (I1084f, b/160194384)
  • Исправлена ошибка, из-за которой при переходе к элементу после перетаскивания страницы могли не загружаться страницы, хотя доступ к элементу был в пределах значения prefetchDistance (Ie95ae, b/160038730).
  • Установка значения PagingConfig.maxSize больше не приводит к появлению плейсхолдеров после события удаления (I2be29, b/159667766).

Версия 3.0.0-alpha02

24 июня 2020 г.

Выход androidx.paging:paging-*:3.0.0-alpha02. Версия 3.0.0-alpha02 содержит эти коммиты.

Изменения в API

  • Добавлены перегрузки для конструктора PagingConfig со стандартными значениями по умолчанию (I39c50, b/158576040)
  • Добавлены перегрузки для конструкторов PagingDataAdapter и AsyncPagingDataDiffer с общими значениями по умолчанию (Ie91f5).
  • API адаптера, dataRefreshFlow и dataRefreshListener, теперь передают логическое значение, чтобы сообщить, является ли PagingData пустым (I6e37e, b/159054196).
  • Добавлены API RxJava и Guava для RemoteMediator: RxRemoteMediator и ListenableFutureRemoteMediator.
  • В PagingState добавлены вспомогательные функции для доступа к общим элементам, таким как isEmpty() и firstItemOrNull() (I3b5b6, b/158892717).

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

  • Теперь Pager проверяет повторное использование PagingSource в фабрике, чтобы предотвратить случайное повторное использование недопустимых PagingSource, которое приводило к неясной ошибке (I99809, b/158486430).
  • Ошибки, возникающие при обновлении RemoteMediator, больше не препятствуют загрузке PagingSource (I38b1b, b/158892717)
  • Версия submitData без приостановки больше не вызывает сбой из-за одновременного сбора данных в нескольких PagingData, если она вызывается после версии submitData с приостановкой. (I26358, b/158048877)
  • Исправлена ошибка "cannot collect twice from pager", которая могла возникать после изменения конфигурации (I58bcc, b/158784811).

Версия 3.0.0-alpha01

10 июня 2020 г.

Выход сингла "androidx.paging:paging-*:3.0.0-alpha01". Версия 3.0.0-alpha01 содержит эти коммиты.

Библиотека Paging Library обновлена до версии 3.0, в которой появилось несколько важных новых функций.

Новые функции в версии 3.0

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

  • Документация Javadoc для Paging 3 пока недоступна. Пока вы можете использовать руководства по ссылкам выше или документацию по Kotlin. (b/158614050)

Версия 2.1.2

Версия 2.1.2

18 марта 2020 г.

Выход сингла "androidx.paging:paging:2.1.2". Версия 2.1.2 содержит эти коммиты по сравнению с версией 2.1.0.

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

  • Исправлена ошибка, из-за которой в редких случаях при преобразовании позиции во время аннулирования возникала проблема IndexOutOfBoundsException.

Проблема с выпуском

  • Версия Paging 2.1.1 была выпущена по ошибке из неправильно настроенной ветки. В результате в ней оказались частично реализованные API и функции, которые должны были появиться в будущем выпуске.

  • В Paging 2.1.2 исправлена ошибка с центрированием загрузки, которая была устранена в версии 2.1.1, но в этот раз исправление было правильно перенесено в версию 2.1.0. Если вы используете версию 2.1.1, настоятельно рекомендуем перейти на новую.

Версия 2.1.1

Версия 2.1.1

18 декабря 2019 г.

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

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

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

Версия 2.1.0

Версия 2.1.0

25 января 2019 г.

Выпущена версия Paging 2.1.0 без изменений по сравнению с 2.1.0-rc01.

Версия 2.1.0-rc01

6 декабря 2018 г.

Выпущена версия Paging 2.1.0-rc01 без изменений по сравнению с 2.1.0-beta01.

Версия 2.1.0-beta01

1 ноября 2018 г.

Выпущена версия Paging 2.1.0-beta01 без изменений по сравнению с 2.1.0-alpha01.

Версия 2.1.0-alpha01

12 октября 2018 г.

В Paging 2.1.0-alpha01 добавлены две основные функции: удаление страниц и библиотеки расширений KTX для каждого артефакта. Также внесены изменения в API и исправлены ошибки.

Изменения в API

  • Добавлен параметр PagedList.Config.Builder.setMaxSize(), позволяющий ограничить количество загружаемых в память объектов.
  • Добавлен метод androidx.paging.Config() в качестве альтернативы PagedList.Config.Builder для Kotlin.
  • Добавлен метод androidx.paging.PagedList() в качестве альтернативы PagedList.Builder для Kotlin.
  • Добавлен язык Kotlin (DataSourceFactory.toLiveData()) в качестве альтернативы языку Java (LivePagedListBuilder).
  • Добавлены DataSourceFactory.toObservable() и toFlowable() в качестве альтернатив Kotlin для RxPagedListBuilder.
  • Добавлен метод AsyncPagedListDiffer.addPagedListListener() для прослушивания при замене PagedList. b/111698609
  • Добавлен вариант PagedListAdapter.onCurrentListChanged(), который передает старый и новый списки. Предыдущий вариант больше не поддерживается.
  • Добавлены варианты PagedListAdapter/AsyncPagedListDiffer.submitList(), которые принимают дополнительный обратный вызов, срабатывающий, если/когда отображается список страниц после сравнения. Это позволяет синхронизировать замену PagedList с другими обновлениями интерфейса. b/73781068
  • PagedList.getLoadedCount(), чтобы вы знали, сколько объектов в памяти. Обратите внимание, что если плейсхолдеры отключены, возвращаемое значение всегда равно .size().

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

  • Исправлено состояние гонки при сравнении, если списки используются повторно b/111591017.
  • Функция PagedList.loadAround() теперь возвращает ошибку IndexOutOfBoundsException, если индекс недопустим. Ранее в таких случаях могло произойти аварийное завершение работы с неясным исключением.
  • Исправлена ошибка, из-за которой при очень маленьком размере исходной загрузки и неизменных данных дальнейшая загрузка не выполнялась. b/113122599

Версия 2.0.0

Версия 2.0.0

1 октября 2018 г.

Paging 2.0.0 выпущен с исправлением одной ошибки.

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

  • Исправлен сбой, который мог возникать при очень быстрой прокрутке с использованием PositionalDataSource и плейсхолдеров b/114635383.

Версия 2.0.0-beta01

2 июля 2018 г.

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

  • Исправлена ошибка, из-за которой контент исчезал в некоторых случаях добавления в начало (плейсхолдеры отключены, PositionalDataSource) b/80149146.
  • (Уже выпущено в версии 1.0.1) Исправлены сбои, при которых PagedListAdapter и AsyncPagedListDiffer не могли передавать сигналы о событиях перемещения. b/110711937

Зависимости до AndroidX

Для версий Paging до AndroidX включите следующие зависимости:

dependencies {
    def paging_version = "1.0.0"

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

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

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

Версия 1.0.1

Версия 1.0.1

26 июня 2018 г.

Выпущена библиотека Paging 1.0.1 с одним исправлением в runtime. Для стабильной работы рекомендуем использовать 1.0.1. Также выпущена библиотека Paging RxJava2 1.0.1, которая идентична 1.0.0-rc1.

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

  • Исправлены сбои, при которых PagedListAdapter и AsyncPagedListDiffer не могли сигнализировать о событиях перемещения. b/110711937

RxJava2 версии 1.0.0

RxJava2 версии 1.0.0-rc1

16 мая 2018 г.

Paging RxJava2 1.0.0-rc1 переходит в статус релиз-кандидата без изменений по сравнению с первоначальной альфа-версией.

Версия 1.0.0

Версия 1.0.0-rc1

19 апреля 2018 г. Релиз-кандидат Paging

У нас нет других известных проблем или новых функций, запланированных для выпуска Paging 1.0.0. Обновите свои проекты, чтобы использовать 1.0.0-rc1, и помогите нам протестировать эту версию, чтобы мы могли выпустить надежную 1.0.0.

В этом выпуске нет изменений. Он такой же, как 1.0.0-beta1.

Версия 1.0.0-beta1

5 апреля 2018 г.

Бета-версия Paging будет доступна в течение короткого времени, после чего мы выпустим версию-кандидат. Мы не планируем дальнейших изменений API для Paging 1.0, и планка для любых изменений API очень высока.

Альфа-версия поддержки RxJava2 для библиотеки Paging выпущена в виде отдельного необязательного модуля (android.arch.paging:rxjava2:1.0.0-alpha1) и будет временно иметь отдельную нумерацию версий, пока не станет стабильной.

Эта новая библиотека предоставляет альтернативу RxJava2 для LivePagedListBuilder, способную создавать Observable и Flowable, принимая Scheduler вместо Executor:

Kotlin

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

Java

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

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

  • RxPagedListBuilder добавляется через новый артефакт android.arch.paging:rxjava2.

Изменения в API

  • Изменения в API, которые позволяют уточнить роль исполнителей в конструкторах:

    • Название setBackgroundThreadExecutor() изменено на setFetchExecutor() (в PagedList.Builder и LivePagedListBuilder)

    • Название "setMainThreadExecutor()" изменено на "setNotifyExecutor()" (в файле "PagedList.Builder").

  • Элемент PagedList.mCallbacks теперь является частным.

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

  • LivePagedListBuilder запускает начальную загрузку PagedList на указанном исполнителе, а не в пуле потоков ввода-вывода компонентов архитектуры.

  • Исправлено поведение аннулирования во внутренних оболочках DataSource (используются для реализации DataSource.map, а также загрузки PositionalDataSource с отключенными плейсхолдерами). b/77237534

Версия 1.0.0-alpha7

21 марта 2018 г.

Paging 1.0.0-alpha7 выпущен вместе с Lifecycles 1.1.1. Поскольку Paging alpha7 зависит от перемещения класса Function, упомянутого выше, вам нужно будет обновить зависимость lifecycle:runtime до android.arch.lifecycle:runtime:1.1.1.

Paging alpha7 станет последним выпуском перед бета-версией.

Изменения в API

  • У объектов DataSource.LoadParams теперь есть общедоступный конструктор, а объекты DataSource.LoadCallback стали абстрактными. Это позволяет упаковать DataSource или напрямую протестировать DataSource с помощью фиктивного обратного вызова. b/72600421
  • Преобразователи для DataSource и DataSource.Factory
    • map(Function<IN,OUT>) позволяет преобразовывать, упаковывать или оформлять результаты, загруженные с помощью DataSource.
    • mapByPage(<List<IN>,List<OUT>>) позволяет делать то же самое для пакетной обработки (например, если объекты, загруженные из SQL, должны дополнительно запрашивать отдельную базу данных, это можно сделать в виде пакета).
  • Добавлен метод PagedList#getDataSource(). b/72611341
  • Из API удалены все устаревшие классы, в том числе остатки пакета recyclerview.extensions и LivePagedListProvider.
  • DataSource.Factory теперь является не интерфейсом, а абстрактным классом, что позволяет использовать функции карт.

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

  • Изменили конструкторы, чтобы они были окончательными. b/70848565
  • Реализация Room DataSource теперь позволяет обрабатывать запросы к нескольким таблицам. Исправление содержится в Room 1.1.0-beta1 (см. выше).
  • Исправлена ошибка, из-за которой BoundaryCallback.onItemAtEndLoaded не вызывался для PositionalDataSource, если были включены плейсхолдеры и общий размер был кратен размеру страницы.

Версия 1.0.0-alpha5

22 января 2018 г.

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

  • Исправлена загрузка страниц при отключенных плейсхолдерах b/70573345
  • Дополнительное ведение журналов для отслеживания ошибки IllegalArgumentException b/70360195 (и предварительное исправление на стороне Room)
  • Исправлены ошибки в образце кода Javadoc b/70411933, b/71467637.