RecyclerView et refresh des données de la liste

#1

Bonjour à tous,

J’ai mis en place une liste de personnages avec un RecyclerView. La liste comporte une centaine de personnages. J’ai également mis à disposition un menu paramètre pour pouvoir filtrer cette liste et ne faire apparaître que certains personnages.
L’utilisateur choisit son type de personnage et retourne sur l’écran principal. Les données sont bien enregistrées dans le LocalPreferences et le filtre est bien récupéré dans mon adapter. Le problème c’est que ma liste ne se met pas à jour. J’ai tenté quelques recherches sur le net et j’y ai trouvé quelques fonctions comme diffUtil ou notifydatasetchanged, mais je ne suis pas certain qu’elles correspondent à mon besoin.
Quelqu’un a déjà eu le même problème ? Ou essayé de mettre en place quelque chose de similaire ?

Merci d’avance pour votre aide !

#2

Hello,

Si, le notifyDataSetChanged() est obligatoire pour faire appliquer tes nouveaux paramètres à l’adapter. Si tu fais aussi du Swift, c’est un petit peu comme le reloadData() d’une TableView.

Et ce notifyDataSetChanged() permet de refaire une boucle complète de ton adapter donc de prendre tes nouveaux paramètres en compte.
Est-ce que tes paramètres sont bien passés dans l’adapter au moment de la déclaration de ta classe ?

#3

Hello Schtipoun,
Pour l’instant, j’ai pas vraiment creusé le sujet. J’ai vu tellement de chose sur le net que je voulais voir si quelqu’un avait déjà eu ce cas là.
Je ne passe aucun paramètre, hormis le context … :wink:
Mais je vais creuser dans ce sens.
Je ne savais pas si il fallait effacer le contenu de la liste ou si l’adapter rechargeait automatiquement la nouvelle liste …
Merci pour le tuyau !!

#4

Ah oui, non effectivement, l’adapter n’efface pas la liste.
Il faut que tu appelles un clear() avant de le faire pour qu’il reparte d’une liste vide sinon, il va t’ajouter tes nouveaux éléments (avec le append, le mapNotNullTo ou peu importe la fonction que tu utilises) à la fin de ta liste déjà constituée.
Si tu as toujours des soucis, dis le moi, je dois avoir bidouillé ça dans une de mes applications. Je jetterai un coup d’oeil.

#5

Hello Schtipoun,
J’ai tenté d’utiliser le notifyDataSetChanged() mais je n’obtiens rien … :slight_smile:
En gros j’ai un settings activity où je laisse le choix du filtre à adopter et au back je reviens sur mon MainActivity.
J’ai tenté de gérer l’ordre du notifyDataSetChanged dans l’adapter mais j’ai l’impression qu’il ne repasse jamais dans les fonctions de Create, GetItems et Bind.
J’ai essayé de surcharger la fonction onStop et onResume du MainActivity sans succès.
Sais-tu dans quelle fonction et quelle activité déclencher cette ordre ?

#6

Hello,

Au moment de démarrer ta nouvelle activity via un intent, est-ce que tu as fait un startActivityForResult() pour récupérer le résultat de ton activity et donc faire des actions en conséquence ?