Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Paging

La biblioteca de Paging facilita la carga de datos de forma gradual y correcta en la clase RecyclerView de tu app.
Actualización más reciente Versión estable actual Próxima versión potencial Versión Beta Versión Alfa
24 de junio de 2020 2.1.2 - - 3.0.0-alpha02

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:

    dependencies {
      def paging_version = "2.1.2"

      implementation "androidx.paging:paging-runtime:$paging_version" // For Kotlin use paging-runtime-ktx

      // alternatively - without Android dependencies for testing
      testImplementation "androidx.paging:paging-common:$paging_version" // For Kotlin use paging-common-ktx

      // optional - RxJava support
      implementation "androidx.paging:paging-rxjava2:$paging_version" // For Kotlin use paging-rxjava2-ktx
    }
    

Para obtener información acerca del uso de extensiones de Kotlin, consulta la documentación de ktx.

Como alternativa, puedes probar la versión Alfa de Paging 3.0. Para usar Paging 3.0, agrega las siguientes dependencias a tu archivo build.gradle:

dependencies {
  def paging_version = "3.0.0-alpha02"

  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 - Guava ListenableFuture support
  implementation "androidx.paging:paging-guava:$paging_version"
}

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 en esta biblioteca antes de crear uno nuevo. Para agregar tu voto a un error existente, haz clic en el botón de la estrella.

Crea un error nuevo

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

Versión 3.0.0

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 de no 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 de 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 y b/1584811).

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 solucionó una falla que ocurría con desplazamientos muy 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 de Alpha 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 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/7048565
  • 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