Paging

La biblioteca de Paging facilita la carga de datos de forma gradual y correcta en la clase RecyclerView de tu app.

En esta tabla, se enumeran todos los artefactos del grupo androidx.paging.

Artefacto Versión estable Versión potencial Versión beta Versión alfa
paging-* 3.3.4 - - -
paging-compose 3.3.4 - - -
Esta biblioteca se actualizó por última vez el 13 de noviembre de 2024

Cómo declarar dependencias

Para agregar una dependencia en Paging, debes agregar el repositorio de Maven de Google a tu proyecto. Consulta el repositorio de Maven de Google para obtener más información.

Agrega las dependencias de los artefactos que necesites en el archivo build.gradle de tu app o módulo:

Groovy

dependencies {
  def paging_version = "3.3.2"

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

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

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

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

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

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

Kotlin

dependencies {
  val paging_version = "3.3.2"

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

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

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

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

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

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

Obtén información para usar las extensiones de Kotlin en la documentación de ktx.

Para obtener más información sobre las dependencias, consulta Cómo agregar dependencias de compilación.

Comentarios

Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes de esta biblioteca antes de crear uno nuevo. Puedes agregar tu voto a un error existente haciendo clic en el botón de la estrella.

Crear un error nuevo

Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.

Versión 3.3

Versión 3.3.4

13 de noviembre de 2024

Lanzamiento de androidx.paging:paging-*:3.3.4. La versión 3.3.4 contiene estas confirmaciones.

Correcciones de errores

  • Las pruebas de unidades de Android que extraen Paging 3.3 o versiones posteriores ya no arrojarán un error como Method isLoggable in android.util.Log not mocked. (Ia9400, b/331684448).

Versión 3.3.2

7 de agosto de 2024

Lanzamiento de androidx.paging:paging-*:3.3.2. La versión 3.3.2 contiene estas confirmaciones.

Nuevas funciones

  • paging-common y paging-testing agregaron nuevos destinos de Kotlin multiplataforma: watchos, tvos y linuxArm64 (90c9768) (53e0eca).

Versión 3.3.1

24 de julio de 2024

Lanzamiento de androidx.paging:paging-*:3.3.1. La versión 3.3.1 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió un problema por el que AsyncPagingDataDiffer o las APIs compiladas sobre él, como el PagingDataAdapter que se usa con RecyclerView, no podían activar más cargas cuando se actualizaba la fuente de datos de respaldo mientras se desplazaba. (I60ca5, b/352586078)
  • Se corrigió una falla que se producía cuando se quitaban elementos de la fuente de datos de respaldo mientras se desplazaba un RecyclerView con un PagingDataAdapter o AsyncPagingDataDiffer. (I8c65a, b/347649763).

Versión 3.3.0

14 de mayo de 2024

Lanzamiento de androidx.paging:paging-*:3.3.0. La versión 3.3.0 contiene estas confirmaciones.

Cambios importantes desde la versión 3.2.0

  • PagingDataPresenter ahora es una clase pública. Los presentadores multiplataforma ahora se pueden compilar en PagingDataPresenter en lugar de requerir APIs de paginación internas o AsyncPagingDataDiffer de paging-runtime.
  • Se agregaron nuevos métodos auxiliares LoadStates y CombinedLoadStates en hasError y isIdle para verificar si LoadStates está en estado de error o NotLoading, respectivamente. También se agregó un nuevo método de extensión de Kotlin awaitNotLoading() en Flow<CombinedLoadStates> que espera hasta que una carga se establezca en el estado NotLoading o de error.
  • PagingData.empty() ahora despacha estados NotLoading de forma predeterminada, a menos que se pasen LoadStates personalizados a su constructor. Esto se aleja del comportamiento existente en el que no se envía LoadStates cuando se envía a un PagingDataAdapter o se envían estados de carga cuando se recopilan como LazyPagingItems. Cuando se recopile como LazyPagingItems, ahora también mostrará una lista vacía de inmediato después de la composición inicial.

Compatibilidad multiplataforma de Kotlin

El paginado ahora envía artefactos compatibles con Kotlin multiplataforma, en gran parte gracias al trabajo de transferencia del proyecto multiplatform-paging de CashApp.

  • paging-common trasladó todas las APIs de Paging 3 a common y ahora es compatible con jvm y iOS, además de Android.
  • paging-testing trasladó su código a common y ahora es compatible con jvm y iOS, además de Android.
  • paging-compose trasladó su código a common y envía un artefacto de Android que coincide con la compatibilidad multiplataforma de androidx.compose.
  • paging-runtime, paging-guava, paging-rxjava2 y paging-rxjava3 solo se mantendrán en Android.

Versión 3.3.0-rc01

1 de mayo de 2024

Se lanzó androidx.paging:paging-*:3.3.0-rc01 sin cambios en Paging 3.3.0-beta01. La versión 3.3.0-rc01 contiene estas confirmaciones.

Versión 3.3.0-beta01

3 de abril de 2024

Lanzamiento de androidx.paging:paging-*:3.3.0-beta01 sin cambios notables. La versión 3.3.0-beta01 contiene estas confirmaciones.

Versión 3.3.0-alpha05

20 de marzo de 2024

Lanzamiento de androidx.paging:paging-*:3.3.0-alpha05. La versión 3.3.0-alpha05 contiene estas confirmaciones.

Cambios en la API

  • El paginado ahora usa la anotación @MainThread de AndroidX Annotation para el código común. (I78f0d, b/327682438)

Versión 3.3.0-alpha04

6 de marzo de 2024

Lanzamiento de androidx.paging:paging-*:3.3.0-alpha04. La versión 3.3.0-alpha04 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigieron errores menores de documentación relacionados con la adición de compatibilidad multiplataforma de Kotlin. (aosp/2950785)

Versión 3.3.0-alpha03

7 de febrero de 2024

Lanzamiento de androidx.paging:paging-*:3.3.0-alpha03. La versión 3.3.0-alpha03 contiene estas confirmaciones.

Nuevas funciones

  • PagingDataPresenter ahora es una clase pública. Los presentadores multiplataforma ahora se pueden compilar en PagingDataPresenter en lugar de requerir APIs de paginación internas o AsyncPagingDataDiffer de paging-runtime. (Id1f74, b/315214786).
  • Se agregaron nuevos métodos auxiliares LoadStates y CombinedLoadStates para verificar si LoadStates está en estado de error o NotLoading. También se agregó una nueva API que espera en un LoadStateFlow hasta que una carga se establezca en NotLoading o en el estado de error. (Id6c67).

Cambio de comportamiento

  • PagingData.empty() ahora despacha estados NotLoading de forma predeterminada, a menos que se pasen LoadStates personalizados a su constructor. Esto se aleja del comportamiento existente en el que no se envía LoadStates cuando se envía a un PagingDataAdapter o se envían estados de carga cuando se recopilan como LazyPagingItems. Cuando se recopile como LazyPagingItems, ahora también mostrará una lista vacía de inmediato después de la composición inicial. (I4d11d, b/301833847).

Versión 3.3.0-alpha02

20 de septiembre de 2023

Lanzamiento de androidx.paging:paging-*:3.3.0-alpha02. La versión 3.3.0-alpha02 contiene estas confirmaciones.

Compatibilidad multiplataforma de Kotlin

El paginado ahora envía artefactos compatibles con Kotlin multiplataforma, en gran parte gracias al trabajo de transferencia del proyecto multiplatform-paging de CashApp. Esto nos permitirá evitar la divergencia entre dos repositorios y mantenerlos compatibles.

  • paging-common trasladó todas las APIs de Paging 3 a common y ahora es compatible con jvm y iOS, además de Android.
  • paging-testing trasladó su código a common y ahora es compatible con jvm y iOS, además de Android.
  • paging-compose trasladó su código a common y envía un artefacto de Android que coincide con la compatibilidad multiplataforma de androidx.compose.
  • paging-runtime, paging-guava, paging-rxjava2 y paging-rxjava3 solo se mantendrán en Android.

Cambios en la API

  • La interfaz pública de Logger, que solo estaba destinada al uso interno, dejó de estar disponible (I16e95, b/288623117).

Contribución externa

Versión 3.3.0-alpha01

20 de septiembre de 2023

  • Esta es la primera versión multiplataforma de las bibliotecas de androidx.paging. Esta versión solo tiene artefactos *-jvm y *-android. Para las variantes de macOS, iOS y Linux, usa 3.3.0-alpha02.

Versión 3.2

Versión 3.2.1

6 de septiembre de 2023

Lanzamiento de androidx.paging:paging-*:3.2.1. La versión 3.2.1 contiene estas confirmaciones.

Correcciones de errores

  • Se solucionó un problema en el que la API de asSnapshot() del artefacto de pruebas de paginación se bloqueaba cuando se pasaba un flujo compilado con PagingData.from(List), ya que asSnapshot() no tenía información sobre cuándo finalizaba la carga (a diferencia de la sobrecarga de PagingData.from(List, LoadStates)). Esta solución alternativa solo funciona para flujos completables (p.ej., un flowOf(PagingData.from(...))). Para flujos no completables (p.ej., MutableStateFlow, usa la sobrecarga de PagingData.from que proporciona LoadStates). (I502c3).
  • Paging Compose ahora usa AndroidUiDispatcher.Main de forma interna para garantizar que los datos nuevos estén disponibles en el mismo fotograma cuando se complete la carga. (Ia55af).

Versión 3.2.0

26 de julio de 2023

Lanzamiento de androidx.paging:paging-*:3.2.0. La versión 3.2.0 contiene estas confirmaciones.

Cambios importantes desde la versión 3.1.0

  • Paging Compose alcanzó la estabilidad de la API y se volvió a combinar con el resto de Paging, donde su versión ahora coincide con todos los demás artefactos de Paging. Entre los cambios desde la versión 3.1.0, se incluyen los siguientes:
    • Se agregó compatibilidad para obtener una vista previa de una lista de datos falsos. Para ello, crea un PagingData.from(fakeData) y une ese PagingData en un MutableStateFlow (p. ej., MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Pasa este flujo a los elementos componibles @Preview como receptor para que collectAsLazyPagingItems() obtenga una vista previa.
    • Compatibilidad con todos los diseños diferidos, como LazyVerticalGrid y HorizontalPager, así como con componentes diferidos personalizados de las bibliotecas de Wear y TV. Esto se logró a través de los nuevos métodos de extensión LazyPagingItems de nivel inferior itemKey y itemContentType, que te ayudan a implementar los parámetros key y contentType en las APIs estándar de items que ya existen para LazyColumn, LazyVerticalGrid, así como sus equivalentes en APIs como HorizontalPager.
    • items(lazyPagingItems) y itemsIndexed(lazyPagingItems), que solo admiten LazyListScope, dejaron de estar disponibles.
  • Nuevo artefacto paging-testing que proporciona APIs diseñadas para realizar pruebas de unidades en cada capa de tu app y su integración con Paging de forma aislada. Por ejemplo, incluye lo siguiente:
    • Una clase TestPager que te permite validar el comportamiento de tu propia implementación de PagingSource personalizada independientemente del objeto Pager y la IU real.
    • ​​APIs de asPagingSourceFactory para transformar un Flow<List<Value>> o un List<Value> estático en un PagingSourceFactory que se puede pasar a un objeto Pager en pruebas
    • Extensión asSnapshot de Kotlin en Flow<PagingData<Value>>, que convierte el elemento Flow<PagingData<Value>> en un elemento List<Value> directo. asSnapshot lambda te permite imitar la IU de tu app con APIs como scrollTo o appendScrollWhile para que puedas verificar que la instantánea de los datos sea correcta en cualquier momento de tu conjunto de datos paginados.
  • Se agregaron registros predeterminados para exponer la información de depuración de paginación en dos niveles: VERBOSE y DEBUG. Los registros se pueden habilitar mediante el comando adb shell setprop log.tag.Paging [DEBUG|VERBOSE]. Esto se aplica tanto a la paginación con vistas como a la paginación con Compose.
  • Se agregaron constructores para PagingDataAdapter y AsyncPagingDataDiffer, que aceptan CoroutineContext en lugar de CoroutineDispatcher
  • Se agregó una nueva interfaz funcional PagingSourceFactory que proporciona una plataforma de API más explícita que las lambdas anteriores () -> PagingSource. Esta fábrica se puede usar para crear una instancia de Pager.

Versión 3.2.0-rc01

21 de junio de 2023

Lanzamiento de androidx.paging:paging-*:3.2.0-rc01. La versión 3.2.0-rc01 contiene estas confirmaciones.

Contribución externa

  • Gracias Veyndan por contribuir a alejar el paginado de las especificaciones de Android/JVM. (#553, #554, #555, #559)

Versión 3.2.0-beta01

7 de junio de 2023

Lanzamiento de androidx.paging:paging-*:3.2.0-beta01. La versión 3.2.0-beta01 contiene estas confirmaciones.

Paging Compose

  • Paging Compose alcanzó oficialmente la estabilidad de la API. Por lo tanto, la versión se actualizó de 1.0.0-alpha20 para que coincida con la versión de todos los demás artefactos de paginación.

Cambios en la API

Versión 3.2.0-alpha06

24 de mayo de 2023

Lanzamiento de androidx.paging:paging-*:3.2.0-alpha06. La versión 3.2.0-alpha06 contiene estas confirmaciones.

Nuevas funciones

  • Se agregó una nueva interfaz funcional PagingSourceFactory que proporciona una plataforma de API más explícita que las lambdas () -> PagingSource existentes. Esta fábrica se puede usar para crear una instancia de Pager. (I33165, b/280655188)
  • Se agregó una nueva API de paging-testing de List<Value>.asPagingSourceFactory() para obtener un PagingSourceFactory que solo se cargue desde una lista inmutable de datos. La extensión existente en Flow<List<Value>> aún debe usarse para realizar pruebas con varias generaciones de datos estáticos. (Id34d1, b/280655188)

Cambios en la API

  • Todas las APIs públicas en las pruebas de paginación ahora están con anotaciones @VisibleForTesting para garantizar que se usen solo en pruebas. (I7db6e)
  • La API de asSnapshot ya no requiere pasar un CoroutineScope. Ahora, de forma predeterminada, usa el contexto heredado de su alcance superior. (Id0a78, b/282240990).
  • Se reordenaron los parámetros del constructor TestPager para que coincidan de forma intuitiva con el orden de los parámetros reales del constructor Pager (I6185a).
  • Se migró el uso de la prueba de paginación del tipo lambda () -> PagingSource<Key, Value> al tipo PagingSourceFactory<Key, Value>. (I4a950, b/280655188)

Cambios en el comportamiento

  • Ya no se requiere el despachador principal para ejecutar pruebas de paginación de asSnapshot. Si lo configuras, ya no se realizarán cambios en el comportamiento de la prueba. (Ie56ea).

Versión 3.2.0-alpha05

3 de mayo de 2023

Lanzamiento de androidx.paging:paging-*:3.2.0-alpha05. La versión 3.2.0-alpha05 contiene estas confirmaciones.

Cambios en la API

  • La API de Paging Testing de asSnapshot ahora establece de forma predeterminada su parámetro loadOperations en una lambda vacía. Esto permite llamar a asSnapshot sin pasar ninguna operación de carga para recuperar los datos de la carga de actualización inicial. (Ied354, b/277233770).

Mejoras en la documentación

  • Se actualizó la documentación sobre asPagingSourceFactory() para aclarar que es un método de extensión en un Flow que muestra una fábrica reutilizable para generar instancias de PagingSource. (I5ff4f, I705b5).
  • Se actualizó la documentación del constructor LoadResult.Page para aclarar la necesidad de anular itemsBefore y itemsAfter para admitir el salto. (Ied354).

Contribuciones externas

Versión 3.2.0-alpha04

8 de febrero de 2023

Lanzamiento de androidx.paging:paging-*:3.2.0-alpha04. La versión 3.2.0-alpha04 contiene estas confirmaciones.

Pruebas de Paging

  • El artefacto paging-testing ahora contiene un método asPagingSourceFactory para crear un pagingSourceFactory a partir de un Flow<List<Value>> que se suministrará a un Pager. Cada List<Value>> que emite el flujo representa una generación de datos paginados. Esto facilita las pruebas de paginación, por ejemplo, en las transformaciones de PagingData, ya que falsifican una fuente de datos para que la recopile el localizador (I6f230, b/235528239)
  • Se expandió el artefacto paging-testing con nuevas APIs adecuadas para verificar que los datos contenidos en un Flow<PagingData<T>> sean correctos. Se puede usar, por ejemplo, para confirmar la salida de un objeto Flow<PagingData<T>> desde tu capa ViewModel.

    Para ello, usa la extensión asSnapshot de Kotlin en el objeto Flow<PagingData<Value>>, que convierte el elemento Flow<PagingData<Value>> en un elemento List<Value> directo. El objeto asSnapshot lambda te permite imitar la IU de tu app con APIs como scrollTo o appendScrollWhile de una manera repetible y coherente para que puedas verificar que la instantánea de los datos sea correcta en cualquier momento. en tu conjunto de datos paginados.

    // 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 es un método suspend que se espera que se ejecute en runTest. Consulta Cómo probar corrutinas de Kotlin en Android para obtener más información (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239).

Cambios en la API

  • Las llamadas de la IU a getItem y peek en AsyncPagingDataDiffer y PagingDataAdapter ahora están marcadas correctamente como llamadas solo en el subproceso principal (I699b6).
  • Se quitaron los comodines de los tipos genéricos que usa TestPager, lo que facilita el consumo de los resultados de esos métodos en código escrito en el lenguaje de programación Java (I56c42).

Versión 3.2.0-alpha03

24 de octubre de 2022

Lanzamiento de androidx.paging:paging-*:3.2.0-alpha03. La versión 3.2.0-alpha03 contiene estas confirmaciones.

Pruebas de Paging

Esta actualización incluye un artefacto nuevo: paging-testing. Este artefacto proporciona APIs diseñadas para realizar pruebas de unidades en cada capa de tu app y su integración con Paging de forma aislada.

Por ejemplo, esta primera versión incluye una clase TestPager que te permite validar el comportamiento de tu propia implementación de PagingSource independientemente del elemento Pager y la IU real que en general necesitarías para simular la integración de Paging extremo a extremo.

TestPager debe considerarse falsa: un doble de prueba que refleja la implementación real de Pager y, al mismo tiempo, proporciona una superficie de API simplificada a fin de probar un objeto PagingSource. Estas son APIs de suspend y deben ejecutarse dentro de runTest, como se describe en la guía Cómo probar corrutinas de Kotlin en Android.

Puedes encontrar un ejemplo de estas APIs en uso en las pruebas room-paging, que se refactorizaron para usar TestPager.

Cambios en la API

  • Habilita una iteración conveniente en LoadResult.Page.data hasta LoadResult.Page.iterator(). De forma indirecta, esto permite el uso del método flatten de la biblioteca estándar de Kotlin cuando se le da una List<LoadResult.Page> como el caso de la propiedad pages de PagingState que se pasa al método PagingSource.getRefreshKey (Ie0718).

Versión 3.2.0-alpha02

10 de agosto de 2022

Lanzamiento de androidx.paging:paging-*:3.2.0-alpha02. La versión 3.2.0-alpha02 contiene estas confirmaciones.

Nuevas funciones

  • Paging ahora proporciona registros a través de las clases AsyncPagingDataDiffer o PagingDataAdapter para exponer la información de depuración recopilada de PagingData.
  • Los registros se pueden habilitar mediante el comando adb shell adb shell setprop log.tag.Paging [DEBUG|VERBOSE].(b/235527159).

Correcciones de errores

  • Se corrigió el error del constructor PagingDataDiffer faltante cuando se usaba paging-common:3.2.0-alpha01 con el entorno de ejecución paging-runtime:3.1.1 o versiones anteriores (b/235256201).

Versión 3.2.0-alpha01

1 de junio de 2022

Se lanzó androidx.paging:paging-*:3.2.0-alpha01. La versión 3.2.0-alpha01 contiene estas confirmaciones.

Cambios en la API

  • Se agregaron constructores para PagingDataAdapter y AsyncPagingDataDiffer, que aceptan CoroutineContext en lugar de CoroutineDispatcher (Idc878).
  • De forma predeterminada, PagingData.from() y PagingData.empty() ya no afectarán a CombinedLoadStates en el lado del presentador. Se agregó una nueva sobrecarga que permite pasar sourceLoadStates y remoteLoadStates a estos constructores para mantener el comportamiento existente de configurar LoadStates como una terminal completa (es decir, NotLoading(endOfPaginationReached = false)) con la opción de incluir estados remotos, si es necesario. Si no se pasa LoadStates, se mantendrá el elemento CombinedLoadStates anterior en el lado del presentador cuando reciba la PagingData estática (Ic3ce5, b/205344028).

Correcciones de errores

  • El resultado de PagingSource.getRefreshKey() ahora se prioriza correctamente en initialKey en los casos en los que se mostrará un valor nulo, pero se estableció un valor initialKey no nulo (Ic9542, b/230391606).

Contribución externa

  • Se actualizó la API de :compose:ui:ui-test (updateApi) debido a la migración de test-coroutines-lib (I3366d).

Versión 3.1

Versión 3.1.1

9 de marzo de 2022

Lanzamiento de androidx.paging:paging-*:3.1.1. La versión 3.1.1 contiene estas confirmaciones.

Correcciones de errores

  • Se quitaron los eventos LoadState.NotLoading intermedios entre las generaciones que .cachedIn() insertó incorrectamente. Este cambio facilita la reacción ante cambios de LoadState, ya que se quitan los eventos LoadState.NotLoading redundantes que se produjeron entre los reintentos de cargas con errores, durante la actualización o la invalidación.

Versión 3.1.0

17 de noviembre de 2021

Lanzamiento de androidx.paging:paging-*:3.1.0. La versión 3.1.0 contiene estas confirmaciones.

Cambios importantes desde la versión 3.0.0

  • Las API de Flow<PagingData>.observable y Flow<PagingData>.flowable ya no son experimentales.
  • Cambios de comportamiento en LoadState:
    • endOfPaginationReached ahora es siempre false para LoadType.REFRESH en PagingSource y RemoteMediator.
    • Ahora, los LoadStates de Paging esperan valores válidos de PagingSource y RemoteMediator antes de emitirse de manera descendente. En algunos casos, las nuevas generaciones de PagingData siempre iniciarán correctamente con Loading para el estado de actualización, en lugar de restablecerse en NotLoading de manera incorrecta.
    • .loadStateFlow y .addLoadStateListener de las API de presentador ya no envían de forma redundante una inicial CombinedLoadStates que siempre tiene estados de mediador establecidos en null.
  • La cancelación en generaciones pasadas ahora se produce con anticipación por invalidación o nuevas generaciones. Ya no debería ser obligatorio usar .collectLatest en Flow<PagingData>, aunque se recomienda hacerlo.
  • Se agregó PagingSource.LoadResult.Invalid como un tipo de datos que se muestra nuevo de PagingSource.load, lo que hace que Paging descarte las solicitudes de carga pendientes o futuras para este PagingSource y lo invalide. Este tipo de datos que se muestra se diseñó para controlar los datos potencialmente no válidos o inactivos que se pueden mostrar desde la base de datos o la red.
  • Se agregaron las API de presentador .onPagesPresented y .addOnPagesUpdatedListener, que se activan de forma síncrona a medida que se presentan las páginas en la IU. Las actualizaciones de página pueden ocurrir en las siguientes situaciones:
    • Se completa la carga inicial de una generación nueva de PagingData, sin importar si esta generación contiene algún cambio en los elementos presentados. Por ejemplo, se seguirá activando esta devolución de llamada cuando una generación nueva complete la carga inicial sin actualizaciones porque la lista es exactamente la misma.
    • Se inserta una página, incluso aunque esta no contiene elementos nuevos.
    • Se omite una página, incluso si está vacía.

Versión 3.1.0-rc01

3 de noviembre de 2021

Lanzamiento de androidx.paging:paging-*:3.1.0-rc01. La versión 3.1.0-rc01 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió una condición de carrera + fuga de memoria en .cachedIn() en casos en los que Paging envió varios eventos de carga descendentes cuando no había observadores o mientras un observador cambiaba a un nuevo PagingData. (Ib682e)

Versión 3.1.0-beta01

13 de octubre de 2021

Se lanzó androidx.paging:paging-*:3.1.0-beta01. La versión 3.1.0-beta01 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió un problema en el que se eliminaban muchos accesos rápidos a elementos en prefetchDistance, lo que provocaba que las cargas de página se detuvieran. En particular, es un problema que se genera cuando muchos elementos se presentan al mismo tiempo en un orden que prioriza la carga en función de la dirección del desplazamiento del usuario. Estos accesos a elementos ahora se almacenan en búfer y se priorizan de forma síncrona para evitar que se pierdan. (aosp/1833273)

Versión 3.1.0-alpha04

29 de septiembre de 2021

Lanzamiento de androidx.paging:paging-*:3.1.0-alpha04. La versión 3.1.0-alpha04 contiene estas confirmaciones.

Cambios en la API

  • Las API de Flow<PagingData>.observable y Flow<PagingData>.flowable ya no son experimentales. (Ie0bdd)

Correcciones de errores

  • En LoadStates, endOfPaginationReached ahora es false siempre para LoadType.REFRESH. Anteriormente, era posible que endOfPaginationReached fuera true para REFRESH de RemoteMediator, pero no para PagingSource. Ahora, se consolida este comportamiento para que siempre muestre false, ya que nunca tiene sentido que REFRESH sea terminal y ahora se documenta como parte del contrato de la API en LoadStates. Cuando decidas si se finaliza la paginación, siempre debes hacerlo con respecto a las instrucciones APPEND o PREPEND. (I047b6)
  • Los LoadStates de Paging ahora esperan valores válidos de PagingSource y RemoteMediator antes de emitirse de manera descendente entre generaciones. Esto evita que las nuevas generaciones de PagingData envíen NotLoading en CombinedLoadStates.source.refresh si ya era Loading. Ahora, las nuevas generaciones de PagingData siempre comenzarán con Loading para el estado de la actualización, en lugar de restablecerse por primera vez en NotLoading de manera incorrecta en algunos casos.

    La cancelación en generaciones pasadas ahora se produce con anticipación por invalidación o nuevas generaciones. Ya no debería ser obligatorio usar .collectLatest en Flow<PagingData>, aunque es muy recomendable hacerlo. (I0b2b5, b/177351336, b/195028524)

  • .loadStateFlow y .addLoadStateListener de las API de presentador ya no envían de forma redundante una inicial CombinedLoadStates que siempre tiene estados de mediador establecidos en null y estados de origen establecidos enNotLoading(endOfPaginationReached = false). Eso significa lo siguiente:

    1. Los estados de mediador siempre se propagarán si usas RemoteMediator.
    2. El registro de un objeto de escucha loadState nuevo o un recopilador nuevo en .loadStateFlow ya no emitirá de inmediato el valor actual si no recibió un CombinedLoadStates real de PagingData. Esto puede suceder si se inicia un recopilador u objeto de escucha antes de que se envíe un elemento PagingData. (I1a748)

Versión 3.1.0-alpha03

21 de julio de 2021

Lanzamiento de androidx.paging:paging-*:3.1.0-alpha03. La versión 3.1.0-alpha03 contiene estas confirmaciones.

Cambios en la API

  • Se agregó a PagingSource un tercer LoadResult.Invalid de tipo de datos que se muestra de LoadResult. Cuando PagingSource.load muestre LoadResult.Invalid, la paginación descartará los datos cargados e invalidará PagingSource. Este tipo de datos que se muestra está diseñado para controlar los datos potencialmente no válidos o inactivos que se pueden mostrar desde la base de datos o la red.

    Por ejemplo, si se escribe en la base de datos subyacente, pero PagingSource no se invalida a tiempo, es posible que muestre resultados incoherentes si su implementación depende de la inmutabilidad del conjunto de datos de copia de seguridad desde el que se carga (p. ej., implementaciones de db de estilo LIMIT OFFSET). En este caso, te recomendamos que verifiques la invalidación después de la carga y muestres LoadResult.Invalid, lo que causa que Paging descarte cualquier solicitud de carga pendiente o futura para PagingSource y la invalide.

    Este tipo de datos que se muestra también es compatible con la API de Paging2 que aprovecha LivePagedList o RxPagedList. Cuando se usa PagingSource con las API de PagedList de Paging2, PagedList se desconecta de inmediato, lo que detiene otros intentos de carga de datos en PagedList y activa la invalidación en PagingSource.

    LoadResult es una clase sellada, lo que significa que este cambio no es compatible con la fuente, de modo que los casos de uso en los que se recurre directamente a PagingSource.load deberán controlar LoadResult.Invalid en el tiempo de compilación. Por ejemplo, los usuarios de Kotlin que aprovechen de forma exhaustiva cuándo verificar el tipo de datos que se muestra deberán agregar una verificación para el tipo no válido. (Id6bd3, b/191806126, b/192013267)

Correcciones de errores

  • Las devoluciones de llamada de invalidación que se agregaron a través de PagingSource.registerInvalidatedCallback o DataSource.addInvalidatedCallback ahora se activan automáticamente si estaban registradas en un PagingSource o DataSource que ya no era válido. De esta manera, se soluciona una condición de carrera que causaba que Paging descartara las señales de invalidación y se detuviera cuando se brindaba una fuente que ya no era válida durante la carga inicial. Además, las devoluciones de llamada no válidas ahora se quitan de manera correcta después de que se activan, ya que se garantiza que se las llamará como máximo una vez. (I27e69)
  • Si se envía el valor inicial del marcador de posición (InitialPagedList) desde una transmisión de PagedList cuya instancia se acaba de crear, p. ej., LivePagedListBuilder o RxPagedListBuilder, ya no se borrarán los datos cargados anteriormente.

Versión 3.1.0-alpha02

1 de julio de 2021

Lanzamiento de androidx.paging:paging-*:3.1.0-alpha02. La versión 3.1.0-alpha02 contiene estas confirmaciones.

Nuevas funciones

  • Se agregaron las API de presentación de objetos de escucha y flujos onPagesPresented, que se activan inmediatamente después de que se actualizan las páginas presentadas en la IU.

    Dado que estas actualizaciones son síncronas con la IU, puedes llamar a métodos de adaptador, como .snapshot y .getItemCount, para inspeccionar el estado después de que se aplique la actualización. Ten en cuenta que se dejó .snapshot() para llamarlo de manera explícita, ya que puede ser costoso hacerlo en cada actualización.

    Las actualizaciones de página pueden ocurrir en las siguientes situaciones:

    • Se completa la carga inicial de una generación nueva de PagingData, sin importar si esta generación contiene algún cambio en los elementos presentados. Por ejemplo, se seguirá activando esta devolución de llamada cuando una generación nueva complete la carga inicial sin actualizaciones porque la lista es exactamente la misma.
    • Se inserta una página, incluso si la página insertada no contiene elementos nuevos.
    • Se omite una página, incluso si está vacía. (I272c9, b/189999634).

Correcciones de errores

  • El acceso a PagedList.dataSource desde el valor inicial producido por LivePagedList o RxPagedList ya no arrojará una excepción IllegalStateException de forma incorrecta. (I96707).

Versión 3.1.0-alpha01

2 de junio de 2021

Lanzamiento de androidx.paging:paging-*:3.1.0-alpha01. La versión 3.1.0-alpha01 contiene estas confirmaciones.

Cambios en la API

  • Ahora, las clases que brinda paging-rxjava3 se incluyen en el paquete androidx.paging.rxjava3, para que no entren en conflicto con paging-rxjava2. (Ifa7f6)

Correcciones de errores

  • Se corrigió un error por el que, en ocasiones, Paging enviaba distintos eventos no-op a RecyclerView, por lo que algunos objetos de escucha podían activarse antes. (Ic507f, b/182510751)

Contribución externa

  • Se agregaron API obsoletas de PagedList compat al artefacto rxjava3. (Id1ce2, b/182497591)

Paging Compose versión v1.0.0

Versión 1.0.0-alpha20

24 de mayo de 2023

Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha20. La versión 1.0.0-alpha20 contiene estas confirmaciones.

Nuevas funciones

  • Paging Compose ahora admite la vista previa de una lista de datos falsos. Para ello, crea un PagingData.from(fakeData) y une ese PagingData en un MutableStateFlow (p. ej., MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Si usas esos datos como entrada en tu @Preview, las llamadas a collectAsLazyPagingItems() proporcionarán LazyPagingItems que se puede obtener una vista previa. (I8a78d, b/194544557)

Correcciones de errores

  • Los datos almacenados en caché de pager.flow.cachedIn que se recopilaron en LazyPagingItems ahora estarán disponibles de inmediato después de la restauración del estado sin requerir la recopilación asíncrona. Esto significa que los datos almacenados en la caché estarán listos para la presentación inmediatamente después de la composición inicial después de que se restablezca el estado. (I97a60, b/177245496)

Versión 1.0.0-alpha19

3 de mayo de 2023

Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha19. La versión 1.0.0-alpha19 contiene estas confirmaciones.

Compatibilidad con todos los diseños diferidos

Anteriormente, Paging Compose proporcionaba extensiones personalizadas de items y itemsIndexed en LazyListScope, lo que significaba que no podías usar Paging Compose con otros diseños diferidos, como LazyVerticalGrid, HorizontalPager o cualquier otro componente diferido personalizado que proporcionaban las bibliotecas de Wear y TV. La principal actualización de esta versión es abordar esta falta de flexibilidad.

Para admitir más diseños diferidos, necesitábamos compilar APIs en una capa diferente. En lugar de proporcionar una API de items personalizada para cada diseño diferido, Paging Compose ahora proporciona métodos de extensión de nivel ligeramente más bajos en LazyPagingItems en itemKey y itemContentType. Estas APIs se enfocan en ayudarte a implementar los parámetros key y contentType en las APIs estándar de items que ya existen para LazyColumn y LazyVerticalGrid, así como sus equivalentes en APIs como HorizontalPager. (Ifa13b, Ib04f0, b/259385813).

Esto significa que la compatibilidad con un LazyVerticalGrid se vería de la siguiente manera:

// 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)
  }
}

Para ver más ejemplos de cómo usar estas nuevas APIs, consulta nuestras muestras.

Si bien estos cambios hacen que los ejemplos de LazyColumn y LazyRow sean algunas líneas más largos, consideramos que la coherencia en todos los diseños diferidos era un factor importante para quienes usarán Paging Compose en el futuro. Por ese motivo, las extensiones existentes para LazyListScope ahora son obsoletas. (I0c459, I92c8f, b/276989796)

Cambios en la API

  • Para facilitar la migración a las nuevas APIs, las funciones de extensión items y itemsIndexed en LazyListScope ahora admiten un parámetro contentType, lo que refleja la compatibilidad con las nuevas APIs. (Ib1918, b/255283378).

Actualizaciones de dependencias

  • Paging Compose actualizó su dependencia de Compose 1.0.5 a Compose 1.2.1. (Ib1918, b/255283378).

Versión 1.0.0-alpha18

8 de febrero de 2023

Se lanzó androidx.paging:paging-compose:1.0.0-alpha18 sin cambios. La versión 1.0.0-alpha18 contiene estas confirmaciones.

Versión 1.0.0-alpha17

24 de octubre de 2022

Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha17. La versión 1.0.0-alpha17 contiene estas confirmaciones.

Nuevas funciones

  • Se agregó compatibilidad para un CoroutineContext personalizado cuando se llama a collectLazyPagingItems (I7a574, b/243182795, b/233783862).

Versión 1.0.0-alpha16

10 de agosto de 2022

Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha16. La versión 1.0.0-alpha16 contiene estas confirmaciones.

Nuevas funciones

  • Paging ahora proporciona registros a través de la clase LazyPagingItems para exponer la información de depuración recopilada de PagingData.
  • Los registros se pueden habilitar mediante el comando adb shell setprop log.tag.Paging [DEBUG|VERBOSE] de adb shell. ([b/235527159}(https://issuetracker.google.com/issues/235527159))

Correcciones de errores

  • Se corrigió el error del constructor PagingDataDiffer faltante cuando se usaba paging-compose:1.0.0-alpha15 con paging-common:3.1.1 o versiones anteriores (b/235256201, b/239868768).

Versión 1.0.0-alpha15

1 de junio de 2022

Se lanzó androidx.paging:paging-compose:1.0.0-alpha15. La versión 1.0.0-alpha15 contiene estas confirmaciones.

Cambios en la API

  • Se agregaron constructores para PagingDataAdapter y AsyncPagingDataDiffer, que aceptan CoroutineContext en lugar de CoroutineDispatcher (Idc878).

Correcciones de errores

  • LazyPagingItems ahora establece el elemento loadState inicial para que se actualice LoadState.Loading (I55043, b/224855902).

Versión 1.0.0-alpha14

13 de octubre de 2021

Se lanzó androidx.paging:paging-compose:1.0.0-alpha14. La versión 1.0.0-alpha14 contiene estas confirmaciones.

Versión 1.0.0-alpha13

29 de septiembre de 2021

Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha13. La versión 1.0.0-alpha13 contiene estas confirmaciones.

Cambios en la API

  • Se reemplazó la función LazyPagingItems.snapshot() por la propiedad LazyPagingItems.itemSnapshotList. (Ie2da8)
  • Se quitó el objeto LazyPagingItems.getAsState() obsoleto. (Ie65e4)

Versión 1.0.0-alpha12

21 de julio de 2021

Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha12. La versión 1.0.0-alpha12 contiene estas confirmaciones.

Cambios en la API

  • Los objetos items(lazyPagingItems) y itemsIndexed(lazyPagingItems) que se usan para conectar Paging con LazyColumn/Row ahora aceptan el parámetro clave de opción que te permite especificar una clave estable que representa el elemento. Puedes obtener aquí más información sobre las claves. (I7986d)
  • La función lazyPagingItems.getAsState(index) dejó de estar disponible. Usa lazyPagingItems[index] en su lugar. (I086cb, b/187339372)

Versión 1.0.0-alpha11

30 de junio de 2021

Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha11. La versión 1.0.0-alpha11 contiene estas confirmaciones.

Versión 1.0.0-alpha10

2 de junio de 2021

Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha10. La versión 1.0.0-alpha10 contiene estas confirmaciones.

Versión 1.0.0-alpha09

18 de mayo de 2021

Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha09. La versión 1.0.0-alpha09 contiene estas confirmaciones.

Correcciones de errores

  • itemCount y el método get de item de LazyPagingItems ahora son observables, lo que permite que se utilice con LazyVerticalGrid también. (Ie2446, b/171872064, b/168285687)

Compatibilidad con Compose

  • androidx.paging:paging-compose:1.0.0-alpha09 solo es compatible con Compose 1.0.0-beta07 y versiones posteriores.

Versión 1.0.0-alpha08

24 de febrero de 2021

Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha08. La versión 1.0.0-alpha08 contiene estas confirmaciones.

Se actualizó para integrarse a Compose 1.0.0-beta01.

Versión 1.0.0-alpha07

10 de febrero de 2021

Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha07. La versión 1.0.0-alpha07 contiene estas confirmaciones.

Se actualizó para integrarse a Compose alpha12.

Versión 1.0.0-alpha06

28 de enero de 2021

Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha06. La versión 1.0.0-alpha06 contiene estas confirmaciones.

Correcciones de errores

Se actualizó para depender de Compose 1.0.0-alpha11.

Versión 1.0.0-alpha05

13 de enero de 2021

Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha05. La versión 1.0.0-alpha05 contiene estas confirmaciones.

Se actualizó para depender de Compose 1.0.0-alpha10.

Versión 1.0.0-alpha04

16 de diciembre de 2020

Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha04. La versión 1.0.0-alpha04 contiene estas confirmaciones.

Correcciones de errores

  • Se actualizaron las propiedades de conveniencia, CombinedLoadStates.refresh, CombinedLoadStates.prepend, CombinedLoadStates.append, para pasar de Loading a NotLoading después de que los estados de mediador y de carga fuente se conviertan en NotLoading a fin de garantizar que se aplicó la actualización remota. (I65619)

Versión 1.0.0-alpha03

2 de diciembre de 2020

Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha03. La versión 1.0.0-alpha03 contiene estas confirmaciones.

  • Se actualizó para que coincida con Compose 1.0.0-alpha08.

Versión 1.0.0-alpha02

11 de noviembre de 2020

Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha02. La versión 1.0.0-alpha02 contiene estas confirmaciones.

Cambios en la API

  • Se agregaron los métodos .peek(), .snapshot(), .retry() y .refresh() a LazyPagingItem, que exponen la misma funcionalidad disponible en AsyncPagingDataDiffer/PagingDataAdapter(Iddfe8, b/172041660)

Versión 1.0.0-alpha01

28 de octubre de 2020

Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha01. La versión 1.0.0-alpha01 contiene estas confirmaciones.

Nuevas funciones

El artefacto paging-compose proporciona integración entre la biblioteca de Paging y Jetpack Compose. Ejemplo de uso simple:

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

Versión 3.0.1

Versión 3.0.1

21 de julio de 2021

Lanzamiento de androidx.paging:paging-*:3.0.1. La versión 3.0.1 contiene estas confirmaciones.

Correcciones de errores

  • Si accedes a PagedList.dataSource desde el valor inicial que produce LivePagedList o RxPagedList, ya no se arrojará una excepción IllegalStateException de forma incorrecta. (I96707)

Versión 3.0.0

Versión 3.0.0

5 de mayo de 2021

Lanzamiento de androidx.paging:paging-*:3.0.0. La versión 3.0.0 contiene estas confirmaciones.

Funciones principales de la versión 3.0.0

Se dio de baja gran parte de la API existente de Paging 2.xx y se la reemplazó por las nuevas API de Paging 3 que ofrecen las siguientes mejoras:

  • Compatibilidad de primer nivel con las corrutinas y el flujo de Kotlin
  • Compatibilidad con la cancelación
  • Estado de carga integrado y señales de error integrados
  • Funcionalidad reintentar + actualizar
  • Se combinaron las tres subclases de DataSource en una clase unificada de PagingSource
  • Transformaciones de página personalizadas, como una integrada para agregar separadores
  • Carga de pies de página y encabezados de estado

Versión 3.0.0-rc01

21 de abril de 2021

Lanzamiento de androidx.paging:paging-*:3.0.0-rc01. La versión 3.0.0-rc01 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió un error por el que, en ocasiones, Paging enviaba distintos eventos no-op a RecyclerView, por lo que algunos objetos de escucha podían activarse antes. (Ic507f, b/182510751)

Versión 3.0.0-beta03

24 de marzo de 2021

Lanzamiento de androidx.paging:paging-*:3.0.0-beta03. La versión 3.0.0-beta03 contiene estas confirmaciones.

Correcciones de errores

  • Se renovó la manera en que se controlan los marcadores de posición cuando se vuelve a cargar la lista para evitar saltos inesperados en RecyclerView. Para conocer más detalles, consulta NullPaddedDiffer.md. (If1490, b/170027529, b/177338149)
  • Los distintos compiladores PagedList (ruta de compatibilidad antigua) ya no llaman de manera incorrecta a DataSource.Factory.create() en la conversación principal cuando se llama a .build(). (b/182798948)

Versión 3.0.0-beta02

10 de marzo de 2021

Lanzamiento de androidx.paging:paging-*:3.0.0-beta02. La versión 3.0.0-beta02 contiene estas confirmaciones.

Cambios en la API

  • Las extensiones Rx3 ahora propagan de forma correcta el requisito de participación @ExperimentalCoroutinesApi. Anteriormente, se marcaban en el método @get, que el compilador de Kotlin ignoraba debido a https://youtrack.jetbrains.com/issue/KT-45227. (I5733c)

Correcciones de errores

  • Se aplicaron restricciones sobre el uso público de las API experimentales. (I6aa29, b/174531520)
  • Se corrigió un error que provocaba que PagingState siempre fuera null cuando se llamaba a la actualización remota.
  • Se corrigió un error por el que las páginas vacías que mostraba PagingSource no permitían que Paging se recuperara de nuevo para completar prefetchDistance, lo que provocaba que se detenga.

Versión 3.0.0-beta01

10 de febrero de 2021

Lanzamiento de androidx.paging:paging-*:3.0.0-beta01. La versión 3.0.0-beta01 contiene estas confirmaciones.

Cambios en la API

  • Ahora, los wrappers Rx2 y Rx3 exponen la anotación experimental de la que depende. Si usas los wrappers de compat de Rx en Paging-rxjava2 o Paging-rxjava3, ahora deberás anotar los usos con @OptIn(ExperimentalCoroutinesApi::class). (Ib1f9d)

Correcciones de errores

  • Se corrigió IndexOutOfBoundsException: Inconsistency detected que a veces se producía cuando se usaban API de DataSource v2 a través de rutas de compatibilidad.
  • La llamada isInvalid durante la inicialización de DataSource cuando se usan a través de rutas de compatibilidad ahora se inician correctamente en fetchDispatcher en lugar del subproceso principal. Esto corrige un IllegalStateException debido al acceso a Db en el subproceso principal cuando se usa la implementación PagingSource de Room.

Versión 3.0.0-alpha13

27 de enero de 2021

Lanzamiento de androidx.paging:paging-*:3.0.0-alpha13. La versión 3.0.0-alpha13 contiene estas confirmaciones.

Cambios en la API

  • La implementación de PagingSource.getRefreshKey ya no es opcional. Ahora es una función abstracta sin una implementación predeterminada. La migración de usuarios puede seguir mostrando la implementación predeterminada, que solo muestra null, pero getRefreshKey() debe tener una implementación real que muestre una clave basada en la posición actual de desplazamiento del usuario que permite a Paging seguir cargando en el viewport a través de PagingState.anchorPosition, si es posible. (I4339a)
  • Ahora, InvalidatingPagingSourceFactory es una clase final. (Ia3b0a)
  • Se permite la configuración del comportamiento del separador de terminal (encabezado/pie de página) con un parámetro opcional SeparatorType adicional. Estas son las dos opciones:
    • FULLY_COMPLETE: Comportamiento existente; debes esperar a PagingSource y RemoteMediator para marcar el endOfPaginationReached antes de agregar separadores de terminales. Si no se utiliza RemoteMediator, se ignora el loadState remoto. Esto es muy útil si solo deseas mostrar separadores de sección cuando esta se carga por completo, incluida la recuperación de la fuente remota, p. ej., la red.
    • SOURCE_COMPLETE: Solo espera que PagingSource marque endOfPaginationReachect, incluso si se usa RemoteMediator. Esto permite que los encabezados y pies de página se presenten de forma síncrona con la carga inicial, lo que evita que los usuarios tengan que desplazarse para ver los separadores de terminal. (Ibe993, b/174700218)

Correcciones de errores

  • Se corrigió una fuga de memoria poco frecuente que se produce cuando se invalida un PagingSource antes de que PageFetcher incluso pueda comenzar a cargarla desde ahí. (I9606b, b/174625633)

Versión 3.0.0-alpha12

13 de enero de 2021

Lanzamiento de androidx.paging:paging-*:3.0.0-alpha12. La versión 3.0.0-alpha12 contiene estas confirmaciones.

Cambios en la API

  • InvalidatingPagingSourceFactory dejará de ser una clase abstracta, ya que nunca tuvo ningún método abstracto. (I4a8c4)
  • Se agregó una sobrecarga de .cachedIn() que acepta ViewModel en lugar de Lifecycle o CoroutineScope para los usuarios de Java. (I97d81, b/175332619)
  • Permite que los emisores de Java usen operaciones de transformación de PagingData de manera asíncrona mediante la aceptación de un Ejecutor en los argumentos del operador de transformación. Todos los operadores de transformación de -Sync ahora tienen el sufijo "-Sync", y los usuarios de las corrutinas de Kotlin deberán desambiguarlas llamando a la función de extensión, que acepta un bloqueo suspendido. Todos los operadores de transformación de PagingData se movieron a extensiones de la clase PagingDataTransforms estática. Los usuarios de Java deberán llamarlos con asistentes estáticos, como p. ej., PagingDataTransforms.map(pagingData, transform). Para los usuarios de Kotlin, la sintaxis es la misma, pero deberán importar la función. (If6885, b/172895919)

Correcciones de errores

  • Se corrigió un error en el que no se llamaba a RemoteMediator.load() durante adapter.refresh() si el final de la paginación ya se había alcanzado.

Versión 3.0.0-alpha11

16 de diciembre de 2020

Lanzamiento de androidx.paging:paging-*:3.0.0-alpha11. La versión 3.0.0-alpha11 contiene estas confirmaciones.

Nuevas funciones

  • Se agregó compatibilidad con estados guardados para los siguientes casos de uso básicos (compatibilidad total, aunque, en el caso de origen en capas, todavía se encuentra en proceso):
    • El flujo se almacena en caché y la aplicación no se cierra (p. ej., el flujo se almacena en caché en un modelo de vista y la actividad se vuelve a crear en el proceso).
    • Se cuenta la fuente de paginación, se habilitan los marcadores de posición, y el diseño no es escalonado.

Cambios en la API

  • Ahora, PagingSource.getRefreshKey() es una API estable. (I22f6f, b/173530980)
  • PagingSource.invalidate ya no es una función abierta. Si necesitas recibir una notificación cuando se produce una invalidación, procura llamar al método registerInvalidedCallback en lugar de anular la invalidación. (I628d9, b/173029013, b/137971356)
  • Ahora, Pager tiene un solo constructor experimental junto a sus constructores regulares, en lugar de filtrar las API experimentales en una API pública no experimental mediante la anotación de participación. (I9dc61, b/174531520)
  • Se actualizaron las propiedades de conveniencia, CombinedLoadStates.refresh, CombinedLoadStates.prepend, CombinedLoadStates.append, para pasar de Loading a NotLoading después de que los estados de mediador y de carga fuente se conviertan en NotLoading a fin de garantizar que se aplicó la actualización remota. (I65619)
  • Se quitó LoadParams.pageSize (ya era obsoleto). Se recomienda usar LoadParams.loadSize en tu PagingSource.

    LoadParams.loadSize siempre es igual a PagingConfig.pageSize, excepto para la llamada de carga inicial, en la que es igual a PagingConfig.initialLoadSize.

    Si estás probando tu DataSource de Paging2 sin usar un elemento Pager PagedList, es posible que pageSize no coincida con PagingConfig.pageSize si también configuras initialLoadSize. Si es importante para tus pruebas, usa un elemento Pager/PagedList, que establecerá internamente el valor correcto de Pager/PagedList para tus métodos de carga de DataSource. (I98ac7, b/149157296)

Correcciones de errores

  • Se corrigió una falla debido a IllegalStateException cuando se usaban separadores con PagingConfig.maxSize. (I0ed33, b/174787528)
  • Se corrigió un error en el que el estado de carga de PREPEND/APPEND no se actualizaba a NotLoading(endOfPaginationReached = true) inmediatamente después de la carga inicial si se configuraba RemoteMediator. (I8cf5a)
  • Se corrigió un error por el que las API del presentador, .snapshot(), .peek(), etc., mostraban una lista anterior (desactualizada) dentro de las actualizaciones de ListUpdateCallback.
  • Se corrigió un error por el cual los operadores de los separadores no agregaban encabezados ni pies de página cuando se usaban con RemoteMediator.
  • Se corrigió un error por el que las actualizaciones de LoadState a NotLoading para RemoteMediator se bloqueaban en el estado de carga.
  • Se corrigió un error en el que la API de compatibilidad de Paging2.0, .asPagingSourceFactory(), podía provocar que se inicializara el objeto DataSource de copia de seguridad en el CoroutineDispatcher incorrecto. Esta corrección resuelve un bloqueo y posibles casos de ANR, especialmente cuando se usa la implementación actual de PagingSource de Room, que usa esta ruta de compatibilidad.

Versión 3.0.0-alpha10

2 de diciembre de 2020

Lanzamiento de androidx.paging:paging-*:3.0.0-alpha10. La versión 3.0.0-alpha10 contiene estas confirmaciones.

Cambios en la API

  • Se quitaron las API dataRefreshFlow y dataRefreshListener obsoletas, ya que son redundantes con las actualizaciones del objeto loadStateFlow/Listener. Para quienes migran, el equivalente loadStateFlow es el siguiente:

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

    (Ib5570, b/173530908)

Correcciones de errores

  • endOfPaginationreached para RemoteMediator REFRESH ahora se propaga correctamente a las actualizaciones de LoadState y evita que se activen APPEND y PREPEND. (I94a3f, b/155290248)
  • Presentar una lista vacía, ya sea debido a una página inicial vacía o un filtrado pesado, ya no impedirá que Paging inicie las cargas PREPEND o APPEND. (I3e702, b/168169730)
  • Se solucionó un problema en el que no se llamaba a getRefreshKey en las generaciones posteriores de PagingSource cuando se producían invalidaciones. (I45460, b/170027530)

Contribución externa

  • Se agregó una nueva clase abstracta InvalidationPagingSourceFactory con una API de .invalidate() que reenvía la invalidación a todas las PagingSources que emite. Gracias a @claraf3. (Ie71fc, b/160716447)

Errores conocidos

  • Es posible que los encabezados y pies de página de la transformación .insertSeparators() no aparezcan inmediatamente cuando se usa RemoteMediator. b/172254056
  • El uso de RemoteMediator puede hacer que LoadState remoto se detenga si se produce una invalidación y que PagingSource.load(LoadParams.Refresh(...)) se complete antes de que RemoteMediator.load() se muestre. b/173717820.

Versión 3.0.0-alpha09

11 de noviembre de 2020

Lanzamiento de androidx.paging:paging-*:3.0.0-alpha09. La versión 3.0.0-alpha09 contiene estas confirmaciones.

Cambios en la API

  • Los métodos dataRefreshFlow y Listener dejaron de estar disponibles completamente con una cláusula replaceWith. (I6e2dd)

Correcciones de errores

  • Se corrigió la aparición de IllegalArgumentException cuando se usaban separadores con RemoteMediator y se activaba una invalidación mientras se seguía ejecutando una carga remota que muestra endOfPagination. (I3a260)

Versión 3.0.0-alpha08

28 de octubre de 2020

Lanzamiento de androidx.paging:paging-*:3.0.0-alpha08. La versión 3.0.0-alpha08 contiene estas confirmaciones.

Cambios en la API

  • Se habilitaron las conversiones SAM en Kotlin con una interfaz funcional, disponible en Kotlin 1.4, a fin de combinar las variantes de Kotlin/Java de DataSource.InvalidatedCallback. Eso también corrige un error en el que no se llamaba a la variante de Kotlin de las devoluciones de llamada no válidas después de la transformación de .map o .mapByPage (I1f244, b/165313046).

Correcciones de errores

  • Se mejoró considerablemente la interacción de Paging con ViewPager. En particular, Paging ya no cancelará una llamada de RemoteMediator#load por una invalidación de página. Además, dejará de enviar una solicitud de carga adicional o de preparación hasta que se complete correctamente la solicitud de actualización REFRESH, si una actualización con REFRESH es necesaria (I6390b, b/162252536).
  • Se habilitó la comprobación de lint de API para MissingGetterMatchingBuilder en androidx (I4bbea, b/138602561).
  • Se corrigió un error por el cual los ayudantes de ConcatAdapter .withLoadState* fallaban debido a la notificación de RecyclerView desde el subproceso en segundo plano (I18bb5, b/170988309).
  • Se corrigió un error por el que cargar una página muy pequeña que no estaba vacía, en ocasiones, evitaba que la carga previa capture cargas correctamente (Iffda3, b/169259468).

Versión 3.0.0-alpha07

1 de octubre de 2020

Lanzamiento de androidx.paging:paging-*:3.0.0-alpha07. La versión 3.0.0-alpha07 contiene estas confirmaciones.

Cambios en la API

  • Los operadores asíncronos basados en Guava para PagingData ahora aceptan un ejecutor como parámetro para controlar el contexto de ejecución (Id4372).

Correcciones de errores

  • Se corrigió la excepción IndexOutOfBounds arrojada en RemoteMediator debido a una condición de carrera (I00b7f, b/165821814).
  • Se corrigió una condición de carrera en la conversión DataSource -> PagingSource que podría hacer que PagingSource omita las señales de invalidación de DataSource.
  • Se solucionó un problema en la lógica de obtención de páginas que, a veces, hacía que no se recogieran nuevas generaciones de PagingSource hasta que se invocara PagingDataAdapter.refresh().
  • Se solucionó un problema que provocaba que la posición de desplazamiento, a veces, se perdiera cuando se usaba un DataSource convertido en un PagingSource (como el que se producía en Room), junto con RemoteMediator.

Contribución externa

  • Gracias a @simonsilleriller por agregar RxJava2, RxJava3 y operadores de transformación asincrónica basados en Guava para PagingData.

Versión 3.0.0-alpha06

2 de septiembre de 2020

Lanzamiento de androidx.paging:paging-*:3.0.0-alpha06. La versión 3.0.0-alpha06 contiene estas confirmaciones.

Cambios en la API

  • Ahora, UnsupportedOperationException con mensajería más clara sobre la falta de compatibilidad para los ID estables se produce cada vez que se llama a PagingDataAdapter.setHasStableIds (Ib3890, b/158801427).

Correcciones de errores

  • InsertSeparators ya no filtra las páginas vacías que permiten que el presentador conozca la distancia de carga previa, incluso en los casos en que se insertan muchas páginas vacías (I9cff6, b/162538908).

Versión 3.0.0-alpha05

19 de agosto de 2020

Lanzamiento de androidx.paging:paging-*:3.0.0-alpha05. La versión 3.0.0-alpha05 contiene estas confirmaciones.

Correcciones de errores

  • Paging ahora realiza en forma correcta la carga previa de páginas, incluso cuando los datos presentados tienen muchos filtros.
  • Mostrar LoadResult.Error luego de reintentar una carga ya no provoca que los accesos a elementos vuelvan a activar incorrectamente otro reintento.

Contribución externa

  • ¡Gracias, Clara F por ayudar a mejorar algunas pruebas! (549612).

Versión 3.0.0-alpha04

5 de agosto de 2020

Lanzamiento de androidx.paging:paging-*:3.0.0-alpha04. La versión 3.0.0-alpha04 contiene estas confirmaciones.

Cambios en la API

  • Se agregó la API de peek() a AsyncPagingDataDiffer y PagingDataAdapter para permitir el acceso a los datos presentados sin que se activen las cargas de página (I38898, b/159104197).
  • Se agregó una API de snapshot() a PagingDataAdapter y AsyncPagingDataDiffer para poder recuperar los elementos presentados sin activar la recuperación de la página (I566b6, b/159104197).
  • Se agregó un constructor de PagingData.from(List<T>) que permite presentar listas estáticas, las cuales pueden combinarse con el flujo general de PagingData, a fin de mostrarlas en ciertos estados; p. ej., antes de que termine la actualización REFRESH inicial o simplemente para probar las transformaciones (Id134d).
  • Las API de objeto de escucha y flujo dataRefresh dejaron de estar disponibles, ya que estaban diseñadas para exponer el estado de los elementos presentados en una actualización con REFRESH. Sin embargo, resultaron redundantes a partir de las mejoras en el tiempo de devolución de llamada del flujo y el objeto de escucha loadState y la propiedad itemCount (Ia19f3).
  • Se agregaron wrappers de compatibilidad de RxJava3 para PagingSource y RemoteMediator. (I49ef3, b/161480176)

Correcciones de errores

  • Los PositionalDataSource se convirtieron en PagingSource a través del ayudante toPagingSourceFactory, incluido el PagingSource generado por Room. Ahora se marcan correctamente para admitir saltos (I3e84c, b/162161201).
  • Se corrigió un error en el que la variante síncrona de submitData a veces provocaba una carrera y causaba una ClosedSendChannelException (I4d702, b/160192222).

Contribución externa

  • ¡Agradecemos a Zac Sweers por agregar wrappers de compatibilidad de RxJava3 en nombre de Slack! (I49ef3, b/161480176).

Versión 3.0.0-alpha03

22 de julio de 2020

Lanzamiento de androidx.paging:paging-*:3.0.0-alpha03. La versión 3.0.0-alpha03 contiene estas confirmaciones.

Cambios en la API

  • El constructor de PagingState ahora es público, lo que debería facilitar la implementación de pruebas de getRefreshKey() (I8bf15).
  • Se ocultaron de Java las variantes de función del método map de Kotlin DataSource para resolver la ambigüedad entre las variantes originales y las de Kotlin (If7b23, b/161150011).
  • Se marcaron con @JvmSynthetic las API redundantes incluidas para mayor comodidad de los usuarios de Kotlin (I56ae5).
  • Se agregaron sobrecargas para el constructor de LoadResult.Page, que establece los valores predeterminados de itemsBefore y itemsAfter en COUNT_UNDEFINED (I47849).
  • Los operadores existentes de PagingData aceptan métodos con suspensión y se introdujeron los nuevos operadores sin suspensión mapSync, flatMapSync y filterSync para los usuarios de Java. Se trasladaron los métodos de transformación existentes a funciones de extensión, por lo que los usuarios de Kotlin ahora deberán importarlos (I34239, b/159983232).

Correcciones de errores

  • Room (y PositionalDataSource) PagingSources mostrará un separador principal como parte de la primera página, por lo que el usuario no necesita desplazarse para revelarlo (I6f747, b/160257628).
  • Los accesos de elementos en marcadores de posición ahora activan correctamente las cargas de PagingSource hasta que se muestre una página que cumpla con el índice solicitado después de que lo transforme PagingData.filter() (I95625, b/158763195).
  • Se corrigió un error en el que, a veces, el desplazamiento después de que PagingSource mostraba un error podía impedir los reintentos de PagingDataAdapter.retry() (I1084f, b/160194384).
  • Se solucionó un problema en el que los accesos a elementos después de soltar una página no cargaban páginas aunque el acceso a los elementos estaba dentro de prefetchDistance (Ie95ae, b/160038730).
  • La configuración de PagingConfig.maxSize ya no habilita los marcadores de posición después de un evento de soltar (I2be29, b/159667766).

Versión 3.0.0-alpha02

24 de junio de 2020

Lanzamiento de androidx.paging:paging-*:3.0.0-alpha02. La versión 3.0.0-alpha02 contiene estas confirmaciones.

Cambios en la API

  • Se agregaron sobrecargas para el constructor de PagingConfig con valores predeterminados comunes (I39c50 y b/158576040).
  • Se agregaron sobrecargas para constructores de PagingDataAdapter y AsyncPagingDataDiffer con valores predeterminados comunes (Ie91f5).
  • Las API de Adapter, dataRefreshFlow y dataRefreshListener, ahora pasan un valor booleano para indicar si un PagingData está vacío (I6e37e y b/159054196).
  • Se agregaron las API de RxJava y Guava para RemoteMediator: RxRemoteMediator y ListenableFutureRemoteMediator.
  • Se agregaron ayudantes a PagingState para el acceso de elementos comunes, como isEmpty() y firstItemOrNull() (I3b5b6 y b/158892717).

Correcciones de errores

  • Pager ahora verifica la reutilización de PagingSource en la fábrica para evitar la reutilización accidental de PagingSources no válidos, lo que generaba un error poco claro (I99809 y b/158486430).
  • Las fallas de REFRESH de RemoteMediator ya no impiden que se cargue PagingSource (I38b1b y b/158892717).
  • La versión sin suspensión de submitData ya no causa una falla debido a la recopilación simultánea en múltiples PagingData cuando se llama al elemento después de la versión con suspensión de submitData (I26358 y b/158048877).
  • Se corrigió la excepción "Cannot collect twice from pager" (No se puede recopilar dos veces de Pager) que podía ocurrir después del cambio de configuración. (I58bcc, b/158784811)

Versión 3.0.0-alpha01

10 de junio de 2020

Lanzamiento de androidx.paging:paging-*:3.0.0-alpha01. La versión 3.0.0-alpha01 contiene estas confirmaciones.

Se actualizó la biblioteca de Paging a la versión 3.0 para habilitar varias funciones nuevas.

Nuevas funciones de la versión 3.0

Errores conocidos

  • Los javadocs de Paging 3 aún no están disponibles. Mientras tanto, usa las guías que se mencionan arriba o los documentos de Kotlin (b/158614050).

Versión 2.1.2

Versión 2.1.2

18 de marzo de 2020

Lanzamiento de androidx.paging:paging:2.1.2. La versión 2.1.2 contiene estas confirmaciones en relación con la versión 2.1.0.

Correcciones de errores

  • Corrección para IndexOutOfBoundsException en casos excepcionales cuando se convierte una posición durante la invalidación.

Problema de lanzamiento

  • La versión 2.1.1 de Paging se lanzó de forma incorrecta desde una rama mal configurada, lo que expuso las API y la funcionalidad parcialmente implementadas que se lanzarán en una versión futura.

  • Paging 2.1.2 contiene la corrección de centrado de carga que se publicó originalmente en la versión 2.1.1, pero esta se elige correctamente sobre la versión 2.1.0. Si estás usando la versión 2.1.1, te recomendamos que actualices a esta versión.

Versión 2.1.1

Versión 2.1.1

18 de diciembre de 2019

Lanzamiento de androidx.paging:paging-*:2.1.1. La versión 2.1.1 contiene estas confirmaciones.

Correcciones de errores

  • Ahora se centran las cargas iniciales contiguas de PositionalDataSources en torno al último acceso cuando se inhabilitan los marcadores de posición.

Versión 2.1.0

Versión 2.1.0

25 de enero de 2019

Lanzamiento de Paging 2.1.0 sin cambios desde 2.1.0-rc01.

Versión 2.1.0-rc01

6 de diciembre de 2018

Lanzamiento de Paging 2.1.0-rc01 sin cambios desde 2.1.0-beta01.

Versión 2.1.0-beta01

1 de noviembre de 2018

Lanzamiento de Paging 2.1.0-beta01 sin cambios desde 2.1.0-alpha01.

Versión 2.1.0-alpha01

12 de octubre de 2018

Paging 2.1.0-alpha01 tiene dos incorporaciones importantes: arrastre de páginas y bibliotecas de extensión de KTX para cada artefacto, además de muchas otras correcciones de errores y modificaciones en la API.

Cambios en la API

  • Se agregó PagedList.Config.Builder.setMaxSize() para limitar el número de elementos cargados en la memoria.
  • Se agregó androidx.paging.Config() como una alternativa de Kotlin para PagedList.Config.Builder.
  • Se agregó androidx.paging.PagedList() como una alternativa de Kotlin para PagedList.Builder.
  • Se agregó DataSourceFactory.toLiveData() como una alternativa de Kotlin para LivePagedListBuilder.
  • Se agregaron DataSourceFactory.toObservable() y toFlowable() como alternativas de Kotlin para RxPagedListBuilder.
  • Se agregó AsyncPagedListDiffer.addPagedListListener() para escuchar cambios de PagedList. (b/111698609)
  • Se agregó la variante PagedListAdapter.onCurrentListChanged() que pasa la lista anterior y la nueva. La variante anterior dejó de estar disponible.
  • Se agregaron variantes PagedListAdapter/AsyncPagedListDiffer.submitList() que realizan una devolución de llamada adicional que se activa si/cuando se muestra pagedlist, después de diffing. De esta manera, puedes sincronizar un intercambio de PagedList con otras actualizaciones de IU (b/73781068).
  • Se agregó PagedList.getLoadedCount() para informarte cuántos elementos hay en la memoria. Ten en cuenta que el valor que se muestra es siempre igual a .size() si los marcadores de posición están inhabilitados.

Correcciones de errores

  • Se corrigió una condición de carrera durante el diffing si se reutilizan las listas. b/111591017
  • Ahora PagedList.loadAround() muestra IndexOutOfBoundsException cuando el índice no es válido. Anteriormente, fallaba sin proporcionar una excepción clara.
  • Se corrigió un error por el que un tamaño de carga inicial extremadamente pequeño junto con datos sin modificar hacían que la carga no continuara. b/113122599

Versión 2.0.0

Versión 2.0.0

1 de octubre de 2018

Lanzamiento de Paging 2.0.0 con una sola corrección de errores.

Correcciones de errores

  • Se corrigió un error que ocurría con desplazamientos rápidos mediante PositionalDataSource y marcadores de posición b/114635383.

Versión 2.0.0-beta01

2 de julio de 2018

Correcciones de errores

  • Se corrigió el contenido que desaparecía en algunos casos anexados (marcadores de posición inhabilitados, PositionalDataSource). b/80149146
  • (Ya se lanzó en 1.0.1) Se solucionaron fallas en las que PagedListAdapter y AsyncPagedListDiffer no identificaban eventos de movimiento. b/110711937

Dependencias anteriores a AndroidX

Para las siguientes versiones de Paging anteriores a AndroidX, incluye estas dependencias:

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"
}

Versión 1.0.1

Versión 1.0.1

26 de junio de 2018

Lanzamiento de Paging 1.0.1 con una sola corrección de errores en runtime. Recomendamos usar 1.0.1 para mayor estabilidad. También se lanzó Paging RxJava2 1.0.1 y es idéntico a 1.0.0-rc1.

Correcciones de errores

  • Se solucionaron fallas en las que PagedListAdapter y AsyncPagedListDiffer no identificaban eventos de movimiento. b/110711937

RxJava2 versión 1.0.0

RxJava2 versión 1.0.0-rc1

16 de mayo de 2018

Paging RxJava2 1.0.0-rc1 pasa a la versión potencial sin cambios respecto de la versión alfa inicial.

Versión 1.0.0

Versión 1.0.0-rc1

19 de abril de 2018 Versión potencial de Paging

No tenemos problemas conocidos o características nuevas previstos para el lanzamiento de Paging 1.0.0. Actualiza tus proyectos para usar 1.0.0-rc1 y ayúdanos a ponerlo a prueba para que podamos crear una versión 1.0.0 confiable.

No hay cambios en esta versión, es igual a 1.0.0-beta1.

Versión 1.0.0-beta1

5 de abril de 2018

Paging estará en versión beta durante un breve período de tiempo antes de pasar a la versión potencial. No tenemos planificado ningún cambio adicional de API para Paging 1.0 y los estándares para cambios de API son muy altos.

Lanzamiento de compatibilidad alfa de RxJava2 con Paging como módulo opcional por separado (android.arch.paging:rxjava2:1.0.0-alpha1). Tendrá una versión por separado temporalmente hasta que se estabilice.

Esta biblioteca nueva proporciona una alternativa a RxJava2 respecto de LivePagedListBuilder, capaz de crear objetos Observable y Flowable, y de tomar objetos Scheduler en lugar de 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();

Nuevas funciones

  • Se agrega RxPagedListBuilder mediante el nuevo artefacto android.arch.paging:rxjava2.

Cambios en la API

  • Cambios de API para aclarar el rol de los ejecutores en los compiladores.

    • El nombre de setBackgroundThreadExecutor() cambió a setFetchExecutor() (en PagedList.Builder y LivePagedListBuilder).

    • El nombre de setMainThreadExecutor() cambió a setNotifyExecutor() (en PagedList.Builder).

  • Se corrigió el miembro PagedList.mCallbacks para que sea privado.

Correcciones de errores

  • LivePagedListBuilder activa una carga inicial de PagedList en el ejecutor especificado, en lugar de hacerlo en el grupo de subprocesos de IO de los componentes de la arquitectura.

  • Se corrigió un comportamiento no válido en wrappers DataSource internos (que se usan para implementar DataSource.map, además de la carga de PositionalDataSource inhabilitada para marcadores de posición). (b/77237534).

Versión 1.0.0-alpha7

21 de marzo de 2018

Lanzamiento de Paging 1.0.0-alpha7 junto con Lifecycles 1.1.1. Como Paging alpha7 depende del movimiento de la clase Function mencionada anteriormente, necesitarás actualizar tu dependencia de lifecycle:runtime a android.arch.lifecycle:runtime:1.1.1.

Está planificado que Paging alpha7 sea la última versión antes de alcanzar la versión beta.

Cambios en la API

  • Ahora los objetos DataSource.LoadParams tienen un constructor público y los objetos DataSource.LoadCallback son abstractos. De esta manera, se puede envolver un DataSource o directamente probar un DataSource con una devolución de llamada de prueba (b/72600421).
  • Mappers para DataSource y DataSource.Factory
    • map(Function<IN,OUT>) te permite transformar, envolver o decorar los resultados cargados por una DataSource.
    • mapByPage(<List<IN>,List<OUT>>) te permite hacer lo mismo para el procesamiento por lotes (p. ej., si los elementos cargados a partir de SQL necesitan consultar una base de datos por separado, la acción se puede realizar como un lote).
  • Se agregó PagedList#getDataSource() como método de conveniencia. b/72611341
  • Se quitaron de la API todas las clases que dejaron de estar disponibles, incluidas las partes que quedaron del paquete recyclerview.extensions y el LivePagedListProvider.
  • Se cambió DataSource.Factory de una interfaz a una clase abstracta a fin de habilitar la funcionalidad de mapa.

Correcciones de errores

  • Se cambiaron los elementos Builder y ahora son definitivos. b/70848565
  • La implementación de DataSource de Room ahora administra consultas con varias tablas. Esta corrección está incluida en Room 1.1.0-beta1 (consulta más arriba).
  • Se corrigió un error en el que no se invocaba a BoundaryCallback.onItemAtEndLoaded para PositionalDataSource si los marcadores de posición estaban habilitados y el tamaño total era un múltiplo exacto del tamaño de la página.

Versión 1.0.0-alpha5

22 de enero de 2018

Correcciones de errores

  • Se corrigió la carga de la página cuando los marcadores de posición están inhabilitados b/70573345
  • Registro adicional para rastrear errores IllegalArgumentException b/70360195 (y correcciones especulativas de Room)
  • Correcciones de código de muestra de Javadoc b/70411933, b/71467637