448 votes

Comment actualiser la liste de lecture Android?

Je veux actualiser un Android ListView après avoir ajouté / supprimé des données dynamiques.

Quelqu'un peut-il me dire comment y parvenir?

543voto

Christopher Orr Points 58514

Appelez notifyDataSetChanged() sur votre Adapter .

Certains détails supplémentaires sur comment / quand appeler notifyDataSetChanged () peuvent être consultés dans cette vidéo d'E / S Google .

212voto

breceivemail Points 8024

Aussi, vous pouvez utiliser ceci:

 myListView.invalidateViews();
 

prendre plaisir!

157voto

hcpl Points 5759

S'il vous plaît ignorer tous les invalidate(), invalidateViews(), requestLayout(), ... les réponses à cette question.

La bonne chose à faire (et heureusement aussi marqué comme réponse) est d'appeler notifyDataSetChanged() sur votre Carte.

Dépannage

Si l'appel de notifyDataSetChanged() ne marche pas à tous les méthodes de présentation ne va pas aider non plus. Croyez-moi, la liste a été correctement mis à jour. Si vous ne parvenez pas à trouver la différence, vous devez vérifier où les données de votre carte.

Si ce n'est qu'une collection vous êtes à la conserver dans la mémoire de vérifier que vous avez bien supprimé l'élément de la collection avant d'appeler la notifyDataSetChanged().

Si vous travaillez avec une base de données ou un service backend, vous aurez pour appeler la méthode pour récupérer les informations de nouveau (ou de manipuler la mémoire de données) avant d'appeler la notifyDataSetChanged().

Le truc, c'est ce notifyDataSetChanged ne fonctionne que si le jeu de données a changé. Donc, c'est l'endroit à regarder si vous ne trouvez pas de changements à venir à travers. Débogage en cas de besoin.

Thread d'INTERFACE utilisateur

Il est vrai que ce doit être appelée à partir de la thread de l'INTERFACE utilisateur. D'autres réponses d'avoir des exemples sur la façon d'atteindre cet objectif. Cependant ce n'est nécessaire que si vous travaillez sur cette information provenant de l'extérieur de la thread de l'INTERFACE utilisateur. C'est à partir d'un service ou d'un thread d'INTERFACE utilisateur. Dans les cas simples, vous serez mise à jour de vos données à partir d'un clic sur un bouton ou une autre activité/fragment. Donc, toujours dans le thread de l'INTERFACE utilisateur. Pas besoin de toujours pop que runOnUiTrhead.

Plus D'Informations

Encore un joli post sur la puissance de listViews se trouve ici: http://www.vogella.com/articles/AndroidListView/article.html

42voto

Marckaraujo Points 1806

Appelez runnable quand vous voulez:

 runOnUiThread(run);
 

OnCreate (), vous définissez votre thread exécutable:

 run = new Runnable(){
                 public void run(){
                            //reload content
                        arraylist.clear();
                        arraylist.addAll(db.readAll());
                        adapter.notifyDataSetChanged();
                        listview.invalidateViews();
                        listview.refreshDrawableState();
                 }
            };
 

9voto

freehacker Points 107

Si vous utilisez SimpleCursorAdapter, essayez d'appeler requery () sur l'objet Cursor.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X