プログレスダイアログ (ProgressDialog)

何かの処理を実行中に表示するダイアログには、プログレスダイアログ (ProgressDialog) クラスを使用します。
この使い方を説明します。

ソースの定義

プログレスダイアログを使用するには、ソースファイルに以下のように記述します。
ここでは、ボタン押下でプログレスダイアログを表示し、スレッド処理を実行、実行終了後にプログレスダイアログを閉じる。という例を示します。

package jp.sample.progressdlgsample;

import jp.sample.progressdlgsample.R;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ProgressDlgSampleActivity extends Activity {
    /** プログレスバー */
	private ProgressDialog mPrgDlg;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // 実行中ダイアログの生成・初期化
        mPrgDlg = new ProgressDialog(this);
        mPrgDlg.setTitle("スレッド実行中");
        mPrgDlg.setMessage("しばらくお待ちください。");
        mPrgDlg.setIndeterminate(false);
       	mPrgDlg.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
       	mPrgDlg.setMax(100);	// 最大値
       	mPrgDlg.incrementProgressBy(0);	// 初期値

        // ボタンクリック処理
        Button btnStart = (Button)findViewById(R.id.btnStart);
        btnStart.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                // ダイアログ表示
                mPrgDlg.show();

                // スレッド生成・実行
                Thread thread = new Thread(runnable);
                thread.start();
            }
        });
    }

    /**
     * スレッド処理
     */
    Runnable runnable = new Runnable() {
        public void run() {
            for (int i=0; i<100; i++) {
                try {
                    Thread.sleep(100);
                    mPrgDlg.setProgress(i+1);
                } catch (InterruptedException e) {
                    // TODO 自動生成された catch ブロック
                    e.printStackTrace();
                }
            }

            Message msg = new Message();
            msg.arg1 = 0;
            handler.sendMessage(msg);
        }
    };

    /**
     * スレッドの終了を受信するハンドラ
     */
    private final Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg)
        {
            // 実行中ダイアログを閉じる
            mPrgDlg.dismiss();
        };
    };
}

※ 設定する文字列は、本来 string.xml に定義すべきですが、説明を簡単にするために直接記述しています。


各メソッドの意味は以下の通りです。

メソッド 説明
setTitle ダイアログのタイトルバーに表示する文字を設定
setMessage 表示するメッセージを設定
setProgressStyle プログレスダイアログのスタイルの設定
STYLE_HORIZONTAL:水平のプログレスバー
STYLE_SPINNER:円が回るタイプ
setMax プログレスバーの最大値 (Style が STYLE_HORIZONTAL の場合のみ設定)
show プログレスダイアログを表示する。
dismiss プログレスダイアログを閉じる。