我正在尝试创建的是一个简单的进度条,可以加载~10秒。 所以我想要的是像这样的for循环:
for(int i = 1; i <= 100; i++) {
progressDialog.setProgress(i);
//100ms delay
}
由于
答案 0 :(得分:3)
您可以将Async Task用于此目的
preExecute()方法中的将循环索引初始化为0;
在后台进程中休眠线程10秒,然后调用sendUpdate方法发送进度
在postExecute更新进度条中进入参数。
答案 1 :(得分:1)
以下代码可能对您有所帮助。
public void startProgress(View view) {
// Do something long
Runnable runnable = new Runnable() {
@Override
public void run() {
for (int i = 0; i <= 10; i++) {
final int value = i;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable() {
@Override
public void run() {
progressDialog.setProgress(value);
}
});
}
}
};
new Thread(runnable).start();
}
答案 2 :(得分:0)
最好使用AsyncTask,它可以在没有任何循环的情况下处理进度。
答案 3 :(得分:0)
不显式创建新线程的较短解决方案如下所示:
final Handler handler = new Handler(Looper.getMainLooper());
final int sleepMs = 100;
for (int i = 1; i <= 100; ++i) {
handler.postDelayed(() -> progressDialog.setProgress(value), i * sleepMs);
}