2011-03-07 3 views
0

J'ai une liste de 4 articles, j'ai utilisé listview. Je veux changer une chaîne dynamiquement à la réception d'un événement interne. Je vois que lorsque je reçois l'événement, je règle la chaîne correctement, puis j'appellenotifyDataSetChanged() ne met pas à jour le listview

mAdapter.notifyDataSetInvalidated(); 
mAdapter.notifyDataSetChanged(); 

mais la liste n'est pas mise à jour.

+1

S'il vous plaît fournir plus de code source pour le même. – Reno

Répondre

2

J'ai eu la même expérience. La cause était que l'adaptateur de liste était en train de se mettre à jour sur le mauvais thread, c'est-à-dire pas sur le thread de l'interface utilisateur. Ceci est facilement résolu en changeant les données de l'adaptateur sur le thread d'interface utilisateur à travers (comme je l'ai trouvé sur d'autres postes):

runOnUiThread(new Runnable() { 
    public void run() { 
     // code that changes the list adapter data 
    } 
}); 

Bien sûr, vous pouvez toujours créer une classe (intérieure) qui implémente Runnable qui est fourni avec la liste adaptateur et données à ajouter, insérer, etc.

Remarque: l'appel de notifyDataSetInvalidated() ou notifyDataSetChanged() ne sera pas nécessaire car il est appelé par défaut, sauf si vous l'avez désactivé explicitement avec setNotifyOnChange (false);

0

Je pense que notifyDataSetChanged ne fonctionne que si vous utilisez les fonctions add (ou insert), remove ou clear sur l'adaptateur. Vous pouvez reconstruire l'adaptateur de liste pour forcer l'actualisation de listView. Excuse-moi pour mon mauvais anglais

Questions connexes