[問題]請教ProgressBar的程式設計

作者: greenlinux (GreenLinux)   2018-07-01 22:13:54
請教各位:
我需要設計 app, 利用 progressbar 去顯示過程的進度
例如我要一邊 print log 一邊顯示過程:
private Runnable runnable = new Runnable() {
@Override
public void run() {
try {
while (true) {
Thread.sleep(100);
runOnUiThread(new Runnable() {
@Override
public void run() {
myProgressBar.setProgress(myProgress+=1);
}
});
}
} catch (InterruptedException e) {
}
}
};
public void onPrintLogClick(View view) {
myProgressBar.setVisibility(View.VISIBLE);
Thread t = new Thread(runnable);
t.start();
for (int i=0; i<100; i++){
Log.v(TAG, "NOW "+i);
try{
Thread.sleep(10);
}catch (InterruptedException e) {
e.printStackTrace();
}
}
}
但不管怎樣寫, 我都是 print Log 完後, progressbar會從0 直接跳至100
不能做到一邊print, 一邊更新UI上的 progressbar..
請教各位, 到底要怎樣安排才可完成一邊工作一邊更新UI..?
THANKS
作者: erty0402 (缺副駕駛)   2018-07-01 22:44:00
用handler.sendmessagedelay,直接用sleep會讓mainthread睡著
作者: greenlinux (GreenLinux)   2018-07-01 23:57:00
e大,你是指要拿掉Thread.sleep就好?用sendMessageDelay做到 sleep 效果? THANKS
作者: LZN (秋)   2018-07-02 09:11:00
可以嘗試用AsyncTask
作者: andy2151 (阿鴻)   2018-07-02 09:14:00
你onPrintLogClick裡面的迴圈根本不用啊而且你這裡的迴圈下sleep是在main thread sleep要印出log直接在runnable印出即可
作者: greenlinux (GreenLinux)   2018-07-02 10:49:00
to Andy大,但我想同步更新UI上的ProgreesBar將 For loop 寫在runnable 可同時更新UI嗎?THANKS
作者: zerofinal (人生~)   2018-07-02 14:43:00
https://goo.gl/cbnEf9 參考一下別人的範例喔~
作者: andy2151 (阿鴻)   2018-07-03 09:36:00
原程式不動你把for迴圈整個拿掉 應該就正常了
作者: y3k (激流を制するは静水)   2018-07-03 19:47:00
你那個for把UI Thread卡死了

Links booklink

Contact Us: admin [ a t ] ucptt.com