Android 処理待ちダイアログの設定(ProgressDialog)
Androidでの開発で、時間がかかる処理を行っている時に処理中であることや進捗状態を示す為にProgressDialogを使用する。
今回はシンプルなくるくる回るタイプのダイアログの設定を説明します。
Handlerを作ったスレッドで実行を可能にする為、Runnableインターフェイスを実装する。
クラス変数にプログレスダイアログとスレッドを宣言する。
public class XXXX extends Activity implements Runnable { private static ProgressDialog waitDialog; private Thread thread;
任意の処理時にプログレスダイアログの設定・表示を行い、スレッドを実行する。
private void AAA(){ // プログレスダイアログを開く処理を呼び出す。 setWait(); } private void setWait(){ // プログレスダイアログの設定 waitDialog = new ProgressDialog(this); // プログレスダイアログのメッセージを設定します waitDialog.setMessage("ネットワーク接続中..."); // 円スタイル(くるくる回るタイプ)に設定します waitDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); // プログレスダイアログを表示 waitDialog.show(); thread = new Thread(this); /* show()メソッドでプログレスダイアログを表示しつつ、 * 別スレッドを使い、裏で重い処理を行う。 */ thread.start(); } @Override public void run() { try { //ダイアログがしっかり見えるように少しだけスリープ //(nnn:任意のスリープ時間・ミリ秒単位) Thread.sleep(nnn); } catch (InterruptedException e) { //スレッドの割り込み処理を行った場合に発生、catchの実装は割愛 } //run内でUIの操作をしてしまうと、例外が発生する為、 //Handlerにバトンタッチ handler.sendEmptyMessage(0); } private Handler handler = new Handler() { public void handleMessage(Message msg){ // HandlerクラスではActivityを継承してないため // 別の親クラスのメソッドにて処理を行うようにした。 YYY(); // プログレスダイアログ終了 waitDialog.dismiss(); waitDialog = null; } }; private void YYY(){ // 処理待ち中に行う処理をここに実装 }
WebViewでの設定
WebView内でページを遷移させる場合、
読込中にプログレスダイアログを表示させる場合はWebViewに対してWebViewClientを継承し、
onPageStarted()とonPageFinished()にてダイアログの表示切替を行う。
WebView web = (WebView)findViewById(R.id.webPage); // APP内でweb画面遷移 web.setWebViewClient(new WebViewClientLinkSet());
WebViewClient継承クラスの設定
private class WebViewClientLinkSet extends WebViewClient { // 読み込み開始時に呼び出されるメソッドをオーバーライドし、 // そのなかでプログレスダイアログを画面上に表示を行う。 @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); waitDialog = new ProgressDialog(view.getContext()); waitDialog.setMessage("ネットワーク接続中..."); waitDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); waitDialog.show(); } // 読み込み終了時に呼び出されるメソッドをオーバーライドし、 // そのなかでプログレスダイアログの消去を行う。 @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); // ページ読み込み終了メソッドが複数回呼ばれることがあるため // 存在チェックを行う if(waitDialog != null){ waitDialog.dismiss(); waitDialog = null; } } // 読み込み失敗時に呼び出されるメソッドをオーバーライドし、 // エラーダイアログを画面に表示させる。 @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { AlertDialog.Builder dialog = new AlertDialog.Builder(view.getContext()); dialog.setTitle("エラータイトル"); dialog.setMessage("エラーメッセージ"); dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); if(waitDialog != null){ waitDialog.dismiss(); waitDialog = null; } dialog.setCancelable(false).create().show(); } }
参考文献
ProgressDialogの使い方メモ
プログレスダイアログ(ProgressDialog)を使用するには
AndroidのHandlerとは何か?
Webブラウザ(WebView)を利用する(2)
スペシャリスト
やまま yamama
マンガとアニメとゲームから錬成された宇宙大好きエンジニア。 軌道エレベーターで行ける静止軌道上のコロニーに住まいを移し、ゲームやってマンガ読んでアニメ見て爆睡、ゲームやってマンガ読んでアニメ見て爆睡、という生活を夢見ながら今日もコードを書き続けるのだった。
TAG
- Android
- AWS
- Bitrise
- CodePipeline
- Firebase
- HTML
- iOS
- IoT
- JavaScript
- KPI
- Linux
- Mac
- Memcached
- MGRe
- MGReのゆるガチエンジニアブログ
- MySQL
- PHP
- PICK UP
- PR
- Python
- Ruby
- Ruby on Rails
- SEO
- Swift
- TIPS
- UI/UX
- VirtualBox
- Wantedly
- Windows
- アクセス解析
- イベントレポート
- エンジニアブログ
- ガジェット
- カスタマーサクセス
- サーバ技術
- サービス
- セキュリティ
- セミナー・展示会
- テクノロジー
- デザイン
- プレスリリース
- マーケティング施策
- マネジメント
- ラボ
- リーンスタートアップ
- 企画
- 会社紹介
- 会社紹介資料
- 勉強会
- 実績紹介
- 拡張性
- 採用
- 日常
- 書籍紹介
- 歓迎会
- 社内イベント
- 社員インタビュー
- 社長ブログ
- 視察
- 開発環境