作者greenlinux (GreenLinux)
看板AndroidDev
标题[问题]请教ProgressBar的程式设计
时间Sun Jul 1 22:13:54 2018
请教各位:
我需要设计 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
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.224.121.93
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1530454436.A.8D4.html
1F:→ erty0402: 用handler.sendmessagedelay,直接用sleep会让mainthrea 07/01 22:44
2F:→ erty0402: d睡着 07/01 22:44
3F:→ greenlinux: e大,你是指要拿掉Thread.sleep就好? 07/01 23:57
4F:→ greenlinux: 用sendMessageDelay做到 sleep 效果? THANKS 07/01 23:58
5F:→ LZN: 可以尝试用AsyncTask 07/02 09:11
6F:推 andy2151: 你onPrintLogClick里面的回圈根本不用啊 07/02 09:14
7F:→ andy2151: 而且你这里的回圈下sleep是在main thread sleep 07/02 09:15
8F:→ andy2151: 要印出log直接在runnable印出即可 07/02 09:17
9F:→ greenlinux: to Andy大,但我想同步更新UI上的ProgreesBar 07/02 10:49
10F:→ greenlinux: 将 For loop 写在runnable 可同时更新UI吗?THANKS 07/02 10:50
12F:推 andy2151: 原程式不动你把for回圈整个拿掉 应该就正常了 07/03 09:36
13F:→ y3k: 你那个for把UI Thread卡死了 07/03 19:47