2010-07-13 55 views
0

我试图制作一个应用程序,可以模拟两个字符的战斗,我需要更新一些他们的HP的TextViews,因为它下降。目前正在运行两个线程。他们的hp是一个全局变量,因为视图只能在主线程中修改,所以我有一个while循环运行,而线程正在继续更新文本视图。在Logcat中,您可以看到while循环运行并且hp正在下降。但是,文本视图在线程完成之后才会更新。在一个单独的线程中更新TextViews

我试过使用runnables和asynch任务来更新textviews。这些方法都不起作用。这是为什么发生?

+0

当您使用AsyncTask时,您是如何更新TextView的? – Pentium10 2010-07-13 15:58:22

+0

我在“doInBackground”中进行了计算,然后每当我想更新TextView时都调用“onProgressUpdate”。 此外,我认为问题可能与睡觉。在一个角色攻击另一个角色后,我会让线程睡眠一段时间。我使用Thread.sleep(时间)。我认为这是影响应用程序... – typon 2010-07-13 16:13:46

回答

0

要从线程更新主要活动的视图,您必须将Handler传递到线程。处理程序将允许您将消息异步发送到另一个线程。 然后通过打开消息密钥,您将能够使用消息的值更新您的视图。这是Android将数据从线程传递到线程的一种机制。

我建议您在参考资料部分的developer.android.com中查看来自lunarLander示例应用程序的代码。

下面是一个简单的例子: http://www.helloandroid.com/tutorials/using-threads-and-progressdialog

希望它能帮助。再见。

+0

是的。 NioX5199是对的!我有同样的问题。我记得我从下面的例子中学到了东西。 永远记住,主UI线程,所有活动在该线程内运行,通过android单线程模型规则,我们无法直接访问该活动内定义的另一线程的UI元素(位图,文本视图等)。 所以你使用一个处理程序。 希望这有助于:http://androidexample.com/Thread_With_Handlers_-_Android_Example/index.php?view=article_discription&aid=58&aaid=83 – user3833732 2015-02-11 10:51:55

相关问题