[问题]请教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