作者gndelo (狄樂)
看板AndroidDev
標題[問題] 利用Thread無法更新畫面
時間Sun Oct 4 23:27:53 2015
因為新學自修
做法可能有些異想天開
還是想請教一下
---------------------------------------------
這是UI:
http://goo.gl/fcS07F
主程式類別是使用Fragment建立的
然後在main方法之外自訂了一個繼承Thread的類別如下
class MaxThread extends Thread {
protected int mx, yr;
protected String mit, mxt, yrt;
protected TextView txtmi, txtmx, txtyr;
public void run(int maxc, int yourc, String mint, String maxt,
String yourt, TextView txtmin, TextView txtmax, TextView txtyour){
mx = maxc;
yr = yourc;
mit = mint;
mxt = maxt;
yrt = yourt;
txtmi = txtmin;
txtmx = txtmax;
txtyr = txtyour;
try {
for (int i = mx; i >= yr; i--){
mxt = String.valueOf(i);
txtmi.setText(mit);
txtmx.setText(mxt);
Thread.sleep(1000);
}
}
catch (InterruptedException e) {}
}
}
public class GameFragment extends Fragment {
......省略其他程式碼......
MaxThread work = new MaxThread();
work.run(maxcode, yourcode, min, max, yournum, mtxtmin, mtxtmax, mtxtyour);
我想達成的效果是當使用者沒猜中時
最大值會依序每秒減1並且顯示
但測試的結果系統的確會依應該等待的時間暫停
卻沒有每秒執行
txtmi.setText(mit);跟
txtmx.setText(mxt);的部分
直到時間結束才會顯示最後的值
不曉得是哪裡錯誤呢?
--
聽別人說施比受更有福
我倒認為吃比瘦更有福
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.25.211.162
※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1443972485.A.478.html
※ 編輯: gndelo (114.25.211.162), 10/04/2015 23:31:21
※ 編輯: gndelo (114.25.211.162), 10/04/2015 23:32:14
推 givemepass: Thread內不能更新UI 你要透過Handler去跟MainThread 10/04 23:47
→ givemepass: 去更新UI 10/04 23:48
→ ghostman: handler.post(......) 10/05 15:16
推 PttTime: Thread必須要複寫的方法是run()方法 然後啟動start() 10/06 21:05
→ PttTime: 像: (new Thread(){public void run(){todo..}}).start() 10/06 21:08
→ y3k: 同樓上 Thread要用.start()去跑 不然一樣是跑在主線視為物件 10/06 22:03
→ Msgbox: 用Handler 10/07 23:14