Android, ProgressDialog で進捗状況ダイアログを表示する

ProgressDialog を表示し、Timer で10秒経過すると task が実行される。
task では、ProgressDialog が消されて、Handler から結果メッセージを表示させる Runnable を呼ぶ。
View の処理はメインスレッドでなければ実行できないので Handler を使ってメインスレッドにコールバック処理をさせる。

メソッド内部の無名クラスからメソッドのローカル変数を参照するには、そのローカル変数を final 宣言する。

public class ProgressExampleActivity extends Activity implements OnClickListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button startButton = (Button) findViewById(R.id.start_button);
        startButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.start_button:
            start();
            break;
        }
    }

    private void start() {
        final Handler handler = new Handler();
        final Timer timer = new Timer();
        final ProgressDialog progressDialog = new ProgressDialog(this);

        progressDialog.setTitle("処理中");
        progressDialog.setMessage("しばらくお待ちください。");
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialog.setCancelable(true);
        progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                timer.cancel();
            }
        });

        TimerTask task = (new TimerTask() {
            @Override
            public void run() {
                progressDialog.dismiss();
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        setResult(timer);
                    }
                });
            }
        });

        progressDialog.show();
        timer.schedule(task, 1000 * 10);
    }

    private void setResult(Timer timer) {
        TextView tv = (TextView) findViewById(R.id.result_msg);
        tv.setText("task is done.");
        timer.cancel();
    }
}

Android ProgressDialog Example Screenshot

Google Androidプログラミング入門
江川 崇 竹端 進 山田 暁通 麻野 耕一 山岡 敏夫 藤井 大助 藤田 泰介 佐野 徹郎
アスキー・メディアワークス
売り上げランキング: 10779
«
»