2011年4月27日水曜日

【Android】 cancelableがfalseなDialogをタイムアウトでcancelするスニペット

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
ほぼ、そういう機会は無いだろうなーと思いますが、
ProgressDialogなどをshowした後、一定時間経ったらタイムアウトさせてcancelさせたい場合があるかもしれません。
さらにダイアログはcancelableがfalseで、ユーザからキャンセルは出来ない様にしたいとか。
そういうまぁなかなか無い事をしたい時に使えるスニペットです。

モノ


以下のクラスをどっかに作ります。


public class DialogTimeout{
 public void setTimeout(final Dialog dialog, long timeout){
  new Handler().postDelayed(new Runnable() {
   @Override
   public void run() {
    if(dialog.isShowing()){
     dialog.cancel();
    }
   }
  }, timeout);
 }
}

あとはsetTimeoutでDialogとタイムアウトの時間を指定すると、指定時間経過後にcancelが実行され、
onCancelListenerのonCancelが呼ばれます。
cancelを呼ぶ際は、isShowing()でダイアログがまだ有効か確認しています。

使い方


まぁ普通にshowとかした後タイムアウトの時間指定して突っ込むだけ。

ProgressDialog dialog = new ProgressDialog(this);
        dialog.setIndeterminate(true);
        dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        dialog.setCancelable(false);
     dialog.setTitle("ダイアログ");
        dialog.setMessage("処理中だよー");
        dialog.setOnCancelListener(new OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
             Toast.makeText(getBaseContext(), "タイムアウトしたっぽい", Toast.LENGTH_SHORT).show();
                finish();
            }
        });
        dialog.show();
        DialogTimeout.setTimeout(dialog, 5000);

まとめ


タイトルがルー大柴な気がする。

1 件のコメント:

  1. こちらの記事、まさにドンピシャで非常に助かりました!

    返信削除