我有一个AsyncTask来处理一个相当长时间的更新过程,并且我想要一个进度对话框,按顺序显示:
- "开始更新"(持续一秒钟)
- "下载更新"(没有进度条 - 在下载之前我不知道更新的大小)
- "正在保存更新数据"(带有0-100%的进度条)
- "正在保存更新图像"(带有0-100%的进度条)
- "更新完成"(在对话框消失之前持续一秒钟)
我遇到了在确定模式(进度条出现)和不确定模式(没有进度条)之间切换进度对话框的问题。
以下是我的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()
和setProgressPercentFormat()
来隐藏数字,但这两个方法都不支持Android 3.0以下的版本。
然后我尝试使用setProgressStyle()
在STYLE_SPINNER和STYLE_HORIZONTAL之间切换 - 在我的onProgressUpdate()
中调用setProgressStyle()
似乎导致我的应用程序崩溃。
有没有简单的方法可以在确定模式和不确定模式之间切换进度对话框?