2010-07-13 73 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

相關問題