如何在确定和不确定之间切换进度对话框?

我有一个AsyncTask来处理一个合理的长时间运行的更新过程,我想要一个进度对话框,按顺序显示:

  1. “开始更新”(短暂)
  2. “下载更新”(没有进度条 – 我不知道下载之前更新会有多大)
  3. “保存更新数据”(0-100%的进度条)
  4. “保存更新图像”(进度条0-100%)
  5. “更新完成”(在对话消失之前一秒钟)

我在切换确定(进度条显示)和不确定(进度条)之间的进度对话框时遇到问题。

我的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()切换确定 – 问题在于进度对话框在对话框底部显示“NaN”和“0%”,即使在不确定模式下没有“bar”。

然后,我尝试使用setProgressNumberFormat()setProgressPercentFormat()来隐藏数字 – 但是这些在Android 3.0以下都不支持。

然后我尝试使用setProgressStyle()在STYLE_SPINNER和STYLE_HORIZONTAL之间切换 – 在onProgressUpdate()调用setProgressStyle() onProgressUpdate()似乎导致我的应用程序崩溃。

有没有简单的方法来切换确定和不确定模式之间的进度对话框?

Solutions Collecting From Web of "如何在确定和不确定之间切换进度对话框?"