2010-07-13 6 views
0

J'essaye de faire une application qui peut simuler un combat de deux caractères et j'ai besoin de mettre à jour quelques TextViews de leur hp quand il descend. Cela se passe actuellement pendant que deux threads sont en cours d'exécution. Leur hp est une variable globale et comme les vues ne peuvent être modifiées que dans le thread principal, j'ai une boucle while en cours d'exécution pendant que les threads continuent à mettre à jour les textviews. Dans Logcat, vous pouvez voir la boucle while en cours d'exécution et le hp descendant. Cependant, les textviews ne sont pas mis à jour jusqu'à ce que les threads soient terminés.Mise à jour de TextViews dans un thread séparé

J'ai essayé d'utiliser runnables et asynch task pour mettre à jour les textviews. Aucune de ces méthodes ne fonctionne. Pourquoi cela arrive-t-il?

+0

Comment avez-vous essayé de mettre à jour TextView lorsque vous avez utilisé AsyncTask? – Pentium10

+0

J'ai fait les calculs dans "doInBackground" et ensuite appelé "onProgressUpdate" chaque fois que je voulais mettre à jour les TextViews. Aussi, je pense que le problème pourrait être de dormir. Je fais dormir le thread pendant un certain temps après qu'un personnage en attaque un autre. J'utilise Thread.sleep (time). Je pense que cela affecte l'application ... – typon

Répondre

0

Pour mettre à jour une vue de l'activité principale d'un thread, vous devrez passer un gestionnaire à votre thread. Le gestionnaire vous permettra d'envoyer des messages de manière asynchrone à un autre thread. Ensuite, en activant la touche de message, vous pourrez mettre à jour votre vue avec la valeur du message. C'est un mécanisme d'Android pour transmettre des données de Threads aux threads.

Je vous recommande de consulter le code de l'exemple d'application lunarLander de developer.android.com dans la section Ressources.

Voici un exemple plus simple: http://www.helloandroid.com/tutorials/using-threads-and-progressdialog

Hope it helps. au revoir.

+0

Oui. NioX5199 a raison! J'ai eu le même problème. Je me souviens avoir appris de l'exemple ci-dessous. Rappelez-vous toujours, fil d'interface utilisateur principal, Toutes les activités s'exécutent à l'intérieur de ce thread, Par la règle du modèle unique thread android nous ne pouvons pas accéder aux éléments de l'interface utilisateur (bitmap, textview etc.) pour un autre thread défini dans cette activité. donc vous utilisez un gestionnaire. espérons que cela aide: http://androidexample.com/Thread_With_Handlers_-_Android_Example/index.php?view=article_discription&aid=58&aaid=83 – user3833732

Questions connexes