Paging
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.6 | - | - | 3.4.0-alpha04 |
| paging-compose | 3.3.6 | - | - | 3.4.0-alpha04 |
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.6" implementation "androidx.paging:paging-runtime:$paging_version" // alternatively - without Android dependencies for tests testImplementation "androidx.paging:paging-common:$paging_version" // optional - RxJava2 support implementation "androidx.paging:paging-rxjava2:$paging_version" // optional - RxJava3 support implementation "androidx.paging:paging-rxjava3:$paging_version" // optional - Guava ListenableFuture support implementation "androidx.paging:paging-guava:$paging_version" // optional - Jetpack Compose integration implementation "androidx.paging:paging-compose:3.4.0-alpha04" }
Kotlin
dependencies { val paging_version = "3.3.6" implementation("androidx.paging:paging-runtime:$paging_version") // alternatively - without Android dependencies for tests testImplementation("androidx.paging:paging-common:$paging_version") // optional - RxJava2 support implementation("androidx.paging:paging-rxjava2:$paging_version") // optional - RxJava3 support implementation("androidx.paging:paging-rxjava3:$paging_version") // optional - Guava ListenableFuture support implementation("androidx.paging:paging-guava:$paging_version") // optional - Jetpack Compose integration implementation("androidx.paging:paging-compose:3.4.0-alpha04") }
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.
Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.
Versión 3.4
Versión 3.4.0-alpha04
10 de septiembre de 2025
Lanzamiento de androidx.paging:paging-*:3.4.0-alpha04. La versión 3.4.0-alpha04 contiene estas confirmaciones.
Cambios en la API
- Se agregó una nueva API de
PagingStateclosestItemAroundPositionpara recuperar el elemento cargado que está más cerca de la posición de destino y coincide con el predicado de entrada. Esto se puede usar para generar claves de actualización basadas en elementos en las que el elemento anclable ideal se encuentra cerca de la posición de destino exacta, pero no en ella. (I96e5c, b/440187139)
Versión 3.4.0-alpha03
27 de agosto de 2025
Lanzamiento de androidx.paging:paging-*:3.4.0-alpha03. La versión 3.4.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
- Se agregó el escritorio como un nuevo destino de Kotlin Multiplatform (KMP) en paging-common. En total, ahora admite JVM(Android y escritorio), nativo (Linux, iOS, watchOS, tvOS, macOS, MinGW) y web (JavaScript, WasmJS). (Id2483, b/436884811)
- Paging-testing agregó nuevos destinos de Kotlin Multiplatform (KMP). En total, ahora admite JVM(Android y escritorio), nativo (Linux, iOS, watchOS, tvOS, macOS, MinGW) y web (JavaScript, WasmJS). (I0c543, b/435014650)
- Se agregaron nuevos destinos de Kotlin Multiplatform (KMP) a Paging-compose. En total, ahora admite JVM(Android y escritorio), nativo (Linux, iOS, watchOS, tvOS, macOS, MinGW) y web (JavaScript, WasmJS). (I70d44, b/436884801)
Cambios en la API
- Se cambió el valor predeterminado de minSdk de la API 21 a la API 23 (Ibdfca, b/380448311, b/435705964, b/435705223).
Versión 3.4.0-alpha02
30 de julio de 2025
Lanzamiento de androidx.paging:paging-*:3.4.0-alpha02. La versión 3.4.0-alpha02 contiene estas confirmaciones.
Cambios en la API
PagingData.fromahora permite configurarplaceholdersBeforeyplaceholdersAfter. Ten en cuenta que desplazarse por estos marcadores de posición no activa cargas. (I06983)
Versión 3.4.0-alpha01
2 de julio de 2025
Lanzamiento de androidx.paging:paging-*:3.4.0-alpha01. La versión 3.4.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
- Paging agregó los siguientes destinos de KMP: watchos, tvos, mingwX64, watchosDeviceArm64 y linuxArm64. (I237dd, Ia62b3, b/368046982, Icf15d, b/364652024, I139d3, b/338268719)
Correcciones de errores
- Las pruebas unitarias de Android que extraen Paging 3.3 o versiones posteriores ya no arrojarán excepciones desde
PagingLogger(Ia9400, b/331684448). - Se corrigió un error por el que
RecyclerViewarrojaIndexOutOfBoundsExceptioncuando el usuario se desplaza mientras se actualizaRecyclerView(Id1f16, b/381024738). - Se corrigió un error por el que la paginación no podía activar más cargas cuando se actualizaba durante el desplazamiento. (I60ca5, b/352586078)
- Se corrigió una falla que se producía al desplazarse mientras se actualizaban los elementos de paginación. (I8c65a, b/347649763)
Versión 3.3
Versión 3.3.6
12 de febrero de 2025
Lanzamiento de androidx.paging:paging-*:3.3.6. La versión 3.3.6 contiene estas confirmaciones.
Correcciones de errores
- Los indicadores de actualización y reintento que se envían durante una actualización inicial ahora se almacenarán y se volverán a enviar automáticamente una vez que el presentador de paginación esté listo.
Contribución externa
Versión 3.3.5
11 de diciembre de 2024
Lanzamiento de androidx.paging:paging-*:3.3.5. La versión 3.3.5 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió el error por el que
RecyclerViewarrojaIndexOutOfBoundsExceptioncuando el usuario se desplaza mientras actualizaRecyclerView. (Id1f16, b/381024738)
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-commonypaging-testingagregaron nuevos destinos de Kotlin Multiplataforma:watchos,tvosylinuxArm64. (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
AsyncPagingDataDiffero las APIs compiladas sobre ella, comoPagingDataAdapterque se usa conRecyclerView, 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 produce cuando se quitan elementos de la fuente de datos de respaldo mientras se desplaza un
RecyclerViewcon unPagingDataAdaptero unAsyncPagingDataDiffer. (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
PagingDataPresenterahora es una clase pública. Ahora, los presentadores multiplataforma se pueden compilar sobrePagingDataPresenteren lugar de requerir APIs internas de Paging oAsyncPagingDataDifferdepaging-runtime.- Se agregaron nuevos métodos auxiliares
LoadStatesyCombinedLoadStatesenhasErroryisIdlepara verificar siLoadStatesestá en estado de error oNotLoading, respectivamente. También se agregó un nuevo método de extensión de KotlinawaitNotLoading()enFlow<CombinedLoadStates>que espera hasta que una carga se establezca en el estadoNotLoadingo Error. PagingData.empty()ahora envía estadosNotLoadingde forma predeterminada, a menos que se pasenLoadStatespersonalizados a su constructor. Esto se diferencia del comportamiento existente, en el que no se despachaLoadStatescuando se envía a unPagingDataAdaptero se despachan estados de carga cuando se recopila comoLazyPagingItems. Cuando se recopila comoLazyPagingItems, ahora también mostrará una lista vacía inmediatamente después de la composición inicial.
Compatibilidad con Kotlin Multiplatform
Paging ahora incluye artefactos compatibles con Kotlin Multiplataforma, en gran parte gracias al trabajo upstream del proyecto multiplatform-paging de CashApp.
paging-commontrasladó todas las APIs de Paging 3 acommony ahora es compatible con JVM y iOS, además de Android.paging-testingtrasladó su código acommony ahora es compatible con JVM y iOS, además de Android.paging-composetrasladó su código acommony envía un artefacto de Android, que coincide con la compatibilidad multiplataforma deandroidx.compose.paging-runtime,paging-guava,paging-rxjava2ypaging-rxjava3seguirán siendo solo para 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
- La paginación ahora usa la anotación
@MainThreadde AndroidX 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 incorporación de la 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
PagingDataPresenterahora es una clase pública. Ahora, los presentadores multiplataforma se pueden compilar sobrePagingDataPresenteren lugar de requerir APIs internas de Paging oAsyncPagingDataDifferdepaging-runtime. (Id1f74, b/315214786)- Se agregaron nuevos métodos auxiliares
LoadStatesyCombinedLoadStatespara verificar siLoadStatesestá en estado de error oNotLoading. También se agregó una nueva API que espera unLoadStateFlowhasta que una carga se estabiliza en el estadoNotLoadingo Error. (Id6c67)
Cambio de comportamiento
PagingData.empty()ahora envía estadosNotLoadingde forma predeterminada, a menos que se pasenLoadStatespersonalizados a su constructor. Esto se diferencia del comportamiento existente, en el que no se despachaLoadStatescuando se envía a unPagingDataAdaptero se despachan estados de carga cuando se recopila comoLazyPagingItems. Cuando se recopila comoLazyPagingItems, ahora también mostrará una lista vacía inmediatamente 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 con Kotlin Multiplatform
Paging ahora incluye artefactos compatibles con Kotlin Multiplataforma, en gran parte gracias al trabajo upstream del proyecto multiplatform-paging de CashApp. Esto nos permitirá evitar la divergencia entre dos repositorios y mantenerlos compatibles.
paging-commontrasladó todas las APIs de Paging 3 acommony ahora es compatible con JVM y iOS, además de Android.paging-testingtrasladó su código acommony ahora es compatible con JVM y iOS, además de Android.paging-composetrasladó su código acommony envía un artefacto de Android, que coincide con la compatibilidad multiplataforma deandroidx.compose.paging-runtime,paging-guava,paging-rxjava2ypaging-rxjava3seguirán siendo solo para Android.
Cambios en la API
- Se dejó de usar la interfaz pública de Logger que solo estaba destinada al uso interno (I16e95, b/288623117).
Contribución externa
- Gracias a veyndan de Cash App por ayudar a migrar Paging a Kotlin Multiplatform (#560, #561, #562, #573, #576, #577, #578, #579, #580, #581, #583, #584, #586, #609).
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
*-jvmy*-android. Para las variantes de macOS, iOS y Linux, usa3.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 corrigió un problema por el que la API de
asSnapshot()del artefacto de Paging Testing se bloqueaba cuando se pasaba un Flow compilado conPagingData.from(List), ya queasSnapshot()no tenía información sobre cuándo finalizaba la carga (a diferencia de la sobrecarga dePagingData.from(List, LoadStates)). Esta solución alternativa solo funciona para los flujos completables (p.ej., unflowOf(PagingData.from(...))). Para los flujos no completables (p.ej.,MutableStateFlow, usa la sobrecarga dePagingData.fromque proporcionaLoadStates). (I502c3) - Paging Compose ahora usa
AndroidUiDispatcher.Mainde forma interna para garantizar que los datos nuevos estén disponibles en el mismo fotograma en el que se completa 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 admite la vista previa de una lista de datos simulados creando un
PagingData.from(fakeData)y envolviendo esePagingData.from(fakeData)en unMutableStateFlow(p.ej.,MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Pasa este flujo a los elementos componibles@Previewcomo receptor decollectAsLazyPagingItems()para obtener una vista previa.PagingData - Compatibilidad con todos los diseños diferidos, como
LazyVerticalGridyHorizontalPager, 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 de nivel inferiorLazyPagingItems,itemKeyyitemContentType, que te ayudan a implementar los parámetroskeyycontentTypeen las APIs deitemsestándar que ya existen paraLazyColumn,LazyVerticalGridy sus equivalentes en APIs comoHorizontalPager. - Se dejaron de usar
items(lazyPagingItems)yitemsIndexed(lazyPagingItems), que solo admitenLazyListScope.
- Se admite la vista previa de una lista de datos simulados creando un
- Nuevo artefacto
paging-testingque 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:- Clase
TestPagerque te permite validar el comportamiento de tu propia implementación dePagingSourceindependientemente del Pager y la IU real. - APIs de
asPagingSourceFactorypara transformar unFlow<List<Value>>o unList<Value>estático en unPagingSourceFactoryque se puede pasar a un Pager en las pruebas - Extensión
asSnapshotde Kotlin enFlow<PagingData<Value>>, que convierte el elementoFlow<PagingData<Value>>en un elementoList<Value>directo. El objetoasSnapshot lambdate permite imitar la IU de tu app con APIs comoscrollTooappendScrollWhilepara que puedas verificar que la instantánea de los datos sea correcta en cualquier momento de tu conjunto de datos paginados.
- Clase
- Se agregaron registros predeterminados para exponer la información de depuración de la paginación en dos niveles:
VERBOSEyDEBUG. Los registros se pueden habilitar con el comandoadb shell setprop log.tag.Paging [DEBUG|VERBOSE]. Esto se aplica a la paginación con Views o con Compose. - Se agregaron constructores para
PagingDataAdapteryAsyncPagingDataDiffer, que aceptanCoroutineContexten lugar deCoroutineDispatcher - Se agregó una nueva interfaz funcional
PagingSourceFactoryque proporciona una superficie de API más explícita que las lambdas () ->PagingSourceanteriores. Esta fábrica se puede usar para crear instancias de un 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 que Paging deje de depender de detalles específicos 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-alpha20para que coincida con la versión de todos los demás artefactos de Paging.
Cambios en la API
- Se quitaron las APIs
items(LazyPagingItems)yitemsIndexed(LazyPagingItems)obsoletas de Paging Compose. Consulta las notas de la versión de Paging Compose1.0.0-alpha20para ver un ejemplo de sus APIs de reemplazo. (I9626e)
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
PagingSourceFactoryque proporciona una superficie de API más explícita que las expresiones lambda() -> PagingSourceexistentes. Esta fábrica se puede usar para crear instancias de unPager. (I33165, b/280655188) - Se agregó una nueva API de
paging-testingdeList<Value>.asPagingSourceFactory()para obtener unPagingSourceFactoryque solo se carga desde una lista inmutable de datos. La extensión existente enFlow<List<Value>>se debe seguir usando para realizar pruebas con varias generaciones de datos estáticos. (Id34d1, b/280655188)
Cambios en la API
- Todas las APIs públicas en paging-testing ahora están anotadas con
@VisibleForTestingpara garantizar que estas APIs solo se usen en pruebas. (I7db6e) - La API de
asSnapshotya no requiere que se pase unCoroutineScope. Ahora, de forma predeterminada, se usa el contexto heredado de su alcance principal. (Id0a78, b/282240990) - Se reorganizaron los parámetros del constructor
TestPagerpara que coincidan de forma intuitiva con el orden de los parámetros del constructorPagerreal (I6185a). - Se migró el uso de pruebas de paginación del tipo de lambda
() -> PagingSource<Key, Value>al tipoPagingSourceFactory<Key, Value>. (I4a950, b/280655188)
Cambios en el comportamiento
- Ya no se requiere el despachador principal para ejecutar pruebas de paginación de
asSnapshot. Establecerlo ya no genera 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
asSnapshotahora establece de forma predeterminada su parámetroloadOperationsen una expresión lambda vacía. Esto permite llamar aasSnapshotsin 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 unFlowque devuelve un objeto de fábrica reutilizable para generar instancias dePagingSource. (I5ff4f, I705b5) - Se actualizó la documentación sobre el constructor
LoadResult.Pagepara aclarar la necesidad de anularitemsBeforeyitemsAfterpara admitir saltos. (Ied354)
Contribuciones externas
- Gracias Veyndan por contribuir a que Paging deje de depender de detalles específicos de Android/JVM. (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, #493)
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-testingahora contiene un métodoasPagingSourceFactorypara crear unpagingSourceFactorya partir de unFlow<List<Value>>que se suministrará a un Pager. CadaList<Value>>que emite el flujo representa una generación de datos paginados. Esto facilita las pruebas de paginación, por ejemplo, en las transformaciones dePagingData, ya que falsifican una fuente de datos para que la recopile el localizador (I6f230, b/235528239) Se expandió el artefacto
paging-testingcon nuevas APIs adecuadas para verificar que los datos contenidos en unFlow<PagingData<T>>sean correctos. Se puede usar, por ejemplo, para confirmar la salida de un objetoFlow<PagingData<T>>desde tu capa ViewModel.Para ello, usa la extensión
asSnapshotde Kotlin en el objetoFlow<PagingData<Value>>, que convierte el elementoFlow<PagingData<Value>>en un elementoList<Value>directo. El objetoasSnapshotlambda te permite imitar la IU de tu app con APIs comoscrollTooappendScrollWhilede 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 valuesasSnapshotes un métodosuspendque se espera que se ejecute enrunTest. 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
getItemypeekenAsyncPagingDataDifferyPagingDataAdapterahora 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.datahastaLoadResult.Page.iterator(). De forma indirecta, esto permite el uso del métodoflattende la biblioteca estándar de Kotlin cuando se le da unaList<LoadResult.Page>como el caso de la propiedadpagesdePagingStateque se pasa al métodoPagingSource.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
AsyncPagingDataDifferoPagingDataAdapterpara exponer la información de depuración recopilada dePagingData. - Los registros se pueden habilitar mediante el comando
adb shelladb shell setprop log.tag.Paging [DEBUG|VERBOSE].(b/235527159).
Correcciones de errores
- Se corrigió el error del constructor
PagingDataDifferfaltante cuando se usabapaging-common:3.2.0-alpha01con el entorno de ejecuciónpaging-runtime:3.1.1o 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
PagingDataAdapteryAsyncPagingDataDiffer, que aceptanCoroutineContexten lugar deCoroutineDispatcher(Idc878). - De forma predeterminada,
PagingData.from()yPagingData.empty()ya no afectarán aCombinedLoadStatesen el lado del presentador. Se agregó una nueva sobrecarga que permite pasarsourceLoadStatesyremoteLoadStatesa estos constructores para mantener el comportamiento existente de configurarLoadStatescomo una terminal completa (es decir,NotLoading(endOfPaginationReached = false)) con la opción de incluir estados remotos, si es necesario. Si no se pasaLoadStates, se mantendrá el elementoCombinedLoadStatesanterior en el lado del presentador cuando reciba laPagingDataestática (Ic3ce5, b/205344028).
Correcciones de errores
- El resultado de
PagingSource.getRefreshKey()ahora se prioriza correctamente eninitialKeyen los casos en los que se mostrará un valor nulo, pero se estableció un valorinitialKeyno 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.NotLoadingintermedios entre las generaciones que.cachedIn()insertó incorrectamente. Este cambio facilita la reacción ante cambios deLoadState, ya que se quitan los eventosLoadState.NotLoadingredundantes 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>.observableyFlow<PagingData>.flowableya no son experimentales. - Cambios de comportamiento en
LoadState:endOfPaginationReachedahora es siemprefalseparaLoadType.REFRESHenPagingSourceyRemoteMediator.- Ahora, los
LoadStatesde Paging esperan valores válidos dePagingSourceyRemoteMediatorantes de emitirse de manera descendente. En algunos casos, las nuevas generaciones dePagingDatasiempre iniciarán correctamente conLoadingpara el estado de actualización, en lugar de restablecerse enNotLoadingde manera incorrecta. .loadStateFlowy.addLoadStateListenerde las API de presentador ya no envían de forma redundante una inicialCombinedLoadStatesque siempre tiene estados de mediador establecidos ennull.
- 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
.collectLatestenFlow<PagingData>, aunque se recomienda hacerlo. - Se agregó
PagingSource.LoadResult.Invalidcomo un tipo de datos que se muestra nuevo dePagingSource.load, lo que hace que Paging descarte las solicitudes de carga pendientes o futuras para estePagingSourcey 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
.onPagesPresentedy.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>.observableyFlow<PagingData>.flowableya no son experimentales. (Ie0bdd)
Correcciones de errores
- En LoadStates,
endOfPaginationReachedahora esfalsesiempre paraLoadType.REFRESH. Anteriormente, era posible que endOfPaginationReached fueratrueparaREFRESHde RemoteMediator, pero no para PagingSource. Ahora, se consolida este comportamiento para que siempre muestrefalse, 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).loadStateFlowy.addLoadStateListenerde las API de presentador ya no envían de forma redundante una inicialCombinedLoadStatesque siempre tiene estados de mediador establecidos ennully estados de origen establecidos enNotLoading(endOfPaginationReached = false). Eso significa lo siguiente:- Los estados de mediador siempre se propagarán si usas RemoteMediator.
- El registro de un objeto de escucha loadState nuevo o un recopilador nuevo en
.loadStateFlowya no emitirá de inmediato el valor actual si no recibió unCombinedLoadStatesreal dePagingData. Esto puede suceder si se inicia un recopilador u objeto de escucha antes de que se envíe un elementoPagingData. (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-rxjava3se incluyen en el paqueteandroidx.paging.rxjava3, para que no entren en conflicto conpaging-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 creando un
PagingData.from(fakeData)y envolviendo esePagingData.from(fakeData)en unMutableStateFlow(p.ej.,PagingDataMutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Si usas esos datos como entrada en tu@Preview, las llamadas acollectAsLazyPagingItems()proporcionaránLazyPagingItemscon vista previa. (I8a78d, b/194544557)
Correcciones de errores
- Los datos almacenados en caché de
pager.flow.cachedInque se recopilaron enLazyPagingItemsahora estarán disponibles de inmediato después de la restauración del estado sin necesidad de recopilación asíncrona. Esto significa que los datos almacenados en caché estarán listos para presentarse inmediatamente después de la composición inicial una vez 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 proporcionado por las bibliotecas de Wear y TV. La actualización principal de esta versión aborda esta inflexibilidad.
Para admitir más diseños diferidos, debimos 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 inferior en LazyPagingItems en itemKey y itemContentType. Estas APIs se enfocan en ayudarte a implementar los parámetros key y contentType en las APIs de items estándar que ya existen para LazyColumn y LazyVerticalGrid, así como sus equivalentes en APIs como HorizontalPager. (Ifa13b, Ib04f0, b/259385813)
Esto significa que admitir 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 obtener más ejemplos del uso de estas nuevas APIs, consulta nuestras muestras.
Si bien estos cambios hacen que los ejemplos de LazyColumn y LazyRow sean un poco más largos, consideramos que la coherencia en todos los diseños diferidos es un factor importante para quienes usan Paging Compose en el futuro. Por ese motivo, las extensiones existentes para LazyListScope ya no están disponibles. (I0c459, I92c8f, b/276989796)
Cambios en la API
- Para facilitar la migración a las nuevas APIs, las funciones de extensión
itemsyitemsIndexedenLazyListScopeahora admiten un parámetrocontentType, lo que refleja la compatibilidad en 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
CoroutineContextpersonalizado cuando se llama acollectLazyPagingItems(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
LazyPagingItemspara 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]deadb shell. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
Correcciones de errores
- Se corrigió el error del constructor
PagingDataDifferfaltante cuando se usabapaging-compose:1.0.0-alpha15conpaging-common:3.1.1o 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
PagingDataAdapteryAsyncPagingDataDiffer, que aceptanCoroutineContexten lugar deCoroutineDispatcher(Idc878).
Correcciones de errores
LazyPagingItemsahora establece el elementoloadStateinicial para que se actualiceLoadState.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 propiedadLazyPagingItems.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)yitemsIndexed(lazyPagingItems)que se usan para conectar Paging conLazyColumn/Rowahora 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. UsalazyPagingItems[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-alpha09solo es compatible con Compose1.0.0-beta07y 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 deLoadingaNotLoadingdespués de que los estados de mediador y de carga fuente se conviertan enNotLoadinga 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()aLazyPagingItem, que exponen la misma funcionalidad disponible enAsyncPagingDataDiffer/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.dataSourcedesde el valor inicial que produceLivePagedListoRxPagedList, 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
PagingStatesiempre fueranullcuando 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 detectedque a veces se producía cuando se usaban API deDataSourcev2 a través de rutas de compatibilidad. - La llamada
isInvaliddurante la inicialización deDataSourcecuando se usan a través de rutas de compatibilidad ahora se inician correctamente en fetchDispatcher en lugar del subproceso principal. Esto corrige unIllegalStateExceptiondebido al acceso a Db en el subproceso principal cuando se usa la implementaciónPagingSourcede 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.getRefreshKeyya 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 muestranull, perogetRefreshKey()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 dePagingState.anchorPosition, si es posible. (I4339a) - Ahora,
InvalidatingPagingSourceFactoryes 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()duranteadapter.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.invalidateya 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 deLoadingaNotLoadingdespués de que los estados de mediador y de carga fuente se conviertan enNotLoadinga fin de garantizar que se aplicó la actualización remota. (I65619) Se quitó LoadParams.pageSize (ya era obsoleto). Se recomienda usar
LoadParams.loadSizeen tu PagingSource.LoadParams.loadSizesiempre es igual aPagingConfig.pageSize, excepto para la llamada de carga inicial, en la que es igual aPagingConfig.initialLoadSize.Si estás probando tu DataSource de Paging2 sin usar un elemento Pager PagedList, es posible que
pageSizeno coincida conPagingConfig.pageSizesi también configurasinitialLoadSize. 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 objetoDataSourcede 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
dataRefreshFlowydataRefreshListenerobsoletas, 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 }
Correcciones de errores
- endOfPaginationreached para RemoteMediator
REFRESHahora se propaga correctamente a las actualizaciones de LoadState y evita que se activenAPPENDyPREPEND. (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
PREPENDoAPPEND. (I3e702, b/168169730) - Se solucionó un problema en el que no se llamaba a
getRefreshKeyen 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
LoadStateremoto se detenga si se produce una invalidación y quePagingSource.load(LoadParams.Refresh(...))se complete antes de queRemoteMediator.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
IllegalArgumentExceptioncuando 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.mapo.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#loadpor 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,
UnsupportedOperationExceptioncon mensajería más clara sobre la falta de compatibilidad para los ID estables se produce cada vez que se llama aPagingDataAdapter.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.Errorluego 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()aAsyncPagingDataDifferyPagingDataAdapterpara 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()aPagingDataAdapteryAsyncPagingDataDifferpara 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
PagingSourceyRemoteMediator. (I49ef3, b/161480176)
Correcciones de errores
- Los
PositionalDataSourcese convirtieron enPagingSourcea través del ayudantetoPagingSourceFactory, incluido elPagingSourcegenerado 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
PagingConfigcon valores predeterminados comunes (I39c50 y b/158576040). - Se agregaron sobrecargas para constructores de
PagingDataAdapteryAsyncPagingDataDiffercon valores predeterminados comunes (Ie91f5). - Las API de Adapter,
dataRefreshFlowydataRefreshListener, ahora pasan un valor booleano para indicar si unPagingDataestá 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()yfirstItemOrNull()(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
submitDataya no causa una falla debido a la recopilación simultánea en múltiplesPagingDatacuando se llama al elemento después de la versión con suspensión desubmitData(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
- Compatibilidad de primer nivel con las corrutinas y el flujo de Kotlin.
- Compatibilidad con la carga asíncrona con funciones de suspensión de corrutinas, RxJava Single o primitivas de Guava ListenableFuture.
- Estado de carga integrado y señales de error para diseño de IU adaptable, incluida la función de reintento y actualización.
- Mejoras en la capa del repositorio
- Se simplificó la interfaz de fuente de datos
- Se simplificó la paginación de la red y la base de datos
- Compatibilidad con cancelaciones
- Mejoras en la capa de presentación
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
IndexOutOfBoundsExceptionen casos excepcionales cuando se convierte una posición durante la invalidación.
Problema de lanzamiento
La versión
2.1.1de 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.2contiene 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 paraPagedList.Config.Builder. - Se agregó
androidx.paging.PagedList()como una alternativa de Kotlin paraPagedList.Builder. - Se agregó
DataSourceFactory.toLiveData()como una alternativa de Kotlin paraLivePagedListBuilder. - Se agregaron
DataSourceFactory.toObservable()ytoFlowable()como alternativas de Kotlin paraRxPagedListBuilder. - 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()muestraIndexOutOfBoundsExceptioncuando 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
PositionalDataSourcey 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 quePagedListAdapteryAsyncPagedListDifferno 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
PagedListAdapteryAsyncPagedListDifferno 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
RxPagedListBuildermediante el nuevo artefactoandroid.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ó asetFetchExecutor()(enPagedList.BuilderyLivePagedListBuilder).El nombre de
setMainThreadExecutor()cambió asetNotifyExecutor()(enPagedList.Builder).
Se corrigió el miembro
PagedList.mCallbackspara que sea privado.
Correcciones de errores
LivePagedListBuilderactiva una carga inicial dePagedListen 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
DataSourceinternos (que se usan para implementarDataSource.map, además de la carga dePositionalDataSourceinhabilitada 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.LoadParamstienen un constructor público y los objetosDataSource.LoadCallbackson abstractos. De esta manera, se puede envolver unDataSourceo directamente probar unDataSourcecon 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 unaDataSource.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.extensionsy elLivePagedListProvider. - Se cambió
DataSource.Factoryde 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
DataSourcede 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.onItemAtEndLoadedparaPositionalDataSourcesi 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