Paging
En esta tabla, se enumeran todos los artefactos del grupo androidx.paging
.
Artefacto | Versión estable actual | Próxima versión potencial | Versión beta | Versión alfa |
---|---|---|---|---|
paging-* | 2.1.2 | - | 3.0.0-beta03 | - |
paging-compose | - | - | - | 1.0.0-alpha08 |
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 }
Obtén información para usar las extensiones de Kotlin en 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-beta02" 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" // Jetpack Compose Integration implementation "androidx.paging:paging-compose:1.0.0-alpha08" }
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.
Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.
Paging Compose versión v1.0.0
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 deLoading
aNotLoading
después de que los estados de mediador y de carga fuente se conviertan enNotLoading
a fin de garantizar que se aplicó la actualización remota. (I65619)
Versión 1.0.0-alpha03
2 de diciembre de 2020
Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha03
. La versión 1.0.0-alpha03 contiene estas confirmaciones.
- Se actualizó para que coincida con Compose 1.0.0-alpha08.
Versión 1.0.0-alpha02
11 de noviembre de 2020
Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha02
. La versión 1.0.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- Se agregaron los métodos
.peek()
,.snapshot()
,.retry()
y.refresh()
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.0
Versión 3.0.0-beta03
24 de marzo de 2021
Lanzamiento de androidx.paging:paging-*:3.0.0-beta03
. La versión 3.0.0-beta03 contiene estas confirmaciones.
Correcciones de errores
- Se renovó la manera en que se controlan los marcadores de posición cuando se vuelve a cargar la lista para evitar saltos inesperados en RecyclerView. Para conocer más detalles, consulta NullPaddedDiffer.md. (If1490, b/170027529, b/177338149)
- Los distintos compiladores PagedList (ruta de compatibilidad antigua) ya no llaman de manera incorrecta a
DataSource.Factory.create()
en la conversación principal cuando se llama a.build()
. (b/182798948)
Versión 3.0.0-beta02
10 de marzo de 2021
Lanzamiento de androidx.paging:paging-*:3.0.0-beta02
. La versión 3.0.0-beta02 contiene estas confirmaciones.
Cambios en la API
- Las extensiones Rx3 ahora propagan de forma correcta el requisito de participación
@ExperimentalCoroutinesApi
. Anteriormente, se marcaban en el método@get
, que el compilador de Kotlin ignoraba debido a https://youtrack.jetbrains.com/issue/KT-45227. (I5733c)
Correcciones de errores
- Se aplicaron restricciones sobre el uso público de las API experimentales. (I6aa29, b/174531520)
- Se corrigió un error que provocaba que
PagingState
siempre fueranull
cuando se llamaba a la actualización remota. - Se corrigió un error por el que las páginas vacías que mostraba PagingSource no permitían que Paging se recuperara de nuevo para completar
prefetchDistance
, lo que provocaba que se detenga.
Versión 3.0.0-beta01
10 de febrero de 2021
Lanzamiento de androidx.paging:paging-*:3.0.0-beta01
. La versión 3.0.0-beta01 contiene estas confirmaciones.
Cambios en la API
- Ahora, los wrappers Rx2 y Rx3 exponen la anotación experimental de la que depende. Si usas los wrappers de compat de Rx en Paging-rxjava2 o Paging-rxjava3, ahora deberás anotar los usos con
@OptIn(ExperimentalCoroutinesApi::class)
. (Ib1f9d)
Correcciones de errores
- Se corrigió
IndexOutOfBoundsException: Inconsistency detected
que a veces se producía cuando se usaban API deDataSource
v2 a través de rutas de compatibilidad. - La llamada
isInvalid
durante la inicialización deDataSource
cuando se usan a través de rutas de compatibilidad ahora se inician correctamente en fetchDispatcher en lugar del subproceso principal. Esto corrige unIllegalStateException
debido al acceso a Db en el subproceso principal cuando se usa la implementaciónPagingSource
de Room.
Versión 3.0.0-alpha13
27 de enero de 2021
Lanzamiento de androidx.paging:paging-*:3.0.0-alpha13
. La versión 3.0.0-alpha13 contiene estas confirmaciones.
Cambios en la API
- La implementación de
PagingSource.getRefreshKey
ya no es opcional. Ahora es una función abstracta sin una implementación predeterminada. La migración de usuarios puede seguir mostrando la implementación predeterminada, que solo 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,
InvalidatingPagingSourceFactory
es una clase final. (Ia3b0a) - Se permite la configuración del comportamiento del separador de terminal (encabezado/pie de página) con un parámetro opcional SeparatorType adicional. Estas son las dos opciones:
FULLY_COMPLETE
: Comportamiento existente; debes esperar a PagingSource y RemoteMediator para marcar el endOfPaginationReached antes de agregar separadores de terminales. Si no se utiliza RemoteMediator, se ignora el loadState remoto. Esto es muy útil si solo deseas mostrar separadores de sección cuando esta se carga por completo, incluida la recuperación de la fuente remota, p. ej., la red.SOURCE_COMPLETE
: Solo espera que PagingSource marque endOfPaginationReachect, incluso si se usa RemoteMediator. Esto permite que los encabezados y pies de página se presenten de forma síncrona con la carga inicial, lo que evita que los usuarios tengan que desplazarse para ver los separadores de terminal. (Ibe993, b/174700218)
Correcciones de errores
- Se corrigió una fuga de memoria poco frecuente que se produce cuando se invalida un PagingSource antes de que PageFetcher incluso pueda comenzar a cargarla desde ahí. (I9606b, b/174625633)
Versión 3.0.0-alpha12
13 de enero de 2021
Lanzamiento de androidx.paging:paging-*:3.0.0-alpha12
. La versión 3.0.0-alpha12 contiene estas confirmaciones.
Cambios en la API
- InvalidatingPagingSourceFactory dejará de ser una clase abstracta, ya que nunca tuvo ningún método abstracto. (I4a8c4)
- Se agregó una sobrecarga de .cachedIn() que acepta ViewModel en lugar de Lifecycle o CoroutineScope para los usuarios de Java. (I97d81, b/175332619)
- Permite que los emisores de Java usen operaciones de transformación de PagingData de manera asíncrona mediante la aceptación de un Ejecutor en los argumentos del operador de transformación. Todos los operadores de transformación de -Sync ahora tienen el sufijo "-Sync", y los usuarios de las corrutinas de Kotlin deberán desambiguarlas llamando a la función de extensión, que acepta un bloqueo suspendido.
Todos los operadores de transformación de PagingData se movieron a extensiones de la clase PagingDataTransforms estática. Los usuarios de Java deberán llamarlos con asistentes estáticos, como p. ej.,
PagingDataTransforms.map(pagingData, transform)
. Para los usuarios de Kotlin, la sintaxis es la misma, pero deberán importar la función. (If6885, b/172895919)
Correcciones de errores
- Se corrigió un error en el que no se llamaba a
RemoteMediator.load()
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.invalidate
ya no es una función abierta. Si necesitas recibir una notificación cuando se produce una invalidación, procura llamar al método registerInvalidedCallback en lugar de anular la invalidación. (I628d9, b/173029013, b/137971356)- Ahora, Pager tiene un solo constructor experimental junto a sus constructores regulares, en lugar de filtrar las API experimentales en una API pública no experimental mediante la anotación de participación. (I9dc61, b/174531520)
- Se actualizaron las propiedades de conveniencia,
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
,CombinedLoadStates.append
, para pasar deLoading
aNotLoading
después de que los estados de mediador y de carga fuente se conviertan enNotLoading
a fin de garantizar que se aplicó la actualización remota. (I65619) Se quitó LoadParams.pageSize (ya era obsoleto). Se recomienda usar
LoadParams.loadSize
en tu PagingSource.LoadParams.loadSize
siempre es igual 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
pageSize
no coincida conPagingConfig.pageSize
si 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 objetoDataSource
de copia de seguridad en el CoroutineDispatcher incorrecto. Esta corrección resuelve un bloqueo y posibles casos de ANR, especialmente cuando se usa la implementación actual de PagingSource de Room, que usa esta ruta de compatibilidad.
Versión 3.0.0-alpha10
2 de diciembre de 2020
Lanzamiento de androidx.paging:paging-*:3.0.0-alpha10
. La versión 3.0.0-alpha10 contiene estas confirmaciones.
Cambios en la API
Se quitaron las API
dataRefreshFlow
ydataRefreshListener
obsoletas, ya que son redundantes con las actualizaciones del objeto loadStateFlow/Listener. Para quienes migran, el equivalente loadStateFlow es el siguiente:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
Correcciones de errores
- endOfPaginationreached para RemoteMediator
REFRESH
ahora se propaga correctamente a las actualizaciones de LoadState y evita que se activenAPPEND
yPREPEND
. (I94a3f, b/155290248) - Presentar una lista vacía, ya sea debido a una página inicial vacía o un filtrado pesado, ya no impedirá que Paging inicie las cargas
PREPEND
oAPPEND
. (I3e702, b/168169730) - Se solucionó un problema en el que no se llamaba a
getRefreshKey
en las generaciones posteriores de PagingSource cuando se producían invalidaciones. (I45460, b/170027530)
Contribución externa
- Se agregó una nueva clase abstracta InvalidationPagingSourceFactory con una API de
.invalidate()
que reenvía la invalidación a todas las PagingSources que emite. Gracias a @claraf3. (Ie71fc, b/160716447)
Errores conocidos
- Es posible que los encabezados y pies de página de la transformación .insertSeparators() no aparezcan inmediatamente cuando se usa RemoteMediator. b/172254056
- El uso de RemoteMediator puede hacer que
LoadState
remoto se detenga si se produce una invalidación y 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
IllegalArgumentException
cuando se usaban separadores con RemoteMediator y se activaba una invalidación mientras se seguía ejecutando una carga remota que muestra endOfPagination. (I3a260)
Versión 3.0.0-alpha08
28 de octubre de 2020
Lanzamiento de androidx.paging:paging-*:3.0.0-alpha08
. La versión 3.0.0-alpha08 contiene estas confirmaciones.
Cambios en la API
- Se habilitaron las conversiones SAM en Kotlin con una interfaz funcional, disponible en Kotlin 1.4, a fin de combinar las variantes de Kotlin/Java de
DataSource.InvalidatedCallback
. Eso también corrige un error en el que no se llamaba a la variante de Kotlin de las devoluciones de llamada no válidas después de la transformación de.map
o.mapByPage
(I1f244, b/165313046).
Correcciones de errores
- Se mejoró considerablemente la interacción de Paging con ViewPager. En particular, Paging ya no cancelará una llamada de
RemoteMediator#load
por una invalidación de página. Además, dejará de enviar una solicitud de carga adicional o de preparación hasta que se complete correctamente la solicitud de actualización REFRESH, si una actualización con REFRESH es necesaria (I6390b, b/162252536). - Se habilitó la comprobación de lint de API para MissingGetterMatchingBuilder en androidx (I4bbea, b/138602561).
- Se corrigió un error por el cual los ayudantes de
ConcatAdapter
.withLoadState*
fallaban debido a la notificación de RecyclerView desde el subproceso en segundo plano (I18bb5, b/170988309). - Se corrigió un error por el que cargar una página muy pequeña que no estaba vacía, en ocasiones, evitaba que la carga previa capture cargas correctamente (Iffda3, b/169259468).
Versión 3.0.0-alpha07
1 de octubre de 2020
Lanzamiento de androidx.paging:paging-*:3.0.0-alpha07
. La versión 3.0.0-alpha07 contiene estas confirmaciones.
Cambios en la API
- Los operadores asíncronos basados en Guava para PagingData ahora aceptan un ejecutor como parámetro para controlar el contexto de ejecución (Id4372).
Correcciones de errores
- Se corrigió la excepción IndexOutOfBounds arrojada en RemoteMediator debido a una condición de carrera (I00b7f, b/165821814).
- Se corrigió una condición de carrera en la conversión DataSource -> PagingSource que podría hacer que PagingSource omita las señales de invalidación de DataSource.
- Se solucionó un problema en la lógica de obtención de páginas que, a veces, hacía que no se recogieran nuevas generaciones de PagingSource hasta que se invocara PagingDataAdapter.refresh().
- Se solucionó un problema que provocaba que la posición de desplazamiento, a veces, se perdiera cuando se usaba un DataSource convertido en un PagingSource (como el que se producía en Room), junto con RemoteMediator.
Contribución externa
- Gracias a @simonsilleriller por agregar RxJava2, RxJava3 y operadores de transformación asincrónica basados en Guava para PagingData.
Versión 3.0.0-alpha06
2 de septiembre de 2020
Lanzamiento de androidx.paging:paging-*:3.0.0-alpha06
. La versión 3.0.0-alpha06 contiene estas confirmaciones.
Cambios en la API
- Ahora,
UnsupportedOperationException
con mensajería más clara sobre la falta de compatibilidad para los ID estables se produce cada vez que se llama 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.Error
luego de reintentar una carga ya no provoca que los accesos a elementos vuelvan a activar incorrectamente otro reintento.
Contribución externa
- ¡Gracias, Clara F por ayudar a mejorar algunas pruebas! (549612).
Versión 3.0.0-alpha04
5 de agosto de 2020
Lanzamiento de androidx.paging:paging-*:3.0.0-alpha04
. La versión 3.0.0-alpha04 contiene estas confirmaciones.
Cambios en la API
- Se agregó la API de
peek()
aAsyncPagingDataDiffer
yPagingDataAdapter
para permitir el acceso a los datos presentados sin que se activen las cargas de página (I38898, b/159104197). - Se agregó una API de
snapshot()
aPagingDataAdapter
yAsyncPagingDataDiffer
para poder recuperar los elementos presentados sin activar la recuperación de la página (I566b6, b/159104197). - Se agregó un constructor de
PagingData.from(List<T>)
que permite presentar listas estáticas, las cuales pueden combinarse con el flujo general de PagingData, a fin de mostrarlas en ciertos estados; p. ej., antes de que termine la actualización REFRESH inicial o simplemente para probar las transformaciones (Id134d). - Las API de objeto de escucha y flujo dataRefresh dejaron de estar disponibles, ya que estaban diseñadas para exponer el estado de los elementos presentados en una actualización con REFRESH. Sin embargo, resultaron redundantes a partir de las mejoras en el tiempo de devolución de llamada del flujo y el objeto de escucha loadState y la propiedad itemCount (Ia19f3).
- Se agregaron wrappers de compatibilidad de RxJava3 para
PagingSource
yRemoteMediator
. (I49ef3, b/161480176)
Correcciones de errores
- Los
PositionalDataSource
se convirtieron enPagingSource
a través del ayudantetoPagingSourceFactory
, incluido elPagingSource
generado por Room. Ahora se marcan correctamente para admitir saltos (I3e84c, b/162161201). - Se corrigió un error en el que la variante síncrona de submitData a veces provocaba una carrera y causaba una
ClosedSendChannelException
(I4d702, b/160192222).
Contribución externa
- ¡Agradecemos a Zac Sweers por agregar wrappers de compatibilidad de RxJava3 en nombre de Slack! (I49ef3, b/161480176).
Versión 3.0.0-alpha03
22 de julio de 2020
Lanzamiento de androidx.paging:paging-*:3.0.0-alpha03
. La versión 3.0.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- El constructor de PagingState ahora es público, lo que debería facilitar la implementación de pruebas de getRefreshKey() (I8bf15).
- Se ocultaron de Java las variantes de función del método map de Kotlin DataSource para resolver la ambigüedad entre las variantes originales y las de Kotlin (If7b23, b/161150011).
- Se marcaron con @JvmSynthetic las API redundantes incluidas para mayor comodidad de los usuarios de Kotlin (I56ae5).
- Se agregaron sobrecargas para el constructor de LoadResult.Page, que establece los valores predeterminados de itemsBefore y itemsAfter en COUNT_UNDEFINED (I47849).
- Los operadores existentes de PagingData aceptan métodos con suspensión y se introdujeron los nuevos operadores sin suspensión mapSync, flatMapSync y filterSync para los usuarios de Java. Se trasladaron los métodos de transformación existentes a funciones de extensión, por lo que los usuarios de Kotlin ahora deberán importarlos (I34239, b/159983232).
Correcciones de errores
- Room (y PositionalDataSource) PagingSources mostrará un separador principal como parte de la primera página, por lo que el usuario no necesita desplazarse para revelarlo (I6f747, b/160257628).
- Los accesos de elementos en marcadores de posición ahora activan correctamente las cargas de PagingSource hasta que se muestre una página que cumpla con el índice solicitado después de que lo transforme PagingData.filter() (I95625, b/158763195).
- Se corrigió un error en el que, a veces, el desplazamiento después de que PagingSource mostraba un error podía impedir los reintentos de PagingDataAdapter.retry() (I1084f, b/160194384).
- Se solucionó un problema en el que los accesos a elementos después de soltar una página no cargaban páginas aunque el acceso a los elementos estaba dentro de prefetchDistance (Ie95ae, b/160038730).
- La configuración de PagingConfig.maxSize ya no habilita los marcadores de posición después de un evento de soltar (I2be29, b/159667766).
Versión 3.0.0-alpha02
24 de junio de 2020
Lanzamiento de androidx.paging:paging-*:3.0.0-alpha02
. La versión 3.0.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- Se agregaron sobrecargas para el constructor de
PagingConfig
con valores predeterminados comunes (I39c50 y b/158576040). - Se agregaron sobrecargas para constructores de
PagingDataAdapter
yAsyncPagingDataDiffer
con valores predeterminados comunes (Ie91f5). - Las API de Adapter,
dataRefreshFlow
ydataRefreshListener
, ahora pasan un valor booleano para indicar si unPagingData
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()
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
submitData
ya no causa una falla debido a la recopilación simultánea en múltiplesPagingData
cuando 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
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 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()
muestraIndexOutOfBoundsException
cuando el índice no es válido. Anteriormente, fallaba sin proporcionar una excepción clara. - Se corrigió un error por el que un tamaño de carga inicial extremadamente pequeño junto con datos sin modificar hacían que la carga no continuara. b/113122599
Versión 2.0.0
Versión 2.0.0
1 de octubre de 2018
Lanzamiento de Paging 2.0.0
con una sola corrección de errores.
Correcciones de errores
- Se corrigió un error que ocurría con desplazamientos rápidos mediante
PositionalDataSource
y marcadores de posición b/114635383.
Versión 2.0.0-beta01
2 de julio de 2018
Correcciones de errores
- Se corrigió el contenido que desaparecía en algunos casos anexados (marcadores de posición inhabilitados, PositionalDataSource). b/80149146
- (Ya se lanzó en
1.0.1
) Se solucionaron fallas en las quePagedListAdapter
yAsyncPagedListDiffer
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
yAsyncPagedListDiffer
no identificaban eventos de movimiento. b/110711937
RxJava2 versión 1.0.0
RxJava2 versión 1.0.0-rc1
16 de mayo de 2018
Paging RxJava2 1.0.0-rc1
pasa a la versión potencial sin cambios respecto de la versión alfa inicial.
Versión 1.0.0
Versión 1.0.0-rc1
19 de abril de 2018 Versión potencial de Paging
No tenemos problemas conocidos o características nuevas previstos para el lanzamiento de Paging 1.0.0
. Actualiza tus proyectos para usar 1.0.0-rc1
y ayúdanos a ponerlo a prueba para que podamos crear una versión 1.0.0
confiable.
No hay cambios en esta versión, es igual a 1.0.0-beta1
.
Versión 1.0.0-beta1
5 de abril de 2018
Paging estará en versión beta durante un breve período de tiempo antes de pasar a la versión potencial.
No tenemos planificado ningún cambio adicional de API para Paging 1.0
y los estándares para cambios de API son muy altos.
Lanzamiento de compatibilidad alfa de RxJava2 con Paging como módulo opcional por separado (android.arch.paging:rxjava2:1.0.0-alpha1
). Tendrá una versión por separado temporalmente hasta que se estabilice.
Esta biblioteca nueva proporciona una alternativa a RxJava2 respecto de LivePagedListBuilder
, capaz de crear objetos Observable
y Flowable
, y de tomar objetos Scheduler
en lugar de Executor
:
Kotlin
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
Java
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
Nuevas funciones
- Se agrega
RxPagedListBuilder
mediante el nuevo 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.Builder
yLivePagedListBuilder
).El nombre de
setMainThreadExecutor()
cambió asetNotifyExecutor()
(enPagedList.Builder
).
Se corrigió el miembro
PagedList.mCallbacks
para que sea privado.
Correcciones de errores
LivePagedListBuilder
activa una carga inicial dePagedList
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 implementarDataSource.map
, además de la carga dePositionalDataSource
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 objetosDataSource.LoadCallback
son abstractos. De esta manera, se puede envolver unDataSource
o directamente probar unDataSource
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 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.extensions
y elLivePagedListProvider
. - Se cambió
DataSource.Factory
de una interfaz a una clase abstracta a fin de habilitar la funcionalidad de mapa.
Correcciones de errores
- Se cambiaron los elementos Builder y ahora son definitivos. b/70848565
- La implementación de
DataSource
de Room ahora administra consultas con varias tablas. Esta corrección está incluida en Room 1.1.0-beta1 (consulta más arriba). - Se corrigió un error en el que no se invocaba a
BoundaryCallback.onItemAtEndLoaded
paraPositionalDataSource
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