Restaurer la position de défilement de RecyclerView – Développeurs Android

Restaurer la position de défilement de RecyclerView – Développeurs Android

Vous avez peut-être eu le problème où un RecyclerView perd la position de défilement lorsque votre Activity/Fragment est recréé. Cela se produit généralement parce que le Adapter les données sont chargées de manière asynchrone et les données n’ont pas été chargées au moment RecyclerView doit être mis en page afin qu’il ne parvienne pas à restaurer la position de défilement.

Commençant par 1.2.0-alpha02, RecyclerView propose une nouvelle API pour Adapter restauration de la disposition des blocs jusqu’à ce qu’elle soit prête. Lisez la suite pour savoir comment utiliser cette nouvelle API et comment elle fonctionne.

Il existe plusieurs façons de garantir une position de défilement correcte que vous pourriez avoir adoptée. La meilleure consiste à vous assurer que vous définissez toujours les données sur le Adapter avant le premier passage de mise en page en mettant en cache les données que vous souhaitez afficher en mémoire, dans un ViewModel ou dans un référentiel. Si cette approche n’était pas possible, d’autres solutions étaient soit plus compliquées, comme éviter de Adapter sur le RecyclerView, ce qui peut entraîner des problèmes avec des éléments tels que des en-têtes ou une mauvaise utilisation LayoutManager.onRestoreInstanceState API.

le recyclerview:1.2.0-alpha02 est une nouvelle Adapter qui vous permet de définir une politique de restauration de l’état (via le StateRestorationPolicy enum). Cela a 3 options:

  • ALLOW – le défaut état, qui restaure la RecyclerView indiquer immédiatement, lors de la prochaine mise en page
  • PREVENT_WHEN_EMPTY – restaure le RecyclerView indiquer uniquement lorsque l’adaptateur n’est pas vide (adapter.getItemCount() > 0). Si vos données sont chargées en mode asynchrone, le RecyclerView attend que les données soient chargées et seulement alors l’état est restauré. Si vous avez des éléments par défaut, comme des en-têtes ou des indicateurs de progression de chargement dans le cadre de votre Adapter, alors vous devez utiliser le PREVENT , sauf si les éléments par défaut sont ajoutés à l’aide de MergeAdapter (en savoir plus ici). MergeAdapter attend que tous ses adaptateurs soient prêts et seulement alors il restaure l’état.
  • PREVENT – toute restauration d’état est différée jusqu’à ce que vous définissiez ALLOW ou PREVENT_WHEN_EMPTY.

Définissez la stratégie de restauration d’état sur l’adaptateur comme suit: