コード例

Android用語集

カテゴリー: Dialogクラス  閲覧数:445 配信日:2014-02-11 07:34


例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>