Androidアプリ開発 プログレスダイアログの実装

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

Androidアプリを開発していて、少し実装に手間取ってしまったことを備忘録がてらここに書いておこうと思います。今回手間取った内容は、プログレスダイアログの実装です。プログレスダイアログというのは、下の画像のようなダイアログで、時間のかかる処理を行っている間、画面に「処理中である」ということを示す画面を表示し、処理が終了したらそのまま消えるダイアログのことです。時間のかかる処理といえば、多くは「ウェブ接続」を行い、そこでデータを取得しデータをパースし、必要な情報をディスプレイ上に表示する、などが存在しますね。ではその実装方法です。

progressDialog

実装方法

実装の簡単な説明

多くのJavaアプリケーションの場合は、「通信中」などのプログレスダイアログを表示した上で、別スレッドを起動しスレッド上で実際の通信処理を行います。Androidアプリ開発の場合、Activity自身のスレッドのみがそのビューを変更できる、という制約があります。そのため、Android開発では、Handlerクラスとそのpost()メソッドを利用します。

ActivityにRunnableを実装(implements)し、run()メソッドにはダイアログを閉じる処理を書きます。また、時間のかかる処理を実行するスレッド(Thread)には、handlerオブジェクトと、Runnableを実装したActivityを渡します。続いて、Threadクラスのrun()メソッドの最後で、handler.post(activity);などとすることで、ダイアログを閉じることが可能になります。

言葉で説明しても分かりにくいと思うので、以下の例を参考にしてみてください。なお、必要なインポートファイルなど省略しています。

サンプルソースコード

public class ClassName extends Activity implements Runnable {
    private ProgressDialog progressDialog;

    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            // 通信中ダイアログを表示させる。
            progressDialog = new ProgressDialog(this);
            progressDialog.setTitle("通信中");
            progressDialog.setMessage("データ取得中・・・");
            progressDialog.setIndeterminate(false);
            progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            progressDialog.show();

            Thread thread = new Thread(this);
            thread.start();
        }

    public void run() {
        // 時間のかかる処理をここに記述。

        handler.sendEmptyMessage(0);
    }

    private Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            // 処理終了時の動作をここに記述。

            // プログレスダイアログ終了
            progressDialog.dismiss();
        }
    };
}

まとめ

Androidアプリ開発をしていて、プログレスダイアログを表示させた場面は多々発生するのですが、今持っている書籍には表示方法について何も書かれていなかったので、少しの間諦めていましたが、実際にウェブ上をいろいろ歩き回っていると情報は多くあるのですね。

参考サイト

関連記事

人気ブログランキングへ

[PR]

トラックバック

http://yamablo.com/2009/12/01-093135.php/trackback

コメント


Get Adobe Flash playerPlugin by wpburn.com wordpress themes