Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Paging

La bibliothèque Paging facilite le chargement progressif et fluide des données dans la RecyclerView de votre application.

Ce tableau répertorie tous les artefacts du groupe androidx.paging.

Artefact Version stable Version finale Version bêta Version alpha
paging-* 3.1.1 - - 3.2.0-alpha03
paging-compose - - - 1.0.0-alpha17
Dernière mise à jour de cette bibliothèque : 24 octobre 2022

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.1.1"

  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:1.0.0-alpha17"
}

Kotlin

dependencies {
  val paging_version = "3.1.1"

  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:1.0.0-alpha17")
}

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.

Signaler un problème

Pour en savoir plus, consultez la documentation sur l'outil Issue Tracker.

Version 3.2

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 via LoadResult.Page.iterator(). Cela permet indirectement l'utilisation de la méthode flatten de la bibliothèque standard Kotlin avec un List<LoadResult.Page>, par exemple avec la propriété pages de PagingState qui est transmise à la méthode PagingSource.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 ou PagingDataAdapter pour exposer les informations de débogage collectées à partir de PagingData.
  • 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 de paging-common:3.2.0-alpha01 avec l'environnement d'exécution paging-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 et AsyncPagingDataDiffer, qui acceptent CoroutineContext au lieu de CoroutineDispatcher. (Idc878)
  • Par défaut, PagingData.from() et PagingData.empty() n'affecteront plus CombinedLoadStates du côté du présentateur. Une nouvelle surcharge qui permet de transmettre sourceLoadStates et remoteLoadStates à ces constructeurs a été ajoutée pour maintenir le comportement existant consistant à définir LoadStates comme pleinement terminal (autrement dit, NotLoading(endOfPaginationReached = false)), avec la possibilité d'inclure des états distants si nécessaire. Si les LoadStates ne sont pas transmis, les CombinedLoadStates précédents seront conservés côté présentateur lors de la réception des PagingData statiques. (Ic3ce5, b/205344028)

Correction de bugs

  • Correction de la hiérarchisation de PagingSource.getRefreshKey(), prioritaire sur initialKey dans les cas où il renvoyait une valeur nulle, mais qu'une valeur initialKey non nulle était définie. (Ic9542, b/230391606)

Contribution externe

  • Mise à jour de l'API :compose:ui:ui-test (updateApi) à la suite de 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 de LoadState en supprimant les événements LoadState.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 et Flow<PagingData>.flowable ne sont plus en phase expérimentale.
  • Modifications du comportement de LoadState :
    • endOfPaginationReached est désormais toujours false pour LoadType.REFRESH, pour PagingSource et RemoteMediator.
    • LoadStates dans Paging attend désormais des valeurs valides de PagingSource et de RemoteMediator avant d'émettre en aval. 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.
    • .loadStateFlow et .addLoadStateListener sur les API du présentateur n'envoient plus un CombinedLoadStates initial redondant dont les états de médiateur sont toujours définis sur null.
  • 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 sur Flow<PagingData>, bien que cela soit toujours recommandé.
  • Ajout de PagingSource.LoadResult.Invalid en tant que nouveau type renvoyé de PagingSource.load, ce qui entraîne le rejet par Paging de toutes les requêtes de chargement en attente ou futures vers cette PagingSource, 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 et Flow<PagingData>.flowable ne sont plus en phase expérimentale. (Ie0bdd)

Correction de bugs

  • Pour LoadStates, endOfPaginationReached est désormais toujours false pour LoadType.REFRESH. Auparavant, il était possible que endOfPaginationReached soit défini sur true pour RemoteMediator REFRESH, mais pas pour PagingSource. Ces comportements sont désormais consolidés pour toujours renvoyer false, 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 un CombinedLoadStates initial redondant dont les états de médiateur sont toujours définis sur null et les états de source, sur NotLoading(endOfPaginationReached = false). Par conséquent :

    1. Les états de médiateur sont toujours renseignés si vous utilisez RemoteMediator.
    2. 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éritable CombinedLoadStates des PagingData. Cela peut se produire si un collecteur ou un écouteur démarre avant l'envoi des PagingData. (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 package androidx.paging.rxjava3 afin d'éviter tout conflit avec paging-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-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 de collectLazyPagingItems. (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 de paging-compose:1.0.0-alpha15 avec paging-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 et AsyncPagingDataDiffer, qui acceptent CoroutineContext au lieu de CoroutineDispatcher. (Idc878)

Correction de bugs

  • LazyPagingItems définit désormais le loadState initial sur une actualisation de LoadState.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) et itemsIndexed(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. Utilisez lazyPagingItems[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 versions 1.0.0-beta07 et ultérieures de Compose.

Version 1.0.0-alpha08

24 février 2021

Publication de 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 et CombinedLoadStates.append pour qu'elles passent de Loading à NotLoading uniquement après que les états de chargement source et médiateur sont NotLoading, 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éments LazyPagingItem qui exposent les mêmes fonctionnalités que celles disponibles dans AsyncPagingDataDiffer ou PagingDataAdapter. (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 par LivePagedList ou RxPagedList. (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 pour PagingState 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'API DataSource v2 via des chemins de compatibilité.
  • Correction du lancement de l'appel isInvalid lors de l'initialisation de DataSource utilisé via des chemins de compatibilité. L'appel est maintenant lancé sur fetchDispatcher au lieu du thread principal. Cela corrige un IllegalStateException en raison de l'accès à la base de données sur le thread principal lors de l'utilisation de l'implémentation PagingSource 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 simplement null), mais getRefreshKey() 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 via PagingState.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() pendant adapter.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 et CombinedLoadStates.append pour qu'elles passent de Loading à NotLoading uniquement après que les états de chargement source et médiateur sont NotLoading, 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éfini initialLoadSize. 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'initialisation DataSource 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 et dataRefreshListener, 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 }
    

    (Ib5570, b/173530908)

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 des APPEND et PREPEND distants. (I94a3f, b/155290248)
  • Correction du blocage qui empêchait Paging de démarrer les chargements PREPEND ou APPEND 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 et PagingSource.load(LoadParams.Refresh(...)) se terminent avant le renvoi de RemoteMediator.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 que PagingDataAdapter.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 et PagingDataAdapter 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 et AsyncPagingDataDiffer 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 et RemoteMediator. (I49ef3, b/161480176)

Correction de bugs

  • Conversion de PositionalDataSource en PagingSource via fonction d'assistance toPagingSourceFactory. Ceci inclut les éléments PagingSource 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 et AsyncPagingDataDiffer avec des valeurs par défaut communes. (Ie91f5)
  • Mise à jour des API d'adaptateur dataRefreshFlow et dataRefreshListener, qui transmettent désormais une valeur booléenne pour indiquer si un élément PagingData 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() et firstItemOrNull(). (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 plusieurs PagingData après l'appel de la version suspensive de submitData. (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

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 pour PagedList.Config.Builder.
  • Ajout de androidx.paging.PagedList() comme alternative Kotlin pour PagedList.Builder.
  • Ajout de DataSourceFactory.toLiveData() comme alternative Kotlin pour LivePagedListBuilder.
  • Ajout de DataSourceFactory.toObservable() et toFlowable() comme alternatives Kotlin pour RxPagedListBuilder.
  • 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 une PagedList.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 desquels PagedListAdapter et AsyncPagedListDiffer 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 et AsyncPagedListDiffer 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 artefact android.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() (dans PagedList.Builder et LivePagedListBuilder).

    • setMainThreadExecutor() renommé setNotifyExecutor() (dans PagedList.Builder).

  • Correction du membre PagedList.mCallbacks, défini comme privé.

Correction de bugs

  • LivePagedListBuilder déclenche le chargement initial de PagedList 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émenter DataSource.map, ainsi que pour le chargement de PositionalDataSource 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 objets DataSource.LoadCallback sont désormais abstraits. Ces changements permettent d'encapsuler une DataSource ou de tester directement une DataSource 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 une DataSource.
    • 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 le LivePagedListProvider.
  • 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 pour PositionalDataSource 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