RecyclerView store / restauration de l'état entre les activités
Je suis la migration de mon ListViews à RecyclerViews. Avec listviews j'ai utilisé la technique décrite ici pour stocker et restaurer la position de défilement entre les activités.
Comment faire la même chose avec RecyclerViews? le RecyclerView.onSaveInstanceState()
semblent avoir protected
d'accès, ne peut donc pas être utilisé directement.
InformationsquelleAutor khusrav | 2015-01-30
Vous devez vous connecter pour publier un commentaire.
Ok, donc pour répondre à ma propre question. Si je comprends bien, depuis qu'ils ont découplé de la mise en page de code et la vue du recyclage de code (d'où le nom), le composant responsable de la tenue de la disposition de l'état (et de restauration) est aujourd'hui le
LayoutManager
utilisé dans votre recyclerview.Ainsi, pour stocker l'état vous utilisez le même modèle, mais sur le layout manager et pas le recyclerview:
Restauration de l'état dans le
onRestoreInstanceState()
:Puis mettre à jour le LayoutManager (je n'en
onResume()
):onRestoreInstanceState()
n'est jamais appelé ?state.getParcelable
avec le paramètreLIST_STATE_KEY
plutôt que"myState"
?Fragment
, au lieu de restaurer l'état suronRestoreInstanceState
, vous pouvez faire en toute sécurité suronActivityCreated
.J'ai trouvé une meilleure solution - cette solution présente les avantages suivants :
onRestoreInstanceState()
n'est pas appelé !!)CODE
onPause()
? À cette époque, l'activité n'est pas détruit. L'état est intact. Il n'y a rien à restaurer.OnSaveInstanceState()
n'est pas appelée.Utiliser ce code dans
onPause()
etonResume()
de sauvegarder et de restaurer la position de défilement-Que ma solution, il restaure à la fois des articles et RecyclerView position
1) enregistrer recycleur de l'état d'affichage dans la méthode onSaveInstanceState
2) cochez la Case Bundle savedInstanceState dans la méthode onCreate
3) Restaurer recycleur de données d'affichage si l'écran a été tourné
Lorsque vous utilisez
recyclerView.getLayoutManager().onSaveInstanceState()
n'oubliez pas de vérifier pour null:Considérant que vous avez défini une RecyclerView (
mRecyclerView
) et un LayoutManager (mLayoutManager
) dans votre code et tout fonctionne bien jusqu'à présent, la solution à la sauvegarde de la position (mPosition
) de votre RecyclerView ressemble à ceci:Les Variables et les constantes utilisées:
Dans
onPause
méthode:Dans
onResume
méthode:Dans
onSaveInstanceState
méthode:Dans
onRestoreInstanceState
méthode: