2011-09-04 4 views
2

Je pensais que je voudrais partager un code étrange avec vous tous pour voir si j'ai fait quelque chose d'aveuglant mal. J'ai passé un gestionnaire à un thread d'arrière-plan pour mettre à jour l'interface utilisateur de la mainactivity (je sais que ce n'est pas le meilleur moyen, mais c'est censé être une application de test rapide et sale) Fondamentalement, le code ajoute un message sur le textview, comme ceci:Android Handler ne pas mettre à jour textview

    uiHandler.post(new Runnable() { 
        @Override 
        public void run() { 
         Log.i("Text2Server", "Updating log with: " + logput); 
         logTextView.append(logput); 
        } 
       }); 

Cela se produit chaque fois qu'un message UDP est reçu, le journal est sorti à chaque fois parfaitement, mais le textview que des mises à jour sur le premier message, ou parfois pas du tout.

Je suppose que c'est quelque chose à voir avec mon textview mais je pensais que je verrais si quelqu'un a vu quelque chose de similaire?

Merci!

P.S. J'ai essayé les bases, comme l'utilisation setText() au lieu de append(), etc.

+0

ayant également cette question. Il fonctionne sur la première charge mais en rechargeant l'activité il ne fonctionne plus. – Zammbi

Répondre

0

-t-il dans la sortie "Text2Server", "Updating log with: " + logput LogCat? Ce runnable est placé dans la file d'attente et sera exécuté plus tard lorsque le thread attaché est exécuté.

Peut-être, le gestionnaire n'a pas accès au thread ui, cette hypothèse peut également être erronée.

Essayez une autre façon.

instancier le gestionnaire:

Handler handler = new Handler(){ 

     @Override 
     public void handleMessage(Message msg) {   
     String logPutFromThread=msg.getData().getString("somekey"); 
      Log.i("Text2Server", "Updating log with: " + logPutFromThread); 
      logTextView.append(logPutFromThread); 
     } 

    }; 

et du Runnable du fil ne

Runnable updateActivityUi = new Runnable(){ 

     @Override 
     public void run() { 

     //do something before you send the message 
       Message msg = new Message(); 
       msg.peekData().putString("somekey", logput) 
       handler.sendMessage(msg) 


     }}; 
+0

Ouais, le journal est affiché et la textview ne se met pas à jour. C'est étrange. –

+0

Avez-vous essayé la façon dont je vous ai montré? –

+0

Nope, essayant maintenant bien. Affichera des résultats, désolé pour le retard. –

Questions connexes