Androidアプリ開発 プログレスダイアログの実装
Androidアプリを開発していて、少し実装に手間取ってしまったことを備忘録がてらここに書いておこうと思います。今回手間取った内容は、プログレスダイアログの実装です。プログレスダイアログというのは、下の画像のようなダイアログで、時間のかかる処理を行っている間、画面に「処理中である」ということを示す画面を表示し、処理が終了したらそのまま消えるダイアログのことです。時間のかかる処理といえば、多くは「ウェブ接続」を行い、そこでデータを取得しデータをパースし、必要な情報をディスプレイ上に表示する、などが存在しますね。ではその実装方法です。
実装方法
実装の簡単な説明
多くの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アプリ開発をしていて、プログレスダイアログを表示させた場面は多々発生するのですが、今持っている書籍には表示方法について何も書かれていなかったので、少しの間諦めていましたが、実際にウェブ上をいろいろ歩き回っていると情報は多くあるのですね。
参考サイト
- kazina製ソフトあれこれ: Androidで「通信中」みたいなダイアログを表示する
- プログレスダイアログ(ProgressDialog)を使用するには – 逆引きAndroid入門
- UIコンポーネント/ProgressDialogの使い方 – Android Wiki*
- 3.3 ダイアログの作成 (ソフトウェア技術文書を勝手に翻訳)
- Android : YouTube Data API を使ったキーワード検索(ProgressDialog 編) – AIRIA
関連記事
- Androidアプリの開発【XMLレイアウト】
- Androidアプリ開発中
- Android アプリ開発時の汎用関数の紹介
- Androidアプリ開発に関する本の紹介
- Androidでタグクラウドを実装する(ソースコード付き)
[PR]
トラックバック
http://yamablo.com/2009/12/01-093135.php/trackback


