ProgressDialog
状態:-
閲覧数:1,246
投稿日: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>