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.5 | - | - | - |
paging-compose | 3.3.5 | - | - | - |
Cómo declarar dependencias
Para agregar una dependencia en Paging, debes agregar el repositorio de Maven de Google a tu proyecto. Consulta el repositorio de Maven de Google para obtener más información.
Agrega las dependencias de los artefactos que necesites en el archivo build.gradle
de tu app o módulo:
Groovy
dependencies { def paging_version = "3.3.2" implementation "androidx.paging:paging-runtime:$paging_version" // alternatively - without Android dependencies for tests testImplementation "androidx.paging:paging-common:$paging_version" // optional - RxJava2 support implementation "androidx.paging:paging-rxjava2:$paging_version" // optional - RxJava3 support implementation "androidx.paging:paging-rxjava3:$paging_version" // optional - Guava ListenableFuture support implementation "androidx.paging:paging-guava:$paging_version" // optional - Jetpack Compose integration implementation "androidx.paging:paging-compose:3.3.2" }
Kotlin
dependencies { val paging_version = "3.3.2" implementation("androidx.paging:paging-runtime:$paging_version") // alternatively - without Android dependencies for tests testImplementation("androidx.paging:paging-common:$paging_version") // optional - RxJava2 support implementation("androidx.paging:paging-rxjava2:$paging_version") // optional - RxJava3 support implementation("androidx.paging:paging-rxjava3:$paging_version") // optional - Guava ListenableFuture support implementation("androidx.paging:paging-guava:$paging_version") // optional - Jetpack Compose integration implementation("androidx.paging:paging-compose:3.3.2") }
Obtén información para usar las extensiones de Kotlin en la documentación de ktx.
Para obtener más información sobre las dependencias, consulta Cómo agregar dependencias de compilación.
Comentarios
Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes de esta biblioteca antes de crear uno nuevo. Puedes agregar tu voto a un error existente haciendo clic en el botón de la estrella.
Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.
Versión 3.3
Versión 3.3.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
RecyclerView
arrojabaIndexOutOfBoundsException
cuando el usuario se desplazaba mientras se actualizabaRecyclerView
. (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-common
ypaging-testing
agregaron nuevos destinos de Kotlin multiplataforma:watchos
,tvos
ylinuxArm64
(90c9768) (53e0eca).
Versión 3.3.1
24 de julio de 2024
Lanzamiento de androidx.paging:paging-*:3.3.1
. La versión 3.3.1 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un problema por el que
AsyncPagingDataDiffer
o las APIs compiladas sobre él, como elPagingDataAdapter
que 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 producía cuando se quitaban elementos de la fuente de datos de respaldo mientras se desplazaba un
RecyclerView
con unPagingDataAdapter
oAsyncPagingDataDiffer
. (I8c65a, b/347649763).
Versión 3.3.0
14 de mayo de 2024
Lanzamiento de androidx.paging:paging-*:3.3.0
. La versión 3.3.0 contiene estas confirmaciones.
Cambios importantes desde la versión 3.2.0
PagingDataPresenter
ahora es una clase pública. Los presentadores multiplataforma ahora se pueden compilar enPagingDataPresenter
en lugar de requerir APIs de paginación internas oAsyncPagingDataDiffer
depaging-runtime
.- Se agregaron nuevos métodos auxiliares
LoadStates
yCombinedLoadStates
enhasError
yisIdle
para verificar siLoadStates
está 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 estadoNotLoading
o de error. PagingData.empty()
ahora despacha estadosNotLoading
de forma predeterminada, a menos que se pasenLoadStates
personalizados a su constructor. Esto se aleja del comportamiento existente en el que no se envíaLoadStates
cuando se envía a unPagingDataAdapter
o se envían estados de carga cuando se recopilan comoLazyPagingItems
. Cuando se recopile comoLazyPagingItems
, ahora también mostrará una lista vacía de inmediato después de la composición inicial.
Compatibilidad multiplataforma de Kotlin
El paginado ahora envía artefactos compatibles con Kotlin multiplataforma, en gran parte gracias al trabajo de transferencia del proyecto multiplatform-paging de CashApp.
paging-common
trasladó todas las APIs de Paging 3 acommon
y ahora es compatible con jvm y iOS, además de Android.paging-testing
trasladó su código acommon
y ahora es compatible con jvm y iOS, además de Android.paging-compose
trasladó su código acommon
y envía un artefacto de Android que coincide con la compatibilidad multiplataforma deandroidx.compose
.paging-runtime
,paging-guava
,paging-rxjava2
ypaging-rxjava3
solo se mantendrán en Android.
Versión 3.3.0-rc01
1 de mayo de 2024
Se lanzó androidx.paging:paging-*:3.3.0-rc01
sin cambios en Paging 3.3.0-beta01. La versión 3.3.0-rc01 contiene estas confirmaciones.
Versión 3.3.0-beta01
3 de abril de 2024
Lanzamiento de androidx.paging:paging-*:3.3.0-beta01
sin cambios notables. La versión 3.3.0-beta01 contiene estas confirmaciones.
Versión 3.3.0-alpha05
20 de marzo de 2024
Lanzamiento de androidx.paging:paging-*:3.3.0-alpha05
. La versión 3.3.0-alpha05 contiene estas confirmaciones.
Cambios en la API
- El paginado ahora usa la anotación
@MainThread
de AndroidX Annotation para el código común. (I78f0d, b/327682438)
Versión 3.3.0-alpha04
6 de marzo de 2024
Lanzamiento de androidx.paging:paging-*:3.3.0-alpha04
. La versión 3.3.0-alpha04 contiene estas confirmaciones.
Correcciones de errores
- Se corrigieron errores menores de documentación relacionados con la adición de compatibilidad multiplataforma de Kotlin. (aosp/2950785)
Versión 3.3.0-alpha03
7 de febrero de 2024
Lanzamiento de androidx.paging:paging-*:3.3.0-alpha03
. La versión 3.3.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
PagingDataPresenter
ahora es una clase pública. Los presentadores multiplataforma ahora se pueden compilar enPagingDataPresenter
en lugar de requerir APIs de paginación internas oAsyncPagingDataDiffer
depaging-runtime
. (Id1f74, b/315214786).- Se agregaron nuevos métodos auxiliares
LoadStates
yCombinedLoadStates
para verificar siLoadStates
está en estado de error oNotLoading
. También se agregó una nueva API que espera en unLoadStateFlow
hasta que una carga se establezca enNotLoading
o en el estado de error. (Id6c67).
Cambio de comportamiento
PagingData.empty()
ahora despacha estadosNotLoading
de forma predeterminada, a menos que se pasenLoadStates
personalizados a su constructor. Esto se aleja del comportamiento existente en el que no se envíaLoadStates
cuando se envía a unPagingDataAdapter
o se envían estados de carga cuando se recopilan comoLazyPagingItems
. Cuando se recopile comoLazyPagingItems
, ahora también mostrará una lista vacía de inmediato después de la composición inicial. (I4d11d, b/301833847).
Versión 3.3.0-alpha02
20 de septiembre de 2023
Lanzamiento de androidx.paging:paging-*:3.3.0-alpha02
. La versión 3.3.0-alpha02 contiene estas confirmaciones.
Compatibilidad multiplataforma de Kotlin
La paginación ahora envía artefactos compatibles con Kotlin multiplataforma, en gran parte gracias al trabajo transferido del proyecto multiplatform-paging de CashApp. Esto nos permitirá evitar la divergencia entre dos repositorios y mantenerlos compatibles.
paging-common
trasladó todas las APIs de Paging 3 acommon
y ahora es compatible con jvm y iOS, además de Android.paging-testing
trasladó su código acommon
y ahora es compatible con jvm y iOS, además de Android.paging-compose
trasladó su código acommon
y envía un artefacto de Android que coincide con la compatibilidad multiplataforma deandroidx.compose
.paging-runtime
,paging-guava
,paging-rxjava2
ypaging-rxjava3
solo se mantendrán en Android.
Cambios en la API
- La interfaz pública de Logger, que solo estaba destinada al uso interno, dejó de estar disponible (I16e95, b/288623117).
Contribución externa
- Gracias a veyndan de Cash App por ayudar a trasladar Paging a Kotlin multiplataforma (#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
*-jvm
y*-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 solucionó un problema en el que la API de
asSnapshot()
del artefacto de pruebas de paginación se bloqueaba cuando se pasaba un flujo compilado 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 flujos completables (p.ej., unflowOf(PagingData.from(...))
). Para flujos no completables (p.ej.,MutableStateFlow
, usa la sobrecarga dePagingData.from
que proporcionaLoadStates
). (I502c3). - Paging Compose ahora usa
AndroidUiDispatcher.Main
de forma interna para garantizar que los datos nuevos estén disponibles en el mismo fotograma cuando se complete la carga. (Ia55af).
Versión 3.2.0
26 de julio de 2023
Lanzamiento de androidx.paging:paging-*:3.2.0
. La versión 3.2.0 contiene estas confirmaciones.
Cambios importantes desde la versión 3.1.0
- Paging Compose alcanzó la estabilidad de la API y se volvió a combinar con el resto de Paging, donde su versión ahora coincide con todos los demás artefactos de Paging. Entre los cambios desde la versión 3.1.0, se incluyen los siguientes:
- Se agregó compatibilidad para obtener una vista previa de una lista de datos falsos. Para ello, crea un
PagingData.from(fakeData)
y une esePagingData
en unMutableStateFlow
(p. ej.,MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Pasa este flujo a los elementos componibles@Preview
como receptor para quecollectAsLazyPagingItems()
obtenga una vista previa. - Compatibilidad con todos los diseños diferidos, como
LazyVerticalGrid
yHorizontalPager
, 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ónLazyPagingItems
de nivel inferioritemKey
yitemContentType
, que te ayudan a implementar los parámetroskey
ycontentType
en las APIs estándar deitems
que ya existen paraLazyColumn
,LazyVerticalGrid
, así como sus equivalentes en APIs comoHorizontalPager
. items(lazyPagingItems)
yitemsIndexed(lazyPagingItems)
, que solo admitenLazyListScope
, dejaron de estar disponibles.
- Se agregó compatibilidad para obtener una vista previa de una lista de datos falsos. Para ello, crea un
- Nuevo artefacto
paging-testing
que proporciona APIs diseñadas para realizar pruebas de unidades en cada capa de tu app y su integración con Paging de forma aislada. Por ejemplo, incluye lo siguiente:- Una clase
TestPager
que te permite validar el comportamiento de tu propia implementación dePagingSource
personalizada independientemente del objeto Pager y la IU real. - APIs de
asPagingSourceFactory
para transformar unFlow<List<Value>>
o unList<Value>
estático en unPagingSourceFactory
que se puede pasar a un objeto Pager en pruebas - Extensión
asSnapshot
de Kotlin enFlow<PagingData<Value>>
, que convierte el elementoFlow<PagingData<Value>>
en un elementoList<Value>
directo.asSnapshot lambda
te permite imitar la IU de tu app con APIs comoscrollTo
oappendScrollWhile
para que puedas verificar que la instantánea de los datos sea correcta en cualquier momento de tu conjunto de datos paginados.
- Una clase
- Se agregaron registros predeterminados para exponer la información de depuración de paginación en dos niveles:
VERBOSE
yDEBUG
. Los registros se pueden habilitar mediante el comandoadb shell setprop log.tag.Paging [DEBUG|VERBOSE]
. Esto se aplica tanto a la paginación con vistas como a la paginación con Compose. - Se agregaron constructores para
PagingDataAdapter
yAsyncPagingDataDiffer
, que aceptanCoroutineContext
en lugar deCoroutineDispatcher
- Se agregó una nueva interfaz funcional
PagingSourceFactory
que proporciona una plataforma de API más explícita que las lambdas anteriores () ->PagingSource
. Esta fábrica se puede usar para crear una instancia de Pager.
Versión 3.2.0-rc01
21 de junio de 2023
Lanzamiento de androidx.paging:paging-*:3.2.0-rc01
. La versión 3.2.0-rc01 contiene estas confirmaciones.
Contribución externa
- Gracias Veyndan por contribuir a alejar el paginado de las especificaciones de Android/JVM. (#553, #554, #555, #559)
Versión 3.2.0-beta01
7 de junio de 2023
Lanzamiento de androidx.paging:paging-*:3.2.0-beta01
. La versión 3.2.0-beta01 contiene estas confirmaciones.
Paging Compose
- Paging Compose alcanzó oficialmente la estabilidad de la API. Por lo tanto, la versión se actualizó de
1.0.0-alpha20
para que coincida con la versión de todos los demás artefactos de paginación.
Cambios en la API
- Se quitaron las APIs de
items(LazyPagingItems)
yitemsIndexed(LazyPagingItems)
obsoletas de Paging Compose. Consulta las notas de la versión de1.0.0-alpha20
de Paging Compose para 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
PagingSourceFactory
que proporciona una plataforma de API más explícita que las lambdas() -> PagingSource
existentes. Esta fábrica se puede usar para crear una instancia dePager
. (I33165, b/280655188) - Se agregó una nueva API de
paging-testing
deList<Value>.asPagingSourceFactory()
para obtener unPagingSourceFactory
que solo se cargue desde una lista inmutable de datos. La extensión existente enFlow<List<Value>>
aún debe usarse para realizar pruebas con varias generaciones de datos estáticos. (Id34d1, b/280655188)
Cambios en la API
- Todas las APIs públicas en las pruebas de paginación ahora están con anotaciones
@VisibleForTesting
para garantizar que se usen solo en pruebas. (I7db6e) - La API de
asSnapshot
ya no requiere pasar unCoroutineScope
. Ahora, de forma predeterminada, usa el contexto heredado de su alcance superior. (Id0a78, b/282240990). - Se reordenaron los parámetros del constructor
TestPager
para que coincidan de forma intuitiva con el orden de los parámetros reales del constructorPager
(I6185a). - Se migró el uso de la prueba de paginación del tipo 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
. Si lo configuras, ya no se realizarán cambios en el comportamiento de la prueba. (Ie56ea).
Versión 3.2.0-alpha05
3 de mayo de 2023
Lanzamiento de androidx.paging:paging-*:3.2.0-alpha05
. La versión 3.2.0-alpha05 contiene estas confirmaciones.
Cambios en la API
- La API de Paging Testing de
asSnapshot
ahora establece de forma predeterminada su parámetroloadOperations
en una lambda vacía. Esto permite llamar aasSnapshot
sin pasar ninguna operación de carga para recuperar los datos de la carga de actualización inicial. (Ied354, b/277233770).
Mejoras en la documentación
- Se actualizó la documentación sobre
asPagingSourceFactory()
para aclarar que es un método de extensión en unFlow
que muestra una fábrica reutilizable para generar instancias dePagingSource
. (I5ff4f, I705b5). - Se actualizó la documentación del constructor
LoadResult.Page
para aclarar la necesidad de anularitemsBefore
yitemsAfter
para admitir el salto. (Ied354).
Contribuciones externas
- Gracias Veyndan por contribuir a alejar el paginado de las especificaciones 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-testing
ahora contiene un métodoasPagingSourceFactory
para crear unpagingSourceFactory
a 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-testing
con 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
asSnapshot
de Kotlin en el objetoFlow<PagingData<Value>>
, que convierte el elementoFlow<PagingData<Value>>
en un elementoList<Value>
directo. El objetoasSnapshot
lambda te permite imitar la IU de tu app con APIs comoscrollTo
oappendScrollWhile
de una manera repetible y coherente para que puedas verificar que la instantánea de los datos sea correcta en cualquier momento. en tu conjunto de datos paginados.// Create your ViewModel instance val viewModel = … // Get the Flow of PagingData from the ViewModel val data< Flow<PagingData<String>> = viewModel.data val snapshot: List<String> = data.asSnapshot { // Each operation inside the lambda waits for the data to settle before continuing scrollTo(index = 50) // While you can’t view the items within the asSnapshot call, // you can continuously scroll in a direction while some condition is true // i.e., in this case until you hit a placeholder item appendScrollWhile { item: String -> item != “Header 1” } } // With the asSnapshot complete, you can now verify that the snapshot // has the expected values
asSnapshot
es un métodosuspend
que 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
getItem
ypeek
enAsyncPagingDataDiffer
yPagingDataAdapter
ahora están marcadas correctamente como llamadas solo en el subproceso principal (I699b6). - Se quitaron los comodines de los tipos genéricos que usa
TestPager
, lo que facilita el consumo de los resultados de esos métodos en código escrito en el lenguaje de programación Java (I56c42).
Versión 3.2.0-alpha03
24 de octubre de 2022
Lanzamiento de androidx.paging:paging-*:3.2.0-alpha03
. La versión 3.2.0-alpha03 contiene estas confirmaciones.
Pruebas de Paging
Esta actualización incluye un artefacto nuevo: paging-testing
. Este artefacto proporciona APIs diseñadas para realizar pruebas de unidades en cada capa de tu app y su integración con Paging de forma aislada.
Por ejemplo, esta primera versión incluye una clase TestPager
que te permite validar el comportamiento de tu propia implementación de PagingSource
independientemente del elemento Pager
y la IU real que en general necesitarías para simular la integración de Paging extremo a extremo.
TestPager
debe considerarse falsa: un doble de prueba que refleja la implementación real de Pager
y, al mismo tiempo, proporciona una superficie de API simplificada a fin de probar un objeto PagingSource
. Estas son APIs de suspend
y deben ejecutarse dentro de runTest
, como se describe en la guía Cómo probar corrutinas de Kotlin en Android.
Puedes encontrar un ejemplo de estas APIs en uso en las pruebas room-paging
, que se refactorizaron para usar TestPager
.
Cambios en la API
- Habilita una iteración conveniente en
LoadResult.Page.data
hastaLoadResult.Page.iterator()
. De forma indirecta, esto permite el uso del métodoflatten
de la biblioteca estándar de Kotlin cuando se le da unaList<LoadResult.Page>
como el caso de la propiedadpages
dePagingState
que 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
AsyncPagingDataDiffer
oPagingDataAdapter
para exponer la información de depuración recopilada dePagingData
. - Los registros se pueden habilitar mediante el comando
adb shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE].
(b/235527159).
Correcciones de errores
- Se corrigió el error del constructor
PagingDataDiffer
faltante cuando se usabapaging-common:3.2.0-alpha01
con el entorno de ejecuciónpaging-runtime:3.1.1
o versiones anteriores (b/235256201).
Versión 3.2.0-alpha01
1 de junio de 2022
Se lanzó androidx.paging:paging-*:3.2.0-alpha01
. La versión 3.2.0-alpha01 contiene estas confirmaciones.
Cambios en la API
- Se agregaron constructores para
PagingDataAdapter
yAsyncPagingDataDiffer
, que aceptanCoroutineContext
en lugar deCoroutineDispatcher
(Idc878). - De forma predeterminada,
PagingData.from()
yPagingData.empty()
ya no afectarán aCombinedLoadStates
en el lado del presentador. Se agregó una nueva sobrecarga que permite pasarsourceLoadStates
yremoteLoadStates
a estos constructores para mantener el comportamiento existente de configurarLoadStates
como 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 elementoCombinedLoadStates
anterior en el lado del presentador cuando reciba laPagingData
estática (Ic3ce5, b/205344028).
Correcciones de errores
- El resultado de
PagingSource.getRefreshKey()
ahora se prioriza correctamente eninitialKey
en los casos en los que se mostrará un valor nulo, pero se estableció un valorinitialKey
no nulo (Ic9542, b/230391606).
Contribución externa
- Se actualizó la API de :compose:ui:ui-test (updateApi) debido a la migración de test-coroutines-lib (I3366d).
Versión 3.1
Versión 3.1.1
9 de marzo de 2022
Lanzamiento de androidx.paging:paging-*:3.1.1
. La versión 3.1.1 contiene estas confirmaciones.
Correcciones de errores
- Se quitaron los eventos
LoadState.NotLoading
intermedios entre las generaciones que.cachedIn()
insertó incorrectamente. Este cambio facilita la reacción ante cambios deLoadState
, ya que se quitan los eventosLoadState.NotLoading
redundantes que se produjeron entre los reintentos de cargas con errores, durante la actualización o la invalidación.
Versión 3.1.0
17 de noviembre de 2021
Lanzamiento de androidx.paging:paging-*:3.1.0
. La versión 3.1.0 contiene estas confirmaciones.
Cambios importantes desde la versión 3.0.0
- Las API de
Flow<PagingData>.observable
yFlow<PagingData>.flowable
ya no son experimentales. - Cambios de comportamiento en
LoadState
:endOfPaginationReached
ahora es siemprefalse
paraLoadType.REFRESH
enPagingSource
yRemoteMediator
.- Ahora, los
LoadStates
de Paging esperan valores válidos dePagingSource
yRemoteMediator
antes de emitirse de manera descendente. En algunos casos, las nuevas generaciones dePagingData
siempre iniciarán correctamente conLoading
para el estado de actualización, en lugar de restablecerse enNotLoading
de manera incorrecta. .loadStateFlow
y.addLoadStateListener
de las API de presentador ya no envían de forma redundante una inicialCombinedLoadStates
que 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
.collectLatest
enFlow<PagingData>
, aunque se recomienda hacerlo. - Se agregó
PagingSource.LoadResult.Invalid
como un tipo de datos que se muestra nuevo dePagingSource.load
, lo que hace que Paging descarte las solicitudes de carga pendientes o futuras para estePagingSource
y lo invalide. Este tipo de datos que se muestra se diseñó para controlar los datos potencialmente no válidos o inactivos que se pueden mostrar desde la base de datos o la red. - Se agregaron las API de presentador
.onPagesPresented
y.addOnPagesUpdatedListener
, que se activan de forma síncrona a medida que se presentan las páginas en la IU. Las actualizaciones de página pueden ocurrir en las siguientes situaciones:- Se completa la carga inicial de una generación nueva de PagingData, sin importar si esta generación contiene algún cambio en los elementos presentados. Por ejemplo, se seguirá activando esta devolución de llamada cuando una generación nueva complete la carga inicial sin actualizaciones porque la lista es exactamente la misma.
- Se inserta una página, incluso aunque esta no contiene elementos nuevos.
- Se omite una página, incluso si está vacía.
Versión 3.1.0-rc01
3 de noviembre de 2021
Lanzamiento de androidx.paging:paging-*:3.1.0-rc01
. La versión 3.1.0-rc01 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió una condición de carrera + fuga de memoria en .cachedIn() en casos en los que Paging envió varios eventos de carga descendentes cuando no había observadores o mientras un observador cambiaba a un nuevo PagingData. (Ib682e)
Versión 3.1.0-beta01
13 de octubre de 2021
Se lanzó androidx.paging:paging-*:3.1.0-beta01
. La versión 3.1.0-beta01 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un problema en el que se eliminaban muchos accesos rápidos a elementos en prefetchDistance, lo que provocaba que las cargas de página se detuvieran. En particular, es un problema que se genera cuando muchos elementos se presentan al mismo tiempo en un orden que prioriza la carga en función de la dirección del desplazamiento del usuario. Estos accesos a elementos ahora se almacenan en búfer y se priorizan de forma síncrona para evitar que se pierdan. (aosp/1833273)
Versión 3.1.0-alpha04
29 de septiembre de 2021
Lanzamiento de androidx.paging:paging-*:3.1.0-alpha04
. La versión 3.1.0-alpha04 contiene estas confirmaciones.
Cambios en la API
- Las API de
Flow<PagingData>.observable
yFlow<PagingData>.flowable
ya no son experimentales. (Ie0bdd)
Correcciones de errores
- En LoadStates,
endOfPaginationReached
ahora esfalse
siempre paraLoadType.REFRESH
. Anteriormente, era posible que endOfPaginationReached fueratrue
paraREFRESH
de 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).loadStateFlow
y.addLoadStateListener
de las API de presentador ya no envían de forma redundante una inicialCombinedLoadStates
que siempre tiene estados de mediador establecidos ennull
y 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
.loadStateFlow
ya no emitirá de inmediato el valor actual si no recibió unCombinedLoadStates
real 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-rxjava3
se 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. Para ello, crea un
PagingData.from(fakeData)
y une esePagingData
en unMutableStateFlow
(p. ej.,MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Si usas esos datos como entrada en tu@Preview
, las llamadas acollectAsLazyPagingItems()
proporcionaránLazyPagingItems
que se puede obtener una vista previa. (I8a78d, b/194544557)
Correcciones de errores
- Los datos almacenados en caché de
pager.flow.cachedIn
que se recopilaron enLazyPagingItems
ahora estarán disponibles de inmediato después de la restauración del estado sin requerir la recopilación asíncrona. Esto significa que los datos almacenados en la caché estarán listos para la presentación inmediatamente después de la composición inicial después de que se restablezca el estado. (I97a60, b/177245496)
Versión 1.0.0-alpha19
3 de mayo de 2023
Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha19
. La versión 1.0.0-alpha19 contiene estas confirmaciones.
Compatibilidad con todos los diseños diferidos
Anteriormente, Paging Compose proporcionaba extensiones personalizadas de items
y itemsIndexed
en LazyListScope
, lo que significaba que no podías usar Paging Compose con otros diseños diferidos, como LazyVerticalGrid
, HorizontalPager
o cualquier otro componente diferido personalizado que proporcionaban las bibliotecas de Wear y TV. La principal actualización de esta versión es abordar esta falta de flexibilidad.
Para admitir más diseños diferidos, necesitábamos compilar APIs en una capa diferente. En lugar de proporcionar una API de items
personalizada para cada diseño diferido, Paging Compose ahora proporciona métodos de extensión de nivel ligeramente más bajo en LazyPagingItems
en itemKey
y itemContentType
. Estas APIs se enfocan en ayudarte a implementar los parámetros key
y contentType
en las APIs estándar de items
que ya existen para LazyColumn
y LazyVerticalGrid
, así como sus equivalentes en APIs como HorizontalPager
. (Ifa13b, Ib04f0, b/259385813).
Esto significa que la compatibilidad con un LazyVerticalGrid
se vería de la siguiente manera:
// This part is unchanged
val lazyPagingItems = pager.collectAsLazyPagingItems()
LazyVerticalGrid(columns = GridCells.Fixed(2)) {
// Here we use the standard items API
items(
count = lazyPagingItems.itemCount,
// Here we use the new itemKey extension on LazyPagingItems to
// handle placeholders automatically, ensuring you only need to provide
// keys for real items
key = lazyPagingItems.itemKey { it.uniqueId },
// Similarly, itemContentType lets you set a custom content type for each item
contentType = lazyPagingItems.itemContentType { "contentType" }
) { index ->
// As the standard items call provides only the index, we get the item
// directly from our lazyPagingItems
val item = lazyPagingItems[index]
PagingItem(item = item)
}
}
Para ver más ejemplos del uso de estas nuevas APIs, consulta nuestras muestras.
Si bien estos cambios hacen que los ejemplos de LazyColumn
y LazyRow
sean algunas líneas más largos, consideramos que la coherencia en todos los diseños diferidos era un factor importante para quienes usarán Paging Compose en el futuro. Por ese motivo, las extensiones existentes de LazyListScope
ahora dejaron de estar disponibles. (I0c459, I92c8f, b/276989796)
Cambios en la API
- Para facilitar la migración a las nuevas APIs, las funciones de extensión
items
yitemsIndexed
enLazyListScope
ahora admiten un parámetrocontentType
, lo que refleja la compatibilidad con las nuevas APIs. (Ib1918, b/255283378).
Actualizaciones de dependencias
- Paging Compose actualizó su dependencia de Compose 1.0.5 a Compose 1.2.1. (Ib1918, b/255283378).
Versión 1.0.0-alpha18
8 de febrero de 2023
Se lanzó androidx.paging:paging-compose:1.0.0-alpha18
sin cambios. La versión 1.0.0-alpha18 contiene estas confirmaciones.
Versión 1.0.0-alpha17
24 de octubre de 2022
Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha17
. La versión 1.0.0-alpha17 contiene estas confirmaciones.
Nuevas funciones
- Se agregó compatibilidad para un
CoroutineContext
personalizado cuando se llama 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
LazyPagingItems
para exponer la información de depuración recopilada de PagingData. - Los registros se pueden habilitar mediante el comando
adb shell setprop log.tag.Paging [DEBUG|VERBOSE]
deadb shell
. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
Correcciones de errores
- Se corrigió el error del constructor
PagingDataDiffer
faltante cuando se usabapaging-compose:1.0.0-alpha15
conpaging-common:3.1.1
o versiones anteriores (b/235256201, b/239868768).
Versión 1.0.0-alpha15
1 de junio de 2022
Se lanzó androidx.paging:paging-compose:1.0.0-alpha15
. La versión 1.0.0-alpha15 contiene estas confirmaciones.
Cambios en la API
- Se agregaron constructores para
PagingDataAdapter
yAsyncPagingDataDiffer
, que aceptanCoroutineContext
en lugar deCoroutineDispatcher
(Idc878).
Correcciones de errores
LazyPagingItems
ahora establece el elementoloadState
inicial 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/Row
ahora aceptan el parámetro clave de opción que te permite especificar una clave estable que representa el elemento. Puedes obtener aquí más información sobre las claves. (I7986d) - La función
lazyPagingItems.getAsState(index)
dejó de estar disponible. 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-alpha09
solo es compatible con Compose1.0.0-beta07
y versiones posteriores.
Versión 1.0.0-alpha08
24 de febrero de 2021
Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha08
. La versión 1.0.0-alpha08 contiene estas confirmaciones.
Se actualizó para integrarse a Compose 1.0.0-beta01.
Versión 1.0.0-alpha07
10 de febrero de 2021
Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha07
. La versión 1.0.0-alpha07 contiene estas confirmaciones.
Se actualizó para integrarse a Compose alpha12.
Versión 1.0.0-alpha06
28 de enero de 2021
Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha06
. La versión 1.0.0-alpha06 contiene estas confirmaciones.
Correcciones de errores
Se actualizó para depender de Compose 1.0.0-alpha11.
Versión 1.0.0-alpha05
13 de enero de 2021
Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha05
. La versión 1.0.0-alpha05 contiene estas confirmaciones.
Se actualizó para depender de Compose 1.0.0-alpha10.
Versión 1.0.0-alpha04
16 de diciembre de 2020
Lanzamiento de androidx.paging:paging-compose:1.0.0-alpha04
. La versión 1.0.0-alpha04 contiene estas confirmaciones.
Correcciones de errores
- Se actualizaron las propiedades de conveniencia,
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
,CombinedLoadStates.append
, para pasar 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.1
Versión 3.0.1
21 de julio de 2021
Lanzamiento de androidx.paging:paging-*:3.0.1
. La versión 3.0.1 contiene estas confirmaciones.
Correcciones de errores
- Si accedes a
PagedList.dataSource
desde el valor inicial que produceLivePagedList
oRxPagedList
, ya no se arrojará una excepción IllegalStateException de forma incorrecta. (I96707)
Versión 3.0.0
Versión 3.0.0
5 de mayo de 2021
Lanzamiento de androidx.paging:paging-*:3.0.0
. La versión 3.0.0 contiene estas confirmaciones.
Funciones principales de la versión 3.0.0
Se dio de baja gran parte de la API existente de Paging 2.xx y se la reemplazó por las nuevas API de Paging 3 que ofrecen las siguientes mejoras:
- Compatibilidad de primer nivel con las corrutinas y el flujo de Kotlin
- Compatibilidad con la cancelación
- Estado de carga integrado y señales de error integrados
- Funcionalidad reintentar + actualizar
- Se combinaron las tres subclases de DataSource en una clase unificada de PagingSource
- Transformaciones de página personalizadas, como una integrada para agregar separadores
- Carga de pies de página y encabezados de estado
Versión 3.0.0-rc01
21 de abril de 2021
Lanzamiento de androidx.paging:paging-*:3.0.0-rc01
. La versión 3.0.0-rc01 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un error por el que, en ocasiones, Paging enviaba distintos eventos no-op a RecyclerView, por lo que algunos objetos de escucha podían activarse antes. (Ic507f, b/182510751)
Versión 3.0.0-beta03
24 de marzo de 2021
Lanzamiento de androidx.paging:paging-*:3.0.0-beta03
. La versión 3.0.0-beta03 contiene estas confirmaciones.
Correcciones de errores
- Se renovó la manera en que se controlan los marcadores de posición cuando se vuelve a cargar la lista para evitar saltos inesperados en RecyclerView. Para conocer más detalles, consulta NullPaddedDiffer.md. (If1490, b/170027529, b/177338149)
- Los distintos compiladores PagedList (ruta de compatibilidad antigua) ya no llaman de manera incorrecta a
DataSource.Factory.create()
en la conversación principal cuando se llama a.build()
. (b/182798948)
Versión 3.0.0-beta02
10 de marzo de 2021
Lanzamiento de androidx.paging:paging-*:3.0.0-beta02
. La versión 3.0.0-beta02 contiene estas confirmaciones.
Cambios en la API
- Las extensiones Rx3 ahora propagan de forma correcta el requisito de participación
@ExperimentalCoroutinesApi
. Anteriormente, se marcaban en el método@get
, que el compilador de Kotlin ignoraba debido a https://youtrack.jetbrains.com/issue/KT-45227. (I5733c)
Correcciones de errores
- Se aplicaron restricciones sobre el uso público de las API experimentales. (I6aa29, b/174531520)
- Se corrigió un error que provocaba que
PagingState
siempre 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