ProgressDialog でのプログレスバーの表示
時間のかかる処理を行っているときに、あとどのくらいで処理が終わるか予想できないとき、予想が外れやすいときは、 グルグルまわる画像などをユーザーにみせて・・・
「今は処理中です! あとどのくらいで終わるか、ちょっとわからないんだけど・・・とりあえずフリーズしているわけではなくて動いてますよ!」
と伝えるのは良いことです。
そうじゃないと、動きが止まったらユーザーは電源を落とすかもしれないですしね。
グルグル画像で良い場合は、 "Loading" メッセージを表示する ProgressDialog の使い方 の方法で OK です。
ここでは進捗が分かる場合に、ユーザーに現在何パーセントですよ! ということを伝えるためのプログレスバーを表示する方法を説明します。
動くプログラムは AsyncTask を利用した非同期処理 で利用したものと同一です。サンプルコードを動かすにはそちらをご覧ください。
ProgressDialog でのプログレスバーの表示
ProgressDialog に処理の進捗状況を示すプログレスバーを表示すると、次のような見栄えになります。
これの設定方法は次の通りです。
...
@Override
protected void onPreExecute() {
dialog = new ProgressDialog(context);
dialog.setTitle("Please wait");
dialog.setMessage("Loading data...");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setCancelable(true);
dialog.setOnCancelListener(this);
dialog.setMax(100);
dialog.setProgress(0);
dialog.show();
}
@Override
protected Long doInBackground(String... params) {
...
publishProgress((i+1) * 10);
...
}
@Override
protected void onProgressUpdate(Integer... values) {
dialog.setProgress(values[0]);
}
...
}
ポイントは setProgressStyle で ProgressDialog.STYLE_HORIZONTAL を設定しているところです。これでグルグルまわるスピナーではなくプログレスバーを表示します。
進捗のアップデート
進捗のアップデートは上の例のように setProgress で進捗をセットするか、あるいは incrementProgressBy で進んだ進捗量を設定すれば OK です。