Paging
Ce tableau répertorie tous les artefacts du groupe androidx.paging
.
Artefact | Version stable | Version finale | Version bêta | Version alpha |
---|---|---|---|---|
paging-* | 3.3.4 | - | - | - |
paging-compose | 3.3.4 | - | - | - |
Déclarer des dépendances
Pour ajouter une dépendance sur Paging, vous devez ajouter le dépôt Maven de Google à votre projet. Consultez la section Dépôt Maven de Google pour en savoir plus.
Ajoutez les dépendances des artefacts dont vous avez besoin dans le fichier build.gradle
de votre application ou module :
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") }
Pour en savoir plus sur l'utilisation des extensions Kotlin, consultez la documentation sur les extensions KTX.
Pour en savoir plus sur les dépendances, consultez Ajouter des dépendances de compilation.
Commentaires
Vos commentaires nous aident à améliorer Jetpack. N'hésitez pas à nous contacter si vous découvrez de nouveaux problèmes ou si vous avez des idées pour améliorer cette bibliothèque. Veuillez consulter les problèmes existants de cette bibliothèque avant d'en signaler un nouveau. Vous pouvez ajouter votre vote à un problème existant en cliquant sur le bouton en forme d'étoile.
Pour en savoir plus, consultez la documentation sur l'outil Issue Tracker.
Version 3.3
Version 3.3.4
13 novembre 2024
Publication d'androidx.paging:paging-*:3.3.4
. La version 3.3.4 contient ces commits.
Correction de bugs
- Les tests unitaires Android qui extraient Paging 3.3 ou version ultérieure ne génèrent plus d'erreur telle que
Method isLoggable in android.util.Log not mocked
. (Ia9400, b/331684448)
Version 3.3.2
7 août 2024
Publication d'androidx.paging:paging-*:3.3.2
. La version 3.3.2 contient ces commits.
Nouvelles fonctionnalités
paging-common
etpaging-testing
ont ajouté de nouvelles cibles Kotlin-Multiplatform:watchos
,tvos
etlinuxArm64
(90c9768), (53e0eca)
Version 3.3.1
24 juillet 2024
Publication d'androidx.paging:paging-*:3.3.1
. La version 3.3.1 contient ces commits.
Correction de bugs
- Correction d'un problème qui empêchait
AsyncPagingDataDiffer
ou les API basées dessus, commePagingDataAdapter
utilisé avecRecyclerView
, de déclencher d'autres chargements lorsque la source de données de base était actualisée lors du défilement. (I60ca5, b/352586078) - Correction d'un plantage qui se produit lorsque des éléments sont supprimés de la source de données de secours lors du défilement d'un
RecyclerView
à l'aide d'unPagingDataAdapter
ou d'unAsyncPagingDataDiffer
. (I8c65a, b/347649763)
Version 3.3.0
14 mai 2024
Publication d'androidx.paging:paging-*:3.3.0
. La version 3.3.0 contient ces commits.
Modifications importantes depuis la version 3.2.0
PagingDataPresenter
est désormais une classe publique. Les présentateurs multiplates-formes peuvent désormais être créés sur la base dePagingDataPresenter
au lieu de nécessiter des API de pagination internes ouAsyncPagingDataDiffer
depaging-runtime
.- Ajout de nouvelles méthodes d'assistance
LoadStates
etCombinedLoadStates
danshasError
etisIdle
pour vérifier siLoadStates
est dans l'état "Error" (Erreur) ouNotLoading
, respectivement. Ajout également d'une nouvelle méthode d'extension KotlinawaitNotLoading()
surFlow<CombinedLoadStates>
qui attend qu'un chargement soit dans l'étatNotLoading
ou Error. PagingData.empty()
distribue désormais les étatsNotLoading
par défaut, sauf si desLoadStates
personnalisés sont transmis à son constructeur. Cela s'écarte du comportement existant, qui n'envoie pas deLoadStates
lorsqu'il est envoyé à unPagingDataAdapter
ou qui envoie des états de chargement lorsqu'il est collecté en tant queLazyPagingItems
. Lorsqu'il est collecté en tant queLazyPagingItems
, il affiche désormais également une liste vide immédiatement après la composition initiale.
Compatibilité avec la multiplateforme Kotlin
La pagination fournit désormais des artefacts compatibles avec la multiplateforme Kotlin, en grande partie grâce au travail en amont du projet multiplate-paging de CashApp.
paging-common
a déplacé toutes les API Paging 3 verscommon
et est désormais compatible avec jvm et iOS en plus d'Android.paging-testing
a déplacé son code verscommon
et est désormais compatible avec jvm et iOS en plus d'Android.paging-compose
a déplacé son code verscommon
et fournit un artefact Android, ce qui correspond à la compatibilité multiplate-forme deandroidx.compose
.paging-runtime
,paging-guava
,paging-rxjava2
etpaging-rxjava3
resteront réservés à Android.
Version 3.3.0-rc01
1er mai 2024
androidx.paging:paging-*:3.3.0-rc01
est publié sans aucune modification dans Paging 3.3.0-beta01. La version 3.3.0-rc01 contient ces commits.
Version 3.3.0-beta01
3 avril 2024
Publication d'androidx.paging:paging-*:3.3.0-beta01
sans modification notable. La version 3.3.0-beta01 contient ces commits.
Version 3.3.0-alpha05
20 mars 2024
Publication d'androidx.paging:paging-*:3.3.0-alpha05
. La version 3.3.0-alpha05 contient ces commits.
Modifications apportées à l'API
- La pagination utilise désormais l'annotation AndroidX
@MainThread
pour le code commun. (I78f0d, b/327682438)
Version 3.3.0-alpha04
6 mars 2024
Publication d'androidx.paging:paging-*:3.3.0-alpha04
. La version 3.3.0-alpha04 contient ces commits.
Correction de bugs
- Correction de petites erreurs de documentation liées à l'ajout de la compatibilité multiplateforme de Kotlin. (aosp/2950785)
Version 3.3.0-alpha03
7 février 2024
Publication d'androidx.paging:paging-*:3.3.0-alpha03
. Liste des commits de la version 3.3.0-alpha03
Nouvelles fonctionnalités
PagingDataPresenter
est désormais une classe publique. Les présentateurs multiplates-formes peuvent désormais être créés sur la base dePagingDataPresenter
au lieu de nécessiter des API de pagination internes ouAsyncPagingDataDiffer
depaging-runtime
. (Id1f74, b/315214786)- Ajout de nouvelles méthodes d'assistance
LoadStates
etCombinedLoadStates
pour vérifier siLoadStates
est dans l'état "Error" (Erreur) ouNotLoading
. Ajout également d'une nouvelle API qui attend sur unLoadStateFlow
jusqu'à ce qu'une charge soit passée à l'étatNotLoading
ou d'erreur. (Id6c67)
Nouveau comportement
PagingData.empty()
distribue désormais les étatsNotLoading
par défaut, sauf si desLoadStates
personnalisés sont transmis à son constructeur. Cela s'écarte du comportement existant, qui n'envoie pas deLoadStates
lorsqu'il est envoyé à unPagingDataAdapter
ou qui envoie des états de chargement lorsqu'il est collecté en tant queLazyPagingItems
. Lorsqu'il est collecté en tant queLazyPagingItems
, il affiche désormais également une liste vide immédiatement après la composition initiale. (I4d11d, b/301833847)
Version 3.3.0-alpha02
20 septembre 2023
Publication d'androidx.paging:paging-*:3.3.0-alpha02
. Liste des commits de la version 3.3.0-alpha02
Compatibilité avec la multiplateforme Kotlin
La pagination fournit désormais des artefacts compatibles avec la multiplateforme Kotlin, en grande partie grâce au travail en amont du projet multiplate-paging de CashApp. Cela nous permettra d'éviter les divergences entre les deux dépôts et de les maintenir compatibles.
paging-common
a déplacé toutes les API Paging 3 verscommon
et est désormais compatible avec jvm et iOS en plus d'Android.paging-testing
a déplacé son code verscommon
et est désormais compatible avec jvm et iOS en plus d'Android.paging-compose
a déplacé son code verscommon
et fournit un artefact Android, ce qui correspond à la compatibilité multiplate-forme deandroidx.compose
.paging-runtime
,paging-guava
,paging-rxjava2
etpaging-rxjava3
resteront réservés à Android.
Modifications apportées à l'API
- L'interface Logger publique, qui était destinée uniquement à un usage interne, a été abandonnée. (I16e95, b/288623117)
Contribution externe
- Merci à veyndan de Cash App d'avoir contribué à la migration de Paging vers Kotlin Multiplatform (#560, #561, #562, #573, #576, #577, #578, #579, #580, #581, #583, #584, #586, #609)
Version 3.3.0-alpha01
20 septembre 2023
- Il s'agit de la première version multiplate-forme des bibliothèques androidx.paging. Cette version ne contient que des artefacts
*-jvm
et*-android
. Pour les variantes macOS, iOS et Linux, utilisez3.3.0-alpha02
.
Version 3.2
Version 3.2.1
6 septembre 2023
Publication d'androidx.paging:paging-*:3.2.1
. Liste des commits de la version 3.2.1
Correction de bugs
- Correction d'un problème qui entraînait le blocage de l'API
asSnapshot()
de l'artefact de test de pagination lorsqu'un flux créé à l'aide dePagingData.from(List)
lui était transmis, carasSnapshot()
ne disposait d'aucune information sur la fin du chargement (contrairement à la surchargePagingData.from(List, LoadStates)
). Cette solution de contournement ne fonctionne que pour les flux completables (par exemple, unflowOf(PagingData.from(...))
). Pour les flux non completables (par exemple,MutableStateFlow
, utilisez la surchargePagingData.from
qui fournitLoadStates
). (I502c3) - La pagination Compose utilise désormais
AndroidUiDispatcher.Main
en interne pour s'assurer que les nouvelles données sont disponibles dans le même frame une fois le chargement terminé. (Ia55af)
Version 3.2.0
26 juillet 2023
Publication d'androidx.paging:paging-*:3.2.0
. Liste des commits de la version 3.2.0
Changements importants depuis la version 3.1.0
- Paging Compose a atteint la stabilité de l'API et a été fusionné avec le reste de Paging, où sa version correspond désormais à tous les autres artefacts Paging. Modifications depuis la version 3.1.0 :
- Possibilité de prévisualiser une liste de données factices en créant un
PagingData.from(fakeData)
et en encapsulant cetPagingData
dans unMutableStateFlow
(par exemple,MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Transmettez ce flux dans les composables@Preview
en tant que récepteur pour quecollectAsLazyPagingItems()
puisse le prévisualiser. - Prise en charge de toutes les mises en page lazy telles que
LazyVerticalGrid
etHorizontalPager
, ainsi que des composants lazy personnalisés des bibliothèques Wear et TV. Pour ce faire, de nouvelles méthodes d'extensionLazyPagingItems
de niveau inférieur,itemKey
etitemContentType
, ont été ajoutées. Elles vous aident à implémenter les paramètreskey
etcontentType
aux APIitems
standards qui existent déjà pourLazyColumn
etLazyVerticalGrid
, ainsi qu'à leurs équivalents dans des API telles queHorizontalPager
. items(lazyPagingItems)
etitemsIndexed(lazyPagingItems)
, qui ne sont compatibles qu'avecLazyListScope
, ont été abandonnés.
- Possibilité de prévisualiser une liste de données factices en créant un
- Nouvel artefact
paging-testing
qui fournit des API conçues pour réaliser des tests unitaires sur chaque couche de votre application et son intégration à Paging de manière isolée. Par exemple, il inclut les éléments suivants :- Classe
TestPager
qui vous permet de valider le comportement de votre implémentationPagingSource
personnalisée indépendamment du pager et de l'UI réelle. - API
asPagingSourceFactory
pour transformer unFlow<List<Value>>
ou unList<Value>
statique enPagingSourceFactory
pouvant être transmis à un Pager lors de tests - Extension Kotlin
asSnapshot
surFlow<PagingData<Value>>
, qui convertitFlow<PagingData<Value>>
enList<Value>
directe.asSnapshot lambda
vous permet d'imiter l'interface utilisateur de votre application via des API telles quescrollTo
ouappendScrollWhile
, afin de vérifier que l'instantané des données est correct en tout point de l'ensemble de données paginées.
- Classe
- Ajout de journaux par défaut pour exposer les informations de débogage de la pagination sur deux niveaux:
VERBOSE
etDEBUG
. Vous pouvez activer les journaux à l'aide de la commandeadb shell setprop log.tag.Paging [DEBUG|VERBOSE]
. Cela s'applique à la pagination avec des vues ou avec Compose. - Ajout de constructeurs pour
PagingDataAdapter
etAsyncPagingDataDiffer
, qui acceptentCoroutineContext
au lieu deCoroutineDispatcher
. - Ajout d'une nouvelle interface fonctionnelle
PagingSourceFactory
qui fournit une surface d'API plus explicite que les lambdas () ->PagingSource
précédents. Cette fabrique peut être utilisée pour instancier un Pager.
Version 3.2.0-rc01
21 juin 2023
Publication d'androidx.paging:paging-*:3.2.0-rc01
. Liste des commits de la version 3.2.0-rc01
Contribution externe
- Merci à Veyndan d'avoir contribué à éloigner la pagination des spécificités Android/JVM. (#553, #554, #555, #559)
Version 3.2.0-beta01
7 juin 2023
Publication d'androidx.paging:paging-*:3.2.0-beta01
. Liste des commits de la version 3.2.0-beta01
Paging Compose
- Paging Compose a officiellement atteint la stabilité de l'API. Par conséquent, la version a été mise à jour de
1.0.0-alpha20
pour correspondre à celle de tous les autres artefacts de pagination.
Modifications apportées à l'API
- Suppression des API
items(LazyPagingItems)
etitemsIndexed(LazyPagingItems)
obsolètes de Paging Compose. Pour obtenir un exemple des API de remplacement, consultez les notes de version de1.0.0-alpha20
Paging Compose. (I9626e)
Version 3.2.0-alpha06
24 mai 2023
Publication d'androidx.paging:paging-*:3.2.0-alpha06
. Liste des commits de la version 3.2.0-alpha06
Nouvelles fonctionnalités
- Ajout d'une nouvelle interface fonctionnelle
PagingSourceFactory
qui fournit une surface d'API plus explicite que les lambdas() -> PagingSource
existants. Cette fabrique peut être utilisée pour instancier unPager
. (I33165, b/280655188) - Ajout d'une nouvelle API
paging-testing
deList<Value>.asPagingSourceFactory()
pour obtenir unPagingSourceFactory
qui ne se charge qu'à partir d'une liste immuable de données. L'extension existante surFlow<List<Value>>
doit toujours être utilisée pour les tests avec plusieurs générations de données statiques. (Id34d1, b/280655188)
Modifications apportées à l'API
- Toutes les API publiques des tests de pagination sont désormais annotées avec
@VisibleForTesting
pour s'assurer qu'elles ne sont utilisées que pour les tests. (I7db6e) - L'API
asSnapshot
ne nécessite plus de transmettre unCoroutineScope
. Il utilise désormais par défaut le contexte hérité de son champ d'application parent. (Id0a78, b/282240990) - Réorganisation des paramètres du constructeur
TestPager
pour qu'ils correspondent intuitivement à l'ordre des paramètres réels du constructeurPager
(I6185a) - Migration de l'utilisation du type de lambda
() -> PagingSource<Key, Value>
pour les tests de pagination vers le typePagingSourceFactory<Key, Value>
. (I4a950, b/280655188)
Nouveaux comportements
- Le coordinateur principal n'est plus nécessaire pour exécuter les tests de pagination
asSnapshot
. Le comportement du test ne change plus. (Ie56ea)
Version 3.2.0-alpha05
3 mai 2023
Publication d'androidx.paging:paging-*:3.2.0-alpha05
. Liste des commits de la version 3.2.0-alpha05
Modifications apportées à l'API
- L'API de test de pagination de
asSnapshot
définit désormais par défaut son paramètreloadOperations
sur un lambda vide. Cela permet d'appelerasSnapshot
sans transmettre d'opérations de chargement pour récupérer les données de la charge d'actualisation initiale. (Ied354, b/277233770)
Améliorations de la documentation
- Mise à jour de la documentation sur
asPagingSourceFactory()
pour indiquer qu'il s'agit d'une méthode d'extension sur unFlow
qui renvoie une fabrique réutilisable pour générer des instancesPagingSource
. (I5ff4f, I705b5) - Mise à jour de la documentation sur le constructeur
LoadResult.Page
pour clarifier la nécessité de remplaceritemsBefore
etitemsAfter
pour prendre en charge le saut. (Ied354)
Contributions externes
- Merci à Veyndan d'avoir contribué à éloigner la pagination des spécificités Android/JVM. (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, #493)
Version 3.2.0-alpha04
8 février 2023
Publication d'androidx.paging:paging-*:3.2.0-alpha04
. Liste des commits de la version 3.2.0-alpha04
Tests de Paging
- Ajout dans l'artefact
paging-testing
d'une méthodeasPagingSourceFactory
permettant de créer unepagingSourceFactory
à partir d'unFlow<List<Value>>
à transmettre à un pager. ChaqueList<Value>>
émise à partir du flux représente une génération de données paginées. Cela facilite les tests de pagination (par exemple, sur les transformationsPagingData
, en simulant une source de données que viendra collecter le pager). (I6f230, b/235528239) Extension de l'artefact
paging-testing
à de nouvelles API permettant de vérifier que les données contenues dans unFlow<PagingData<T>>
sont correctes. Cela permet, par exemple, d'affirmer la sortie d'unFlow<PagingData<T>>
à partir de votre couche ViewModel.Pour ce faire, utilisez l'extension Kotlin
asSnapshot
surFlow<PagingData<Value>>
, qui convertitFlow<PagingData<Value>>
enList<Value>
directe. Le lambdaasSnapshot
permet d'imiter l'interface utilisateur de votre application via des API telles quescrollTo
ouappendScrollWhile
, de manière reproductible et cohérente, afin de vérifier que l'instantané des données est correct en tout point de l'ensemble de données paginées.// 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
est une méthodesuspend
prévue pour être exécutée dansrunTest
. Pour en savoir plus, consultez Tester des coroutines Kotlin sur Android. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)
Modifications apportées à l'API
- Les appels d'interface utilisateur
getItem
etpeek
dansAsyncPagingDataDiffer
etPagingDataAdapter
sont désormais correctement marqués comme pouvant être appelés uniquement dans le thread principal. (I699b6) - Suppression des caractères génériques dans les types génériques utilisés par
TestPager
, afin de faciliter la consommation des résultats de ces méthodes dans le code écrit en langage de programmation Java. (I56c42)
Version 3.2.0-alpha03
24 octobre 2022
Publication d'androidx.paging:paging-*:3.2.0-alpha03
. Liste des commits de la version 3.2.0-alpha03
Tests de Paging
Cette version contient un nouvel artefact : paging-testing
. Cet artefact fournit des API conçues pour réaliser des tests unitaires sur chaque couche de votre application et son intégration à Paging de manière isolée.
Par exemple, cette première version comprend une classe TestPager
qui vous permet de valider le comportement de votre implémentation PagingSource
personnalisée indépendamment de Pager
et de l'UI réelle dont vous auriez normalement besoin pour simuler l'intégration Paging de bout en bout.
TestPager
doit être considéré comme un faux, c'est-à-dire un double de test qui simule l'implémentation réelle de Pager
, tout en offrant une surface d'API simplifiée pour tester une PagingSource
. Ces API sont des API suspend
et doivent être exécutées dans runTest
, comme indiqué dans le guide Tester des coroutines Kotlin sur Android.
Vous trouverez un exemple de ces API en cours d'utilisation dans les tests room-paging
, qui ont été refactorisés pour utiliser TestPager
.
Modifications apportées à l'API
- Permet une itération pratique sur
LoadResult.Page.data
viaLoadResult.Page.iterator()
. Cela permet indirectement l'utilisation de la méthodeflatten
de la bibliothèque standard Kotlin avec unList<LoadResult.Page>
, par exemple avec la propriétépages
dePagingState
qui est transmise à la méthodePagingSource.getRefreshKey
. (Ie0718)
Version 3.2.0-alpha02
10 août 2022
Publication d'androidx.paging:paging-*:3.2.0-alpha02
. Liste des commits de la version 3.2.0-alpha02
Nouvelles fonctionnalités
- Paging fournit désormais des journaux via les classes
AsyncPagingDataDiffer
ouPagingDataAdapter
pour exposer les informations de débogage collectées à partir dePagingData
. - Ces journaux peuvent être activés via la commande
adb shell
:adb shell setprop log.tag.Paging [DEBUG|VERBOSE].
. (b/235527159)
Correction de bugs
- Correction de l'erreur "missing
PagingDataDiffer
constructor" (constructeur manquant) lors de l'utilisation depaging-common:3.2.0-alpha01
avec l'environnement d'exécutionpaging-runtime:3.1.1
ou ses versions antérieures. (b/235256201)
Version 3.2.0-alpha01
1er juin 2022
Publication d'androidx.paging:paging-*:3.2.0-alpha01
. Liste des commits de la version 3.2.0-alpha01
Modifications apportées à l'API
- Ajout de constructeurs pour
PagingDataAdapter
etAsyncPagingDataDiffer
, qui acceptentCoroutineContext
au lieu deCoroutineDispatcher
. (Idc878) - Par défaut,
PagingData.from()
etPagingData.empty()
n'affecteront plusCombinedLoadStates
du côté du présentateur. Une nouvelle surcharge qui permet de transmettresourceLoadStates
etremoteLoadStates
à ces constructeurs a été ajoutée pour maintenir le comportement existant consistant à définirLoadStates
comme pleinement terminal (autrement dit,NotLoading(endOfPaginationReached = false)
), avec la possibilité d'inclure des états distants si nécessaire. Si lesLoadStates
ne sont pas transmis, lesCombinedLoadStates
précédents seront conservés côté présentateur lors de la réception desPagingData
statiques. (Ic3ce5, b/205344028)
Correction de bugs
- Correction de la hiérarchisation de
PagingSource.getRefreshKey()
, prioritaire surinitialKey
dans les cas où il renvoyait une valeur nulle, mais qu'une valeurinitialKey
non nulle était définie. (Ic9542, b/230391606)
Contribution externe
- Mise à jour de l'API :compose:ui:ui-test (updateApi) suite à la migration de test-coroutines-lib. (I3366d)
Version 3.1
Version 3.1.1
9 mars 2022
Publication d'androidx.paging:paging-*:3.1.1
. Liste des commits de la version 3.1.1
Correction de bugs
- Suppression des événements
LoadState.NotLoading
intermédiaires entre les générations qui n'ont pas été insérés correctement par.cachedIn()
. Ce changement permet de réagir beaucoup plus facilement aux modifications deLoadState
en supprimant les événementsLoadState.NotLoading
redondants produits entre les tentatives de chargement ayant échoué, lors de l'actualisation ou lors de l'invalidation.
Version 3.1.0
17 novembre 2021
Publication d'androidx.paging:paging-*:3.1.0
. Liste des commits de la version 3.1.0
Modifications importantes depuis la version 3.0.0
- Les API
Flow<PagingData>.observable
etFlow<PagingData>.flowable
ne sont plus en phase expérimentale. - Modifications du comportement de
LoadState
:endOfPaginationReached
est désormais toujoursfalse
pourLoadType.REFRESH
, pourPagingSource
etRemoteMediator
.LoadStates
dans Paging attend désormais des valeurs valides dePagingSource
et deRemoteMediator
avant d'émettre en aval. Les nouvelles générations dePagingData
commencent désormais correctement parLoading
pour actualiser l'état au lieu de le réinitialiser de manière erronée enNotLoading
dans certains cas..loadStateFlow
et.addLoadStateListener
sur les API du présentateur n'envoient plus unCombinedLoadStates
initial redondant dont les états de médiateur sont toujours définis surnull
.
- L'annulation des générations précédentes est désormais immédiate après une invalidation ou une nouvelle génération. Il ne devrait plus être nécessaire d'utiliser
.collectLatest
surFlow<PagingData>
, bien que cela soit toujours recommandé. - Ajout de
PagingSource.LoadResult.Invalid
en tant que nouveau type renvoyé dePagingSource.load
, ce qui entraîne le rejet par Paging de toutes les requêtes de chargement en attente ou futures vers cettePagingSource
, et l'invalide. Ce type renvoyé est conçu pour gérer les données d'état potentiellement non valides ou obsolètes susceptibles d'être renvoyées à partir de la base de données ou du réseau. - Ajout des API de présentateur
.onPagesPresented
et.addOnPagesUpdatedListener
, qui se déclenchaient de manière synchrone lorsque les pages étaient présentées dans l'UI. Les mises à jour de pages peuvent se produire dans les cas suivants :- Le chargement initial d'une nouvelle génération de PagingData est terminé, que la nouvelle génération contienne ou non des modifications aux éléments présentés. (Par exemple, une nouvelle génération qui termine le chargement initial sans être mise à jour, car la liste reste exactement la même, déclenchera tout de même ce rappel.)
- Une page est insérée (même si elle ne contient aucun nouvel élément).
- Une page est supprimée (même si elle est vide).
Version 3.1.0-rc01
3 novembre 2021
Publication d'androidx.paging:paging-*:3.1.0-rc01
. Liste des commits de la version 3.1.0-rc01
Correction de bugs
- Correction d'une condition de concurrence avec fuite de mémoire dans .cachedIn(), qui survenait lorsque plusieurs événements de chargement étaient envoyés par Paging en aval en l'absence d'observateur, ou lorsqu'un observateur bascule vers de nouvelles PagingData. (Ib682e)
Version 3.1.0-beta01
13 octobre 2021
Publication d'androidx.paging:paging-*:3.1.0-beta01
. Liste des commits de la version 3.1.0-beta01
Correction de bugs
- Correction d'un problème survenant lorsque de nombreux accès rapides aux éléments empêchaient leur considération dans prefetchDistance, provoquant une interruption du chargement des pages. Cette situation est particulièrement problématique lorsque de nombreux éléments sont présentés simultanément dans un ordre qui donne la priorité au chargement en opposition à la direction de défilement de l'utilisateur. Ces accès aux éléments sont désormais mis en mémoire tampon et hiérarchisés de manière synchrone pour éviter leur abandon. (aosp/1833273)
Version 3.1.0-alpha04
29 septembre 2021
Publication d'androidx.paging:paging-*:3.1.0-alpha04
. Liste des commits de la version 3.1.0-alpha04
Modifications apportées à l'API
- Les API
Flow<PagingData>.observable
etFlow<PagingData>.flowable
ne sont plus en phase expérimentale. (Ie0bdd)
Correction de bugs
- Pour LoadStates,
endOfPaginationReached
est désormais toujoursfalse
pourLoadType.REFRESH
. Auparavant, il était possible que endOfPaginationReached soit défini surtrue
pour RemoteMediatorREFRESH
, mais pas pour PagingSource. Ces comportements sont désormais consolidés pour toujours renvoyerfalse
, le statut terminal n'ayant pas sens pour REFRESH. Cet aspect est désormais documenté dans le contrat d'API dans LoadStates. Lorsque vous l'envisagez, vous devez toujours considérer l'interruption de la pagination en fonction de sa direction APPEND ou PREPEND. (I047b6) Les LoadStates de Paging attendent désormais des valeurs valides de PagingSource et RemoteMediator avant d'émettre en aval entre les générations. Cela empêche les nouvelles générations de PagingData d'envoyer des valeurs NotLoading dans CombinedLoadStates.source.refresh si l'élément est déjà en cours de chargement. Les nouvelles générations de PagingData commencent désormais correctement par Loading pour actualiser l'état au lieu de le réinitialiser de manière erronée en NotLoading dans certains cas.
L'annulation des générations précédentes est désormais immédiate suite à une invalidation ou une nouvelle génération. Il ne devrait plus être nécessaire d'utiliser .collectLatest sur
Flow<PagingData>
, bien que cela soit toujours vivement recommandé. (I0b2b5, b/177351336, b/195028524).loadStateFlow
et.addLoadStateListener
sur les API du présentateur n'envoient plus unCombinedLoadStates
initial redondant dont les états de médiateur sont toujours définis surnull
et les états de source, surNotLoading(endOfPaginationReached = false)
. Par conséquent :- Les états de médiateur sont toujours renseignés si vous utilisez RemoteMediator.
- L'enregistrement d'un nouvel écouteur loadState ou d'un nouveau collecteur sur
.loadStateFlow
n'émet plus immédiatement la valeur actuelle s'il n'a pas reçu un véritableCombinedLoadStates
desPagingData
. Cela peut se produire si un collecteur ou un écouteur démarre avant l'envoi desPagingData
. (I1a748)
Version 3.1.0-alpha03
21 juillet 2021
Publication d'androidx.paging:paging-*:3.1.0-alpha03
. Liste des commits de la version 3.1.0-alpha03
Modifications apportées à l'API
Ajout d'un troisième type renvoyé LoadResult à PagingSource : LoadResult.Invalid. Lorsqu'un objet PagingSource.load renvoie LoadResult.Invalid, la pagination supprime les données chargées et invalide la PagingSource. Ce type renvoyé est conçu pour gérer les données d'état potentiellement non valides ou obsolètes susceptibles d'être renvoyées à partir de la base de données ou du réseau.
Par exemple, si la base de données sous-jacente reçoit une écriture, mais que PagingSource n'est pas invalidé à temps, les résultats renvoyés peuvent devenir incohérents lorsque l'implémentation dépend de l'immuabilité de l'ensemble de données de sauvegarde chargé (par exemple, les implémentations de base de données de style LIMIT OFFSET). Dans ce scénario, nous vous recommandons de vérifier l'invalidation après le chargement et de renvoyer LoadResult.Invalid. Le cas échéant, Paging supprime toute requête de chargement en attente ou future envoyée à cette PagingSource et l'invalide.
Ce type renvoyé est également compatible avec une API Paging2 qui exploite LivePagedList ou RxPagedList. Lorsque vous utilisez une PagingSource avec les API PagedList de Paging2, la PagedList est immédiatement dissociée, ce qui bloque les nouvelles tentatives de chargement de données sur cette PagedList et déclenche l'invalidation de la PagingSource.
LoadResult est une classe scellée, ce qui signifie qu'il s'agit d'une modification incompatible avec la source obligeant les cas d'utilisation qui ont directement recours aux résultats PagingSource.load à traiter LoadResult.Invalid lors de la compilation. Par exemple, les utilisateurs de Kotlin qui exploitent "exhaustive-when" pour vérifier le type renvoyé doivent ajouter une vérification de type non valide. (Id6bd3, b/191806126, b/192013267)
Correction de bugs
- Les rappels d'invalidation ajoutés via PagingSource.registerInvalidatedCallback ou DataSource.addInvalidatedCallback se déclenchent désormais automatiquement s'ils ont été enregistrés sur une PagingSource ou DataSource précédemment invalidée. Cela résout une condition de concurrence qui entraînait l'abandon des signaux d'invalidation et le blocage de Paging lorsque la source fournie avait été invalidée lors du chargement initial. En outre, les rappels d'invalidation sont désormais correctement supprimés après avoir été déclenchés, car ils ne peuvent être appelés qu'une seule fois. (I27e69)
- Envoyer la valeur initiale de l'espace réservé (InitialPagedList) à partir d'un flux PagedList nouvellement instancié, comme LivePagedListBuilder ou RxPagedListBuilder, n'effacera plus les données chargées précédemment.
Version 3.1.0-alpha02
1er juillet 2021
Publication d'androidx.paging:paging-*:3.1.0-alpha02
. Liste des commits de la version 3.1.0-alpha02
Nouvelles fonctionnalités
Ajout d'un écouteur onPagesPresented et d'API de présentation de flux, qui se déclenchent immédiatement après la mise à jour des pages présentées dans l'interface utilisateur.
Ces mises à jour étant synchrones avec l'interface utilisateur, vous pouvez appeler des méthodes d'adaptateur telles que .snapshot ou .getItemCount pour inspecter l'état une fois la mise à jour appliquée. Notez que la méthode .snapshot() doit être explicitement appelée, car une exécution à chaque mise à jour peut s'avérer coûteuse.
Les mises à jour de pages peuvent se produire dans les cas suivants :
- Le chargement initial d'une nouvelle génération de PagingData est terminé, que la nouvelle génération contienne ou non des modifications aux éléments présentés (par exemple, une nouvelle génération qui termine le chargement initial sans être mise à jour, car la liste reste exactement la même, déclenchera tout de même ce rappel.)
- Une page est insérée (même si elle ne contient aucun nouvel élément).
- Une page est supprimée (même si elle est vide). (I272c9, b/189999634)
Correction de bugs
- Correction d'une exception IllegalStateException qui survenait en cas d'accès à PagedList.dataSource à partir de la valeur initiale produite par LivePagedList ou RxPagedList. (I96707)
Version 3.1.0-alpha01
2 juin 2021
Publication d'androidx.paging:paging-*:3.1.0-alpha01
. Liste des commits de la version 3.1.0-alpha01
Modifications apportées à l'API
- Les classes fournies par
paging-rxjava3
sont désormais incluses dans le packageandroidx.paging.rxjava3
afin d'éviter tout conflit avecpaging-rxjava2
. (Ifa7f6)
Correction de bugs
- Correction d'un problème provoqué par Paging, qui envoyait parfois des événements différentiels "no-op" à RecyclerView, ce qui pouvait entraîner le déclenchement précoce de certains écouteurs. (Ic507f, b/182510751)
Contribution externe
- Ajout des API de compatibilité PagedList obsolètes à l'artefact rxjava3. (Id1ce2, b/182497591)
Paging Compose version 1.0.0
Version 1.0.0-alpha20
24 mai 2023
Publication d'androidx.paging:paging-compose:1.0.0-alpha20
. Liste des commits de la version 1.0.0-alpha20
Nouvelles fonctionnalités
- Paging Compose permet désormais d'afficher un aperçu d'une liste de données factices en créant un
PagingData.from(fakeData)
et en encapsulant cetPagingData
dans unMutableStateFlow
(par exemple,MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). En utilisant ces données comme entrée dans votre@Preview
, les appels àcollectAsLazyPagingItems()
fourniront desLazyPagingItems
pouvant être prévisualisés. (I8a78d, b/194544557)
Correction de bugs
- Les données mises en cache de
pager.flow.cachedIn
collectées dansLazyPagingItems
sont désormais disponibles immédiatement après la restauration de l'état, sans nécessiter de collecte asynchrone. Cela signifie que les données mises en cache seront prêtes à être présentées immédiatement après la composition initiale une fois l'état restauré. (I97a60, b/177245496)
Version 1.0.0-alpha19
3 mai 2023
Publication d'androidx.paging:paging-compose:1.0.0-alpha19
. Liste des commits de la version 1.0.0-alpha19
Compatibilité avec toutes les mises en page paresseuses
Auparavant, Paging Compose fournissait des extensions items
et itemsIndexed
personnalisées sur LazyListScope
, ce qui signifiait que vous ne pouviez pas utiliser Paging Compose avec d'autres mises en page lazy telles que LazyVerticalGrid
, HorizontalPager
ou d'autres composants lazy personnalisés fournis par les bibliothèques Wear et TV. La principale nouveauté de cette version vise à remédier à cette inflexibilité.
Pour prendre en charge davantage de mises en page paresseuses, nous avons dû créer des API à un niveau différent. Au lieu de fournir une API items
personnalisée pour chaque mise en page paresseuse, Paging Compose fournit désormais des méthodes d'extension légèrement inférieures sur LazyPagingItems
dans itemKey
et itemContentType
. Ces API visent à vous aider à implémenter les paramètres key
et contentType
dans les API items
standards qui existent déjà pour LazyColumn
et LazyVerticalGrid
, ainsi que leurs équivalents dans des API telles que HorizontalPager
. (Ifa13b, Ib04f0, b/259385813)
Pour prendre en charge un LazyVerticalGrid
, procédez comme suit:
// 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)
}
}
Pour obtenir d'autres exemples d'utilisation de ces nouvelles API, consultez nos exemples.
Bien que ces modifications rendent les exemples LazyColumn
et LazyRow
quelques lignes plus longs, nous avons estimé que la cohérence entre toutes les mises en page paresseuses était un facteur important pour les utilisateurs de Paging Compose à l'avenir. C'est pourquoi les extensions existantes de LazyListScope
sont désormais obsolètes. (I0c459, I92c8f, b/276989796)
Modifications apportées à l'API
- Pour faciliter la migration vers les nouvelles API, les fonctions d'extension
items
etitemsIndexed
surLazyListScope
acceptent désormais un paramètrecontentType
, reflétant la compatibilité des nouvelles API. (Ib1918, b/255283378)
Mises à jour des dépendances
- Paging Compose a mis à jour sa dépendance de Compose 1.0.5 vers Compose 1.2.1. (Ib1918, b/255283378)
Version 1.0.0-alpha18
8 février 2023
Publication de androidx.paging:paging-compose:1.0.0-alpha18
sans aucune modification. Liste des commits de la version 1.0.0-alpha18
Version 1.0.0-alpha17
24 octobre 2022
Publication d'androidx.paging:paging-compose:1.0.0-alpha17
. Liste des commits de la version 1.0.0-alpha17
Nouvelles fonctionnalités
- Ajout de la prise en charge d'un
CoroutineContext
personnalisé lors de l'appel decollectLazyPagingItems
. (I7a574, b/243182795, b/233783862)
Version 1.0.0-alpha16
10 août 2022
Publication d'androidx.paging:paging-compose:1.0.0-alpha16
. Liste des commits de la version 1.0.0-alpha16
Nouvelles fonctionnalités
- Paging fournit désormais des journaux via la classe
LazyPagingItems
pour exposer les informations de débogage collectées à partir des PagingData. - Ces journaux peuvent être activés via commande
adb shell
:adb shell setprop log.tag.Paging [DEBUG|VERBOSE]
. (b/235527159, https://issuetracker.google.com/issues/235527159)
Correction de bugs
- Correction de l'erreur "constructeur
PagingDataDiffer
manquant" lors de l'utilisation depaging-compose:1.0.0-alpha15
avecpaging-common:3.1.1
ou ses versions antérieures. (b/235256201,b/239868768)
Version 1.0.0-alpha15
1er juin 2022
Publication d'androidx.paging:paging-compose:1.0.0-alpha15
. Liste des commits de la version 1.0.0-alpha15
Modifications apportées à l'API
- Ajout de constructeurs pour
PagingDataAdapter
etAsyncPagingDataDiffer
, qui acceptentCoroutineContext
au lieu deCoroutineDispatcher
. (Idc878)
Correction de bugs
LazyPagingItems
définit désormais leloadState
initial sur une actualisation deLoadState.Loading
. (I55043, b/224855902)
Version 1.0.0-alpha14
13 octobre 2021
Publication d'androidx.paging:paging-compose:1.0.0-alpha14
. Liste des commits de la version 1.0.0-alpha14
Version 1.0.0-alpha13
29 septembre 2021
Publication d'androidx.paging:paging-compose:1.0.0-alpha13
. Liste des commits de la version 1.0.0-alpha13
Modifications apportées à l'API
- Remplacement de la fonction
LazyPagingItems.snapshot()
par la propriétéLazyPagingItems.itemSnapshotList
. (Ie2da8) - Suppression de l'élément
LazyPagingItems.getAsState()
, devenu obsolète. (Ie65e4)
Version 1.0.0-alpha12
21 juillet 2021
Publication d'androidx.paging:paging-compose:1.0.0-alpha12
. Liste des commits de la version 1.0.0-alpha12.
Modifications apportées à l'API
- Modification de
items(lazyPagingItems)
etitemsIndexed(lazyPagingItems)
, utilisés pour relier Paging àLazyColumn/Row
, afin d'accepter le paramètre de clé d'option. Vous pouvez désormais spécifier une clé stable représentant l'élément. En savoir plus sur les clés (I7986d) - La fonction
lazyPagingItems.getAsState(index)
est désormais obsolète. UtilisezlazyPagingItems[index]
à la place. (I086cb, b/187339372)
Version 1.0.0-alpha11
30 juin 2021
Publication d'androidx.paging:paging-compose:1.0.0-alpha11
. Liste des commits de la version 1.0.0-alpha11.
Version 1.0.0-alpha10
2 juin 2021
Publication d'androidx.paging:paging-compose:1.0.0-alpha10
. Liste des commits de la version 1.0.0-alpha10.
Version 1.0.0-alpha09
18 mai 2021
Publication d'androidx.paging:paging-compose:1.0.0-alpha09
. Liste des commits de la version 1.0.0-alpha09
Correction de bugs
- Les méthodes item getter et itemCount sont désormais observables, ce qui permet de les utiliser également avec LazyVerticalGrid. (Ie2446, b/171872064, b/168285687)
Compatibilité avec Compose
androidx.paging:paging-compose:1.0.0-alpha09
n'est compatible qu'avec les versions1.0.0-beta07
et ultérieures de Compose.
Version 1.0.0-alpha08
24 février 2021
Publication d'androidx.paging:paging-compose:1.0.0-alpha08
. Liste des commits de la version 1.0.0-alpha08
Mise à jour pour l'intégration avec Compose 1.0.0-beta01.
Version 1.0.0-alpha07
10 février 2021
Publication d'androidx.paging:paging-compose:1.0.0-alpha07
. Liste des commits de la version 1.0.0-alpha07
Mise à jour pour l'intégration avec Compose alpha12.
Version 1.0.0-alpha06
28 janvier 2021
Publication d'androidx.paging:paging-compose:1.0.0-alpha06
. Liste des commits de la version 1.0.0-alpha06
Correction de bugs
Mise à jour pour les dépendances sur Compose 1.0.0-alpha11.
Version 1.0.0-alpha05
13 janvier 2021
Publication d'androidx.paging:paging-compose:1.0.0-alpha05
. Liste des commits de la version 1.0.0-alpha05.
Mise à jour de la version pour dépendre de Compose 1.0.0-alpha10.
Version 1.0.0-alpha04
16 décembre 2020
Publication d'androidx.paging:paging-compose:1.0.0-alpha04
. Liste des commits de la version 1.0.0-alpha04
Correction de bugs
- Mise à jour des propriétés de commodité,
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
etCombinedLoadStates.append
pour qu'elles passent deLoading
àNotLoading
uniquement après que les états de chargement source et médiateur sontNotLoading
, pour garantir que la mise à jour à distance a été appliquée. (I65619)
Version 1.0.0-alpha03
2 décembre 2020
Publication d'androidx.paging:paging-compose:1.0.0-alpha03
. Liste des commits de la version 1.0.0-alpha03
- Mis à jour pour correspondre à Compose 1.0.0-alpha08.
Version 1.0.0-alpha02
11 novembre 2020
Publication d'androidx.paging:paging-compose:1.0.0-alpha02
. Liste des commits de la version 1.0.0-alpha02.
Modifications apportées à l'API
- Ajout des méthodes
.peek()
,.snapshot()
,.retry()
et.refresh()
aux élémentsLazyPagingItem
qui exposent les mêmes fonctionnalités que celles disponibles dansAsyncPagingDataDiffer
ouPagingDataAdapter
. (Iddfe8, b/172041660)
Version 1.0.0-alpha01
28 octobre 2020
Publication d'androidx.paging:paging-compose:1.0.0-alpha01
. Liste des commits de la version 1.0.0-alpha01
Nouvelles fonctionnalités
L'artefact paging-compose
permet l'intégration entre la bibliothèque Paging et Jetpack Compose. Exemple d'utilisation simple :
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
Version 3.0.1
Version 3.0.1
21 juillet 2021
Publication d'androidx.paging:paging-*:3.0.1
. Liste des commits de la version 3.0.1
Correction de bugs
- Correction d'une exception IllegalStateException provoquée par l'accès à
PagedList.dataSource
à partir de la valeur initiale produite parLivePagedList
ouRxPagedList
. (I96707)
Version 3.0.0
Version 3.0.0
5 mai 2021
Publication d'androidx.paging:paging-*:3.0.0
. Liste des commits de la version 3.0.0
Principales fonctionnalités de la version 3.0.0
Abandon de la majorité de l'API Paging 2.x.x existante au profit des nouvelles API Paging 3, qui offrent les améliorations suivantes :
- Prise en charge des entités de première classe pour Flow et les coroutines Kotlin.
- Prise en charge des annulations.
- Prise en charge intégrée des états de chargement et signaux d'erreur.
- Prise en charge des fonctionnalités réessayer et actualiser.
- Combinaison des trois sous-classes DataSource en une classe PagingSource unifiée.
- Prise en charge des transformations de page personnalisées, y compris une transformation intégrée pour l'ajout de séparateurs.
- Prise en charge des en-têtes et des pieds de page pour l'état de chargement.
Version 3.0.0-rc01
21 avril 2021
Publication d'androidx.paging:paging-*:3.0.0-rc01
. Liste des commits de la version 3.0.0-rc01
Correction de bugs
- Correction d'un problème provoqué par Paging, qui envoyait parfois des événements différentiels "no-op" à RecyclerView, ce qui pouvait entraîner le déclenchement précoce de certains écouteurs. (Ic507f, b/182510751)
Version 3.0.0-beta03
24 mars 2021
Publication de androidx.paging:paging-*:3.0.0-beta03
. Liste des commits de la version 3.0.0-beta03
Correction de bugs
- Remaniement du traitement des espaces réservés lorsqu'une liste est actualisée, afin d'éviter les sauts inattendus dans RecyclerView. Pour en savoir plus, consultez le fichier NullPaddedDiffing.md. (If1490, b/170027529, b/177338149)
- Correction de l'appel synchronisé et erroné de
DataSource.Factory.create()
sur le thread principal par les différents compilateurs PagedList (ancien chemin de compatibilité) lorsque.build()
était appelé. (b/182798948)
Version 3.0.0-beta02
10 mars 2021
Publication d'androidx.paging:paging-*:3.0.0-beta02
. Liste des commits de la version 3.0.0-beta02
Modifications apportées à l'API
- Correction de la propagation de l'exigence d'activation
@ExperimentalCoroutinesApi
par les extensions Rx3. Auparavant, celles-ci étaient marquées sur la méthode@get
, qui est ignorée par le compilateur Kotlin en raison de : https://youtrack.jetbrains.com/issue/KT-45227. (I5733c)
Correction de bugs
- Application des restrictions sur l'utilisation publique des API expérimentales. (I6aa29, b/174531520)
- Correction d'un bug qui générait toujours la valeur
null
pourPagingState
lors de l'appel de l'actualisation à distance. - Correction d'un bug provoqué par le renvoi par PagingSource de pages vides, qui empêchait une nouvelle extraction par Paging afin de traiter
prefetchDistance
et bloquait le processus.
Version 3.0.0-beta01
10 février 2021
Publication d'androidx.paging:paging-*:3.0.0-beta01
. Liste des commits de la version 3.0.0-beta01
Modifications apportées à l'API
- Les wrappers Rx2 et Rx3 exposent désormais l'annotation expérimentale dont ils dépendent. Si vous utilisez les wrappers de compatibilité Rx dans paging-rxjava2 ou paging-rxjava3, vous devez maintenant annoter les utilisations avec
@OptIn(ExperimentalCoroutinesApi::class)
. (Ib1f9d)
Correction de bugs
- Correction de l'exception
IndexOutOfBoundsException: Inconsistency detected
, qui survenait parfois lors de l'utilisation d'APIDataSource
v2 via des chemins de compatibilité. - Correction du lancement de l'appel
isInvalid
lors de l'initialisation deDataSource
utilisé via des chemins de compatibilité. L'appel est maintenant lancé sur fetchDispatcher au lieu du thread principal. Cela corrige unIllegalStateException
en raison de l'accès à la base de données sur le thread principal lors de l'utilisation de l'implémentationPagingSource
de Room.
Version 3.0.0-alpha13
27 janvier 2021
Publication d'androidx.paging:paging-*:3.0.0-alpha13
. Liste des commits de la version 3.0.0-alpha13
Modifications apportées à l'API
- L'implémentation de
PagingSource.getRefreshKey
n'est plus facultative, cet élément devenant une fonction abstraite sans implémentation par défaut. Les utilisateurs qui choisissent de migrer peuvent continuer à renvoyer l'implémentation par défaut (qui renvoie simplementnull
), maisgetRefreshKey()
doit disposer d'une véritable implémentation renvoyant une clé basée sur la position de défilement actuelle de l'utilisateur et permettant à Paging de continuer le chargement centré sur la fenêtre d'affichage viaPagingState.anchorPosition
, si possible. (I4339a) InvalidatingPagingSourceFactory
est maintenant une classe finale. (Ia3b0a)- Prise en charge de la configuration du comportement du séparateur de terminal (en-tête/pied de page) avec un paramètre facultatif SeparatorType. Deux options sont proposées :
FULLY_COMPLETE
(comportement existant) : attendre que PagingSource et RemoteMediator indiquent endOfPaginationReached avant d'ajouter les séparateurs de terminal. Si RemoteMediator n'est pas utilisé, l'état loadState distant est ignoré. Cette option est particulièrement utile si vous souhaitez n'afficher que les séparateurs de section lorsque la section est entièrement chargée, y compris l'extraction d'une source distante, comme le réseau.SOURCE_COMPLETE
: attendre que PagingSource indique endOfPaginationReached, même si RemoteMediator est en cours d'utilisation. Cette option permet de présenter les en-têtes et pieds de page de manière synchrone avec le chargement initial, ce qui évite aux utilisateurs d'avoir à faire défiler la page pour afficher les séparateurs de terminal. (Ibe993, b/174700218)
Correction de bugs
- Correction d'une occurrence rare de fuite de mémoire survenant lorsqu'une PagingSource était invalidée avant que PageFetcher puisse commencer son chargement à partir de celle-ci. (I9606b, b/174625633)
Version 3.0.0-alpha12
13 janvier 2021
Publication d'androidx.paging:paging-*:3.0.0-alpha12
. Liste des commits de la version 3.0.0-alpha12
Modifications apportées à l'API
- InvalidatingPagingSourceFactory n'est plus une classe abstraite, car elle n'a jamais eu de méthodes abstraites. (I4a8c4)
- Ajout d'une surcharge .cachedIn() qui accepte ViewModel au lieu de Lifecycle ou CoroutineScope pour les utilisateurs Java. (I97d81, b/175332619)
- Prise en charge de l'utilisation d'opérations de transformation PagingData asynchrones par les appelants Java, via l'acceptation d'un exécuteur pour les arguments des opérateurs de transformation. Suppression du suffixe -Sync de tous les opérateurs de transformation. Les utilisateurs de coroutines Kotlin devront spécifier la distinction en appelant la fonction d'extension qui accepte un bloc de suspension comme substitut.
Reclassement de tous les opérateurs de transformation PagingData comme extensions de la classe statique PagingDataTransforms. Les utilisateurs de Java devront les appeler via des fonctions d'assistance statiques telles que
PagingDataTransforms.map(pagingData, transform)
En Kotlin, la syntaxe reste identique, mais la fonction doit être importée. (If6885, b/172895919)
Correction de bugs
- Correction d'un bug qui empêchait l'appel de
RemoteMediator.load()
pendantadapter.refresh()
si la fin de la pagination était déjà atteinte.
Version 3.0.0-alpha11
16 décembre 2020
Publication d'androidx.paging:paging-*:3.0.0-alpha11
. Liste des commits de la version 3.0.0-alpha11
Nouvelles fonctionnalités
- Prise en charge des états enregistrés pour les cas d'utilisation de base suivants. La compatibilité totale est en cours de développement, en particulier dans les cas de source multicouche :
- Le flux est mis en cache et l'application n'est pas arrêtée (par exemple, le flux est mis en cache dans un modèle de vue, et l'activité est recréée au cours du processus).
- La source de pagination est comptabilisée, les espaces réservés sont activés et la mise en page n'est pas décalée.
Modifications apportées à l'API
- L'API
PagingSource.getRefreshKey()
est désormais en phase stable. (I22f6f, b/173530980) - La fonction
PagingSource.invalidate
n'est plus ouverte. Si vous avez besoin de recevoir une notification en cas d'invalidation, envisagez d'appeler la méthode registerInvalidatedCallback au lieu de passer outre l'invalidation. (I628d9, b/173029013, b/137971356) - Pager dispose désormais d'un constructeur expérimental unique en plus de ses constructeurs standards, au lieu de diffuser des API expérimentales dans une API publique non expérimentale par le biais d'une annotation d'activation. (I9dc61, b/174531520)
- Mise à jour des propriétés de commodité,
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
etCombinedLoadStates.append
pour qu'elles passent deLoading
àNotLoading
uniquement après que les états de chargement source et médiateur sontNotLoading
, pour garantir que la mise à jour à distance a été appliquée. (I65619) Suppression de LoadParams.pageSize, qui était déjà obsolète. Nous vous recommandons d'utiliser
LoadParams.loadSize
dans votre PagingSource.LoadParams.loadSize
est toujours égal àPagingConfig.pageSize
, sauf pour l'appel de chargement initial, où il est égal àPagingConfig.initialLoadSize
.Si vous testez votre source de données Paging2 sans utiliser ni Pager ni PagedList,
pageSize
peut ne pas correspondre àPagingConfig.pageSize
si vous avez également définiinitialLoadSize
. Si cet aspect est important pour vos tests, essayez plutôt d'utiliser Pager ou PagedList pour définir en interne la valeur PageSize appropriée pour vos méthodes de chargement de DataSource. (I98ac7, b/149157296)
Correction de bugs
- Correction d'un plantage dû à une exception IllegalStateException lors de l'utilisation de séparateurs avec PagingConfig.maxSize. (I0ed33, b/174787528)
- Correction d'un bug qui empêchait la mise à jour immédiate de l'état de chargement de PREPEND/APPEND vers
NotLoading(endOfPaginationReached = true)
après le chargement initial, si RemoteMediator était défini. (I8cf5a) - Correction d'un bug qui provoquait le renvoi de la liste précédente (obsolète) dans les mises à jour de ListUpdateCallback par les API côté présentateur, telles que .snapshot(), .peek(), etc.
- Correction d'un bug qui empêchait les opérateurs de séparation d'ajouter des en-têtes ou des pieds de page avec RemoteMediator.
- Correction d'un bug qui bloquait l'état de chargement lors de mises à jour de LoadState en NotLoading pour RemoteMediator.
- Correction d'un bug causé par l'API de compatibilité Paging2.0 (
.asPagingSourceFactory()
), qui provoquait l'initialisationDataSource
de sauvegarde sur le mauvais CoroutineDispatcher. Ce correctif résout un plantage et d'éventuels cas d'ANR, en particulier avec l'implémentation actuelle de PagingSource de Room, qui utilise ce chemin de compatibilité.
Version 3.0.0-alpha10
2 décembre 2020
Publication d'androidx.paging:paging-*:3.0.0-alpha10
. Liste des commits de la version 3.0.0-alpha10
Modifications apportées à l'API
Suppression des API obsolètes
dataRefreshFlow
etdataRefreshListener
, car redondantes avec les mises à jour loadStateFlow/Listener. Si vous comptez migrer, l'équivalent de loadStateFlow est :loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
Correction de bugs
- Correction de la propagation de endOfPaginationReached pour l'actualisation de
REFRESH
. Désormais, le signal se propage correctement aux mises à jour du LoadState et empêche le déclenchement desAPPEND
etPREPEND
distants. (I94a3f, b/155290248) - Correction du blocage qui empêchait Paging de démarrer les chargements
PREPEND
ouAPPEND
lorsqu'une liste vierge était présentée en raison d'une page initiale vide ou d'un filtrage trop strict. (I3e702, b/168169730) - Correction d'un problème qui empêchait l'appel de
getRefreshKey
sur les générations suivantes de PagingSource suite à une invalidation survenue trop rapidement. (I45460, b/170027530)
Contribution externe
- Ajout d'une nouvelle classe abstraite InvalidatingPagingSourceFactory avec une API
.invalidate()
, qui transfère les invalidations à toutes les PagingSources qu'elle émet. Merci à @claraf3 ! (Ie71fc, b/160716447)
Problèmes connus
- Il est possible que les en-têtes et les pieds de page de la transformation .insertSeparators() n'apparaissent pas immédiatement lorsque vous utilisez RemoteMediator. (b/172254056)
- L'utilisation de RemoteMediator peut bloquer le
LoadState
distant si l'invalidation etPagingSource.load(LoadParams.Refresh(...))
se terminent avant le renvoi deRemoteMediator.load()
. (b/173717820)
Version 3.0.0-alpha09
11 novembre 2020
Publication d'androidx.paging:paging-*:3.0.0-alpha09
. Liste des commits de la version 3.0.0-alpha09
Modifications apportées à l'API
- Abandon complet des méthodes dataRefreshFlow et Listener avec une clause replaceWith. (I6e2dd)
Correction de bugs
- Correction de l'exception
IllegalArgumentException
qui survenait lors de l'utilisation de séparateurs avec RemoteMediator conjointement au déclenchement d'une invalidation alors qu'un chargement distant en cours d'exécution renvoie endOfPagination. (I3a260)
Version 3.0.0-alpha08
28 octobre 2020
Publication d'androidx.paging:paging-*:3.0.0-alpha08
. Liste des commits de la version 3.0.0-alpha08
Modifications apportées à l'API
- Combinaison des variantes Kotlin et Java de
DataSource.InvalidatedCallback
, en activant les SAM-conversions dans Kotlin via une interface fonctionnelle (disponible dans Kotlin 1.4). Ce correctif résout également un bug qui empêchait l'appel des variantes Kotlin de rappels d'invalidation après une transformation par.map
ou.mapByPage
. (I1f244, b/165313046)
Correction de bugs
- Amélioration drastique de l'interaction de Paging avec ViewPager. Plus spécifiquement, Paging n'annule plus les appels
RemoteMediator#load
à la suite d'une invalidation de page. De plus, il n'effectue plus de requêtes de chargement append/prepend, si la fonction REFRESH est requise, tant que la requête REFRESH n'a pas abouti. (I6390b, b/162252536) - Prise en charge de la vérification lint de l'API pour MissingGetterMatchingBuilder sous AndroidX. (I4bbea, b/138602561)
- Correction d'un bug qui provoquait le plantage des fonctions d'assistance
.withLoadState*
ConcatAdapter
suite à la notification de RecyclerView à partir d'un thread en arrière-plan. (I18bb5 ,b/170988309) - Correction d'un bug qui empêchait parfois le préchargement de se déclencher correctement suite au chargement d'une très petite page non vide . (Iffda3 b/169259468)
Version 3.0.0-alpha07
1er octobre 2020
Publication d'androidx.paging:paging-*:3.0.0-alpha07
. Liste des commits de la version 3.0.0-alpha07
Modifications apportées à l'API
- Mise à jour des opérateurs PagingData asynchrones basés sur Guava afin d'accepter un exécuteur en tant que paramètre pour contrôler le contexte d'exécution. (Id4372)
Correction de bugs
- Correction de l'exception IndexOutOfBounds survenant dans RemoteMediator en raison d'une condition de concurrence. (I00b7f, b/165821814)
- Correction d'une condition de concurrence dans la conversion d'une DataSource en PagingSource, qui pouvait entraîner l'exclusion des signaux d'invalidation de la DataSource par la PagingSource résultante.
- Correction d'un problème dans la logique de récupération interne des pages, qui empêchait parfois la récupération des nouvelles générations de PagingSource jusqu'à l'appel de PagingDataAdapter.refresh().
- Correction d'un problème qui entraînait parfois la perte de la position de défilement lors de l'utilisation d'une DataSource convertie en PagingSource (telle que celle produite par Room) en association avec RemoteMediator.
Contribution externe
- Merci à @simonschiller d'avoir ajouté les opérateurs de transformation asynchrones basés sur RxJava2, RxJava3 et Guava pour PagingData.
Version 3.0.0-alpha06
2 septembre 2020
Publication d'androidx.paging:paging-*:3.0.0-alpha06
. Liste des commits de la version 3.0.0-alpha06
Modifications apportées à l'API
- Ajout d'une exception
UnsupportedOperationException
accompagnée d'explications clarifiées concernant les incompatibilités avec les identifiants stables et déclenchée chaque fois quePagingDataAdapter.setHasStableIds
est appelé. (Ib3890, b/158801427)
Correction de bugs
- Mise à jour de insertSeparators, afin de ne plus filtrer les pages vides, ce qui permet au présentateur de respecter la distance de préchargement, même lorsque de nombreuses pages vides sont insérées. (I9cff6, b/162538908)
Version 3.0.0-alpha05
19 août 2020
Publication d'androidx.paging:paging-*:3.0.0-alpha05
. Liste des commits de la version 3.0.0-alpha05
Correction de bugs
- Correction du préchargement des pages par Paging, même lorsque les données présentées sont fortement filtrées.
- Correction d'un problème qui provoquait le renouvellement de la tentative lorsque
LoadResult.Error
était renvoyé suite à une nouvelle tentative de chargement.
Contribution externe
- Merci à Clara F. de nous avoir aidés à nettoyer certains tests ! (549612)
Version 3.0.0-alpha04
5 août 2020
Publication d'androidx.paging:paging-*:3.0.0-alpha04
. Liste des commits de la version 3.0.0-alpha04
Modifications apportées à l'API
- Ajout de l'API
peek()
àAsyncPagingDataDiffer
etPagingDataAdapter
pour permettre l'accès aux données présentées sans déclencher de chargement de page. (I38898, b/159104197) - Ajout d'une API
snapshot()
àPagingDataAdapter
etAsyncPagingDataDiffer
pour permettre la récupération des éléments présentés sans déclencher de récupération de page. (I566b6, b/159104197) - Ajout d'un constructeur
PagingData.from(List<T>)
pour permettre la présentation de listes statiques. Ce constructeur peut être combiné avec le flux global des PagingData pour afficher des listes statiques dans certains états (par exemple, avant la fin de l'opération REFRESH initiale ou simplement pour tester les transformations). (Id134d) - Abandon des API dataRefresh Flow/Listener. Destinées à exposer l'état des éléments présentés sur REFRESH, elles étaient devenues redondantes suite aux améliorations apportées au minutage des rappels loadState Flow/Listener et à la propriété itemCount. (Ia19f3)
- Ajout des wrappers de compatibilité RxJava3 pour
PagingSource
etRemoteMediator
. (I49ef3, b/161480176)
Correction de bugs
- Conversion de
PositionalDataSource
enPagingSource
via fonction d'assistancetoPagingSourceFactory
. Ceci inclut les élémentsPagingSource
générés par Room, qui se marquent désormais correctement afin de permettre les sauts. (I3e84c, b/162161201) - Correction d'un bug qui provoquait parfois une condition de concurrence suivie d'une exception
ClosedSendChannelException
lors de l'utilisation de la variante synchrone de submitData. (I4d702, b/160192222)
Contribution externe
- Merci à Zac Sweers d'avoir ajouté des wrappers de compatibilité RxJava3 pour le compte de Slack. (I49ef3, b/161480176)
Version 3.0.0-alpha03
22 juillet 2020
Publication d'androidx.paging:paging-*:3.0.0-alpha03
. Liste des commits de la version 3.0.0-alpha03
Modifications apportées à l'API
- Le constructeur de PagingState est désormais public, afin de faciliter le test des implémentations de getRefreshKey(). (I8bf15)
- Masquage des variantes de fonction DataSource de carte Kotlin pour Java, afin de résoudre les ambiguïtés entre les variantes d'origine et Kotlin. (If7b23, b/161150011)
- Ajout du libellé @JvmSynthetic aux API de convenance redondantes destinées aux utilisateurs de Kotlin. (I56ae5)
- Ajout de surcharges au constructeur de LoadResult.Page, qui définit itemsBefore et itemsAfter sur COUNT_UNDEFINED par défaut. (I47849)
- Mise à jour des opérateurs PagingData existants afin d'accepter les méthodes de suspension, et introduction de nouveaux opérateurs non suspensifs mapSync, flatMapSync et filterSync pour les utilisateurs de Java. Les méthodes de transformation existantes ont été reclassées vers des fonctions d'extension et devront désormais être importées par les utilisateurs de Kotlin. (I34239, b/159983232)
Correction de bugs
- Les PagingSources de Room (et PositionalDataSource) affichent désormais un séparateur au début de la première page, afin d'éviter à l'utilisateur de devoir faire défiler la page pour l'afficher. (I6f747, b/160257628)
- Correction du déclenchement de chargements PagingSource lors des accès aux éléments dans les espaces réservés, jusqu'à ce qu'une page remplissant l'index demandé soit renvoyée après transformation par PagingData.filter(). (I95625, b/158763195)
- Correction d'un bug qui empêchait parfois les nouvelles tentatives de PagingDataAdapter.retry() suite à un défilement après le renvoi d'une erreur par PagingSource. (I1084f, b/160194384)
- Correction d'un problème qui empêchait parfois le chargement des pages en cas d'accès à des éléments après l'abandon d'une page, même si l'accès à l'élément était à portée de prefetchDistance. (Ie95ae, b/160038730)
- Correction d'un problème d'activation des espaces réservés par PagingConfig.maxSize après un événement d'abandon. (I2be29, b/159667766)
Version 3.0.0-alpha02
24 juin 2020
Publication d'androidx.paging:paging-*:3.0.0-alpha02
. Liste des commits de la version 3.0.0-alpha02
Modifications apportées à l'API
- Ajout de surcharges pour le constructeur de
PagingConfig
avec des valeurs par défaut communes. (I39c50, b/158576040) - Ajout de surcharges pour les constructeurs de
PagingDataAdapter
etAsyncPagingDataDiffer
avec des valeurs par défaut communes. (Ie91f5) - Mise à jour des API d'adaptateur
dataRefreshFlow
etdataRefreshListener
, qui transmettent désormais une valeur booléenne pour indiquer si un élémentPagingData
est vide. (I6e37e, b/159054196) - Ajout des API RxJava et Guava pour RemoteMediator : RxRemoteMediator et ListenableFutureRemoteMediator.
- Ajout de fonctions d'assistance à PagingState pour l'accès à des éléments communs tels que
isEmpty()
etfirstItemOrNull()
. (I3b5b6, b/158892717)
Correction de bugs
- Correction d'un problème de réutilisation accidentelle de PagingSources non valides, qui provoquait une erreur indéfinie. Pager vérifie désormais la réutilisation de PagingSource en fabrique. (I99809, b/158486430)
- Correction d'un problème qui empêchait le chargement de la PagingSource suite aux échecs de REFRESH de RemoteMediator. (I38b1b, b/158892717)
- Correction d'un problème de plantage de la version non suspensive de
submitData
, qui survenait en cas de collecte simultanée sur plusieursPagingData
après l'appel de la version suspensive desubmitData
. (I26358, b/158048877) - Correction de l'exception "cannot collect twice from Pager" (impossible de collecter deux fois depuis Pager), qui pouvait survenir après une modification de la configuration. (I58bcc, b/158784811)
Version 3.0.0-alpha01
10 juin 2020
Publication d'androidx.paging:paging-*:3.0.0-alpha01
. Liste des commits de la version 3.0.0-alpha01
Mise à jour de la bibliothèque Paging vers la version 3.0 afin de prendre en charge plusieurs nouvelles fonctionnalités majeures.
Nouvelles fonctionnalités de la version 3.0
- Prise en charge de grande qualité des coroutines Kotlin et de Flow.
- Prise en charge du chargement asynchrone avec les fonctions de suspension de coroutines et les primitives RxJava Single ou Guava ListenableFuture.
- Ajout d'indicateurs d'état de chargement et de signaux d'erreur intégrés pour prendre en charge la conception d'interfaces utilisateur responsives, notamment avec les fonctionnalités réessayer et actualiser.
- Améliorations apportées à la couche du dépôt :
- Simplification de l'interface de source de données
- Simplification de la pagination du réseau et des bases de données
- Prise en charge des annulations
- Améliorations apportées à la couche de présentation :
Problèmes connus
- Les Javadocs pour Paging 3.0 ne sont pas encore disponibles. En attendant, veuillez utiliser la documentation Kotlin ou les guides accessibles via le lien ci-dessus. (b/158614050)
Version 2.1.2
Version 2.1.2
18 mars 2020
Publication d'androidx.paging:paging:2.1.2
. Liste des commits de la version 2.1.2 contient ces commits par rapport à la version 2.1.0.
Correction de bugs
- Correction de l'exception
IndexOutOfBoundsException
, qui survenait dans de rares cas lors de la conversion d'une position pendant l'invalidation.
Problèmes de version
La version
2.1.1
de Paging a été publiée de manière incorrecte, à partir d'une branche mal configurée, exposant des API et des fonctionnalités partiellement implémentées qui devaient être finalisées dans une prochaine version.Paging
2.1.2
contient la correction de centrage du chargement, initialement publiée dans la version 2.1.1, mais cette fois-ci correctement sélectionnée dans la version 2.1.0. Nous vous recommandons vivement de passer à cette version si vous utilisez actuellement la version 2.1.1.
Version 2.1.1
Version 2.1.1
18 décembre 2019
Publication d'androidx.paging:paging-*:2.1.1
. Liste des commits de la version 2.1.1
Correction de bugs
- Correction d'un problème de centrage des chargements initiaux contigus à partir des PositionalDataSources, qui sont désormais centrés autour du dernier accès lorsque les espaces réservés sont désactivés.
Version 2.1.0
Version 2.1.0
25 janvier 2019
Publication de Paging 2.1.0
sans aucune modification par rapport à la version 2.1.0-rc01
.
Version 2.1.0-rc01
6 décembre 2018
Publication de Paging 2.1.0-rc01
sans aucune modification par rapport à la version 2.1.0-beta01
.
Version 2.1.0-beta01
1er novembre 2018
Publication de Paging 2.1.0-beta01
sans aucune modification par rapport à la version 2.1.0-alpha01
.
Version 2.1.0-alpha01
12 octobre 2018
La version 2.1.0-alpha01
de Paging apporte deux nouveautés majeures : l'abandon de pages et les bibliothèques d'extensions KTX pour chaque artefact, ainsi que plusieurs autres modifications d'API et corrections de bugs.
Modifications apportées à l'API
- Ajout de
PagedList.Config.Builder.setMaxSize()
permettant de limiter le nombre d'éléments chargés en mémoire. - Ajout de
androidx.paging.Config()
comme alternative Kotlin pourPagedList.Config.Builder
. - Ajout de
androidx.paging.PagedList()
comme alternative Kotlin pourPagedList.Builder
. - Ajout de
DataSourceFactory.toLiveData()
comme alternative Kotlin pourLivePagedListBuilder
. - Ajout de
DataSourceFactory.toObservable()
ettoFlowable()
comme alternatives Kotlin pourRxPagedListBuilder
. - Ajout de
AsyncPagedListDiffer.addPagedListListener()
pour écouter lorsque "PagedList" est remplacée. b/111698609 - Ajout de la variante
PagedListAdapter.onCurrentListChanged()
, qui transmet l'ancienne et la nouvelle liste. La variante précédente est désormais obsolète. - Ajout de variantes
PagedListAdapter/AsyncPagedListDiffer.submitList()
, qui acceptent un rappel supplémentaire déclenché si/quand PagedList est affiché, après vérification différentielle (diffing). Cette option permet de synchroniser un remplacement de PagedList avec d'autres mises à jour de l'UI. b/73781068 - Ajout de
PagedList.getLoadedCount()
pour indiquer le nombre d'éléments en mémoire. Notez que la valeur renvoyée est toujours égale à.size()
si les espaces réservés sont désactivés.
Correction de bugs
- Correction d'une condition de concurrence lors de la vérification différentielle (diffing) en cas de réutilisation de listes. b/111591017
IndexOutOfBoundsException
génère désormais unePagedList.loadAround()
lorsque l'index n'est pas valide. Auparavant, ce problème pouvait provoquer un plantage associé à une exception indéfinie.- Correction d'un problème d'arrêt du chargement survenant suite à un chargement initial extrêmement faible avec des données inchangées. b/113122599
Version 2.0.0
Version 2.0.0
1er octobre 2018
Publication de Paging 2.0.0
avec une seule correction de bug.
Correction de bugs
- Correction d'un plantage qui pouvait se produire lors d'un défilement très rapide à l'aide de
PositionalDataSource
et d'espaces réservés. b/114635383
Version 2.0.0-beta01
2 juillet 2018
Correction de bugs
- Correction d'un problème de disparition du contenu dans certains cas de préfixe (espaces réservés désactivés, "PositionalDataSource"). b/80149146
- (Déjà publié dans
1.0.1
) Correction de plantages lors desquelsPagedListAdapter
etAsyncPagedListDiffer
ne parvenaient pas à signaler des événements de déplacement. b/110711937
Dépendances antérieures à AndroidX
Pour les versions de Paging antérieures à AndroidX ci-dessous, incluez les dépendances suivantes :
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"
}
Version 1.0.1
Version 1.0.1
26 juin 2018
Publication de Paging 1.0.1
avec une seule correction de bug dans runtime
. Nous vous recommandons vivement d'utiliser la version 1.0.1
pour plus de stabilité. La version 1.0.1
de Paging RxJava2 est également disponible. Elle est identique à la version 1.0.0-rc1
.
Correction de bugs
- Correction de plantages lors desquels
PagedListAdapter
etAsyncPagedListDiffer
ne parvenaient pas à signaler des événements de déplacement. b/110711937
RxJava2 version 1.0.0
RxJava2 version 1.0.0-rc1
16 mai 2018
La version 1.0.0-rc1
de Paging RxJava2 devient une version finale (RC) sans modification par rapport à la version alpha initiale.
Version 1.0.0
Version 1.0.0-rc1
19 avril 2018 Version final de Paging
Nous n'avons aucun autre problème connu ni aucune nouvelle fonctionnalité planifiée pour la version 1.0.0
de Paging. Veuillez mettre à niveau vos projets pour utiliser la version 1.0.0-rc1
et nous aider à mettre cette version à l'épreuve afin de publier une version 1.0.0
aussi fiable que possible.
Cette version n'a pas été modifiée. Elle est identique à 1.0.0-beta1
.
Version 1.0.0-beta1
5 avril 2018
Paging entrera dans une brève phase bêta avant de passer en version finale (RC).
Nous ne prévoyons pas d'autres modifications de l'API pour Paging 1.0
. Les critères de modification de l'API sont très élevés.
La prise en charge de la version alpha de RxJava2 pour Paging est fournie par le biais d'un module facultatif distinct (android.arch.paging:rxjava2:1.0.0-alpha1
). La gestion des versions restera séparée jusqu'à la stabilisation.
Cette nouvelle bibliothèque fournit une alternative RxJava2 à LivePagedListBuilder
, capable de construire des éléments Observable
et Flowable
, en acceptant des Scheduler
au lieu d'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();
Nouvelles fonctionnalités
- Ajout de
RxPagedListBuilder
via le nouvel artefactandroid.arch.paging:rxjava2
.
Modifications apportées à l'API
Modifications de l'API visant à clarifier le rôle des exécuteurs dans les compilateurs :
setBackgroundThreadExecutor()
renommésetFetchExecutor()
(dansPagedList.Builder
etLivePagedListBuilder
).setMainThreadExecutor()
renommésetNotifyExecutor()
(dansPagedList.Builder
).
Correction du membre
PagedList.mCallbacks
, défini comme privé.
Correction de bugs
LivePagedListBuilder
déclenche le chargement initial dePagedList
sur l'exécuteur spécifié, plutôt que sur le pool de threads des composants d'architecture d'E/S.Correction du comportement d'invalidation des wrappers
DataSource
internes (utilisés pour implémenterDataSource.map
, ainsi que pour le chargement dePositionalDataSource
avec espaces réservés désactivés). b/77237534
Version 1.0.0-alpha7
21 mars 2018
Publication de Paging 1.0.0-alpha7
parallèlement à Lifecycles 1.1.1
. Étant donné que la version alpha7 de Paging dépend du déplacement de la classe Function
mentionnée ci-dessus, vous devrez mettre à jour votre dépendance lifecycle:runtime
vers android.arch.lifecycle:runtime:1.1.1
.
La version alpha7
de Paging est la dernière version prévue avant le passage en phase bêta.
Modifications apportées à l'API
- Ajout d'un constructeur public pour les objets
DataSource.LoadParams
. Les objetsDataSource.LoadCallback
sont désormais abstraits. Ces changements permettent d'encapsuler uneDataSource
ou de tester directement uneDataSource
avec un rappel fictif. b/72600421 - Mappers pour DataSource et DataSource.Factory
map(Function<IN,OUT>)
permet de transformer, d'encapsuler ou de décorer les résultats chargés par uneDataSource
.mapByPage(<List<IN>,List<OUT>>)
offre les mêmes possibilités pour le traitement par lot (par exemple, si des éléments chargés via SQL doivent également interroger une base de données distincte, cette opération peut être effectuée par lot).
- Ajout de
PagedList#getDataSource()
comme méthode pratique. b/72611341 - Suppression de toutes les classes obsolètes de l'API, y compris les parties restantes du package
recyclerview.extensions
et leLivePagedListProvider
. - Passage de
DataSource.Factory
(précédemment une interface) en classe abstraite afin de prendre en charge la fonctionnalité de carte.
Correction de bugs
- Modification des compilateurs pour qu'ils deviennent finaux. b/70848565
- Correction de l'implémentation
DataSource
de Room afin de traiter les requêtes multitables. (Correctif inclus dans la version 1.1.0-beta1 de Room, voir ci-dessus.) - Correction d'un bug qui empêchait l'appel de
BoundaryCallback.onItemAtEndLoaded
pourPositionalDataSource
si les espaces réservés étaient activés et que la taille totale était un multiple exact de la taille de la page.
Version 1.0.0-alpha5
22 janvier 2018
Correction de bugs
- Correction d'un problème de chargement de page survenant lorsque les espaces réservés sont désactivés. b/70573345
- Ajout d'une fonction de journalisation supplémentaire pour localiser le bug "IllegalArgumentException". b/70360195 (et correction potentielle côté Room)
- Correction des exemples de code Javadoc. b/70411933 et b/71467637