使用 ProgressDialog.show() 顯示對話框,並啟動背景執行緒處理任務,但對話框只顯示「Please Wait...」文字,完全看不到進度條動畫。
程式碼僅建立對話框與執行緒,兩者之間完全沒有關聯。執行緒跑完也不會通知對話框更新進度,自然看不到效果。
// 1. 建立可顯示進度的對話框
ProgressDialog mProgressDialog = new ProgressDialog(MainActivity.this);
mProgressDialog.setIcon(R.drawable.icon);
mProgressDialog.setTitle("處理中...");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // 關鍵:水平進度條樣式
mProgressDialog.setMax(100); // 設定最大值
mProgressDialog.setButton("確定", (dialog, which) -> { /* 完成邏輯 */ });
mProgressDialog.setButton2("取消", (dialog, which) -> { /* 取消邏輯 */ });
mProgressDialog.show();
// 2. 背景執行緒模擬耗時任務並即時更新進度
new Thread(() -> {
int progress = 0;
while (progress < 100) {
try {
Thread.sleep(100); // 模擬工作
progress++;
// 3. 必須在 UI 執行緒更新進度
runOnUiThread(() -> mProgressDialog.incrementProgressBy(1));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
runOnUiThread(() -> mProgressDialog.dismiss());
}).start();
記住:對話框只是顯示器,進度資料必須由背景任務主動推送更新。