首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android ProgressDialog 顯示不出進度條?缺少這關鍵步驟

     編輯:程式設計綜合問答

問題現象

使用 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();

關鍵點總結

  1. setProgressStyle(STYLE_HORIZONTAL):才會顯示進度條而非旋轉圖示
  2. setMax():定義進度總量
  3. runOnUiThread / Handler:進度更新必須在主執行緒
  4. incrementProgressBy():遞增進度,配合迴圈使用

記住:對話框只是顯示器,進度資料必須由背景任務主動推送更新。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved