Android 処理待ち・進行状況表示ダイアログの設定(ProgressDialog)

Android 処理待ち・進行状況表示ダイアログの設定(ProgressDialog)

前回記述したProgressDialogより、今回は進行状況を表示させる場合の設定について説明します。

wait2

前回と同様、Runnableインターフェイスを実装し、
クラス変数にプログレスダイアログとスレッドを宣言する。

public class Terms extends Activity implements Runnable {
private static ProgressDialog waitDialog;
private Thread thread;
private boolean isProgressEnd = false;
private boolean isErr = false;

任意の処理時にプログレスダイアログの設定・表示を行い、スレッドを実行する。

private void setWait(){
//プログレスダイアログの設定
waitDialog = new ProgressDialog(this);
waitDialog.setMessage("注文データを送信しています");
// 水平スタイルに設定
waitDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

// indeterminate(不確定モード)モードにするかの設定
// trueにすると、全体の時間がまだ分かってないときに「ねじねじ」で表示する
waitDialog.setIndeterminate(false);

waitDialog.setMax(100); // 最大値の設定
waitDialog.incrementProgressBy(0); // セカンダリ値の設定
waitDialog.setCancelable(false); // キャンセル設定

// ProgressDialog の Cancel ボタン
waitDialog.setButton(
DialogInterface.BUTTON_NEGATIVE,
"Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// ProgressDialog をキャンセル
dialog.cancel();
//スレッドの破棄
thread.stop();
thread = null;
isProgressEnd = false;
isErr = false;
}
}
);

isProgressEnd = false;
waitDialog.show();

thread = new Thread(this);
// show()メソッドでプログレスダイアログを表示しつつ、
// 別スレッドを使い、裏で重い処理を行う。
thread.start();
}

@Override
public void run() {
int count = 0;
Thread thisThread = Thread.currentThread();
while (thisThread == thread) {
// 一定時間毎に Progress Bar を進める
// よって正確な進行状況かは疑問(・・・汗)
waitDialog.setProgress(count++);
try {
Thread.sleep(nnn);
} catch (InterruptedException e) {

}
if (count >= waitDialog.getMax() || isProgressEnd) {
// Progress が完了
waitDialog.setProgress(waitDialog.getMax());
break;
}
}

handler.sendEmptyMessage(0);
}

private Handler handler = new Handler() {
public void handleMessage(Message msg) {
// 処理終了時の動作をここに記述。
YYY();

// プログレスダイアログ終了
waitDialog.dismiss();

//エラー判定
if(isErr){
//エラー処理
}
}
};

private void YYY(){
// 処理待ち中に行う処理をここに実装

//スレッドの終了
isProgressEnd = true;
thread = null;
}

参考文献
UIコンポーネント/ProgressDialog
ProgressDialog を使ってみた

TAG

  • このエントリーをはてなブックマークに追加
やまま
スペシャリスト やまま yamama

マンガとアニメとゲームから錬成された宇宙大好きエンジニア。 軌道エレベーターで行ける静止軌道上のコロニーに住まいを移し、ゲームやってマンガ読んでアニメ見て爆睡、ゲームやってマンガ読んでアニメ見て爆睡、という生活を夢見ながら今日もコードを書き続けるのだった。