ProgressDialog でのプログレスバーの表示

時間のかかる処理を行っているときに、あとどのくらいで処理が終わるか予想できないとき、予想が外れやすいときは、 グルグルまわる画像などをユーザーにみせて・・・

「今は処理中です! あとどのくらいで終わるか、ちょっとわからないんだけど・・・とりあえずフリーズしているわけではなくて動いてますよ!」

と伝えるのは良いことです。

そうじゃないと、動きが止まったらユーザーは電源を落とすかもしれないですしね。

グルグル画像で良い場合は、 "Loading" メッセージを表示する ProgressDialog の使い方 の方法で OK です。

ここでは進捗が分かる場合に、ユーザーに現在何パーセントですよ! ということを伝えるためのプログレスバーを表示する方法を説明します。

動くプログラムは AsyncTask を利用した非同期処理 で利用したものと同一です。サンプルコードを動かすにはそちらをご覧ください。

ProgressDialog でのプログレスバーの表示

ProgressDialog に処理の進捗状況を示すプログレスバーを表示すると、次のような見栄えになります。

AsyncTask と 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 です。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Android 開発入門