2012-11-08 24 views
9

我有一個的AsyncTask來處理一個相當長的運行更新的過程,我希望有一個進度對話框顯示,爲了:如何在確定和不確定之間切換進度對話框?

  1. 「開始更新」(短短的一秒鐘)
  2. 「下載更新」 (沒有進度條—我不知道下載之前更新有多大)
  3. 「保存更新數據」(帶有0-100%進度條)
  4. 「保存更新圖像」(帶有0-100%進度條)
  5. 「更新完成」(for a br即第二個對話框消失之前)

我有問題切換進度對話框確定(進度條顯示)和不確定(無進度條)之間的進度對話框。

在我的AsyncTask代碼如下:

private final ProgressDialog progressDialog; 

public SynchronizeTask(Activity activity) 
{ 
    progressDialog = new ProgressDialog(activity); 
    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
} 

protected void onPreExecute() { 
    progressDialog.setMessage("Starting update..."); 
    progressDialog.setCancelable(false); 
    progressDialog.show(); 
} 

...lots of code here... 

// all of these are set from doInBackground() 
private String progressMsg; 
private int progressTotal; 
private int progressProgress; 

protected void onProgressUpdate(Void... values) { 
    progressDialog.setMessage(progressMsg); 
    if (progressTotal > 0) { 
     progressDialog.setIndeterminate(false); 
     progressDialog.setMax(progressTotal); 
     progressDialog.setProgress(progressProgress); 
    } else { 
     progressDialog.setIndeterminate(true); 
     progressDialog.setMax(0); 
     progressDialog.setProgress(0); 
    } 
} 

我試圖切換確定的與setIndeterminate() —這裏的問題是,進度對話框顯示「南」和「0%」,在對話框的底部,即使在不確定模式下沒有「酒吧」。

然後,我嘗試使用setProgressNumberFormat()setProgressPercentFormat()只是爲了隱藏號碼—但這些都不支持Android 3.0以下。

然後我試着用setProgressStyle()到STYLE_SPINNER和STYLE_HORIZONTAL —調用我onProgressUpdate()似乎導致我的應用程序崩潰setProgressStyle()之間切換。

是否有任何簡單的方法來切換確定和不確定模式之間的進度對話框?

回答

3

可能是一個好主意,關閉一個進度對話框,並打開另一個不同的風格。

+1

OK,這似乎工作 - 我認爲我將無法重現「在飛行中」一個ProgressDialog,但它似乎工作正常,因爲onProgressUpdate()在UI線程上運行。我爲更新的每個新「階段」設置了一個布爾標誌「newDialog」,並且如果我在onProgressUpdate()中看到該標誌設置爲I:關閉舊對話框;用我選擇的風格(微調或水平)創建一個新的對話框;顯示新的對話框;將newDialog設置回false。謝謝你的提示。 – George

-1

您可以更改您的代碼如下:

protected void onProgressUpdate(Void... values) { 
    progressDialog.setMessage(progressMsg); 
    if (progressTotal > 0) { 
     progressDialog.setIndeterminate(false); 
     progressDialog.setProgressNumberFormat("%1d/%2d"); 
     progressDialog.setProgressPercentFormat(NumberFormat.getPercentInstance()); 
     progressDialog.setMax(progressTotal); 
     progressDialog.setProgress(progressProgress); 
    } else { 
     progressDialog.setIndeterminate(true); 
     progressDialog.setProgressNumberFormat(null); 
     progressDialog.setProgressPercentFormat(null); 
    } 
} 
相關問題