Paging

La Biblioteca de Paging facilita la carga de datos de forma gradual y correcta en la clase RecyclerView de tu app. Consulta los documentos de referencia para obtener más información.

Cómo declarar dependencias

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

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

    dependencies {
      def paging_version = "2.1.0"

      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.

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

Versión 2.1.0

25 de enero de 2019

Lanzamiento de Paging 2.1.0 sin modificaciones desde 2.1.0-rc01.

Versión 2.1.0-rc01

6 de diciembre de 2018

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

Versión 2.1.0-beta01

1 de noviembre de 2018

Lanzamiento de Paging 2.1.0-beta01 sin modificaciones 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 la cantidad 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 transfiere la lista anterior y la nueva. La variante 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. Esto te permite 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 de retorno siempre es 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 en el que un tamaño de carga inicial extremadamente pequeño junto con datos sin modificar provocaban que la carga no continuara b/113122599

Versión 2.0.0

1 de octubre de 2018

Se lanzó 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 corrigieron 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

26 de junio de 2018

Paging 1.0.1 se lanzó 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-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-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 tu proyecto 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 creadores.

    • Cambió el nombre de setBackgroundThreadExecutor() a setFetchExecutor() (en PagedList.Builder y LivePagedListBuilder).

    • Cambió el nombre de setMainThreadExecutor() a setNotifyExecutor() (en PagedList.Builder).

  • El miembro de PagedList.mCallbacks ahora es 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 por marcadores de posición). b/77237534

Versión 1.0.0-alpha7

21 de marzo de 2018

Paging 1.0.0-alpha7 se lanza 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. Esto permite envolver una DataSource o directamente probar una 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 Builders 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