10

我有一个 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%”,即使在不确定模式下没有“栏”。

然后我尝试使用setProgressNumberFormat()andsetProgressPercentFormat()只是为了隐藏这些数字——但在 3.0 以下的 Android 中都不支持这些数字。

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

有没有什么简单的方法可以在确定模式和不确定模式之间切换进度对话框?

4

2 回答 2

3

关闭一个进度对话框并以不同的样式打开另一个进度对话框可能是个好主意。

于 2012-11-08T04:38:16.843 回答
-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);
    }
}
于 2018-01-10T15:50:42.967 回答