ProgressDialog
状態:-
閲覧数:1,314
投稿日:2014-02-08
更新日:2014-02-08
・画面上に進捗状況を表示するクラス
※4種類あるダイアログの一つ(タイアログはこの他に3種類ある)
※4種類あるダイアログの一つ(タイアログはこの他に3種類ある)
メソッド一覧
・ダイアログの消去
setMessage
・ダイアログに表示するメッセージの設定
setProgressStyle
・ProgressDialogのスタイル(表示スタイル)を設定
show
・ ダイアログを表示
コード例
例1
経過秒数を表示して、5秒後にダイアログを消去
・経過秒数を表示する処理のところが、メインのスレッドとは別のスレッド
▼/ProgressDialog/src/android/style/ProgressDialogActivity.java
package android.style; import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.os.Handler; public class ProgressDialogActivity extends Activity { Handler handler = new Handler(); // Handlerクラスをインスタンス化して、メインスレッドのLooperオブジェクトに関連づける ProgressDialog progressDialog; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // ProgressDialogのインスタンスを生成する progressDialog = new ProgressDialog(this); // ProgressDialogのスタイル(表示スタイル)を設定。ここでは定数STYLE_SPINNERを指定しているが、STYLE_HORIZONTALを指定すれば、進捗率をバーで表示するタイプになる progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); // ダイアログに表示するメッセージの設定 progressDialog.setMessage( "処理を実行中です..." ); // ダイアログを表示 progressDialog.show(); // 経過秒数を表示するスレッド(1) new Thread( new Runnable() { public void run() { for (int i = 1; i <= 5; i++) { // forループで、 updateProgress(i); // 経過秒数の更新処理(updateProgressメソッド)をくりかえし呼び出し } // ダイアログの消去 progressDialog.dismiss(); } }).start(); }
// 経過秒数を更新処理(2) public void updateProgress( final int val) { // 1秒待機 try { Thread.sleep(1000); } catch (InterruptedException e) { } // 別スレッド(経過秒数を表示するスレッド)の中から直接GUIを更新(setMessageメソッドの実行)は行えない。そこで、Handlerクラスを使って、GUI更新のメッセージをメッセージキューに投入 handler.post( new Runnable() { // postメソッドでメッセージをメッセージキューに投入。postメソッドの引数は、Runnableオブジェクト(メッセージとしてRunnableオブジェクトを指定)。ここでは、runメソッドに、progressDialog.setMessageの呼び出しをそのまま記述したオブジェクトを指定(GUIスレッドがメッセージをとりだし、progressDialogのsetMessageメソッドを実行) public void run() { // 経過秒数更新 progressDialog.setMessage(val + "秒経過" ); // 1秒待機後、setMessageメソッドで文字を更新 } }); } } |
・xml … レイアウト
▼/ProgressDialog/res/layout/main.xml
<?xml version= "1.0" encoding= "utf-8" ?> <LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android" android:layout_width= "fill_parent" android:layout_height= "fill_parent" android:orientation= "vertical" > <TextView android:layout_width= "fill_parent" android:layout_height= "wrap_content" android:text= "@string/hello" /> </LinearLayout> |