かなり長時間実行される更新プロセスを処理する 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%" が表示されることです。
次に、数値を非表示にするために and を使用してみsetProgressNumberFormat()
ましsetProgressPercentFormat()
たが、これらはいずれも 3.0 未満の Android ではサポートされていません。
次にsetProgressStyle()
、STYLE_SPINNER と STYLE_HORIZONTAL を切り替えるために使用しようとしました —setProgressStyle()
私の呼び出しでonProgressUpdate()
アプリがクラッシュするようです。
進行状況ダイアログを確定モードと不確定モードの間で切り替える簡単な方法はありますか?