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);
まとめ
タイトルがルー大柴な気がする。
こちらの記事、まさにドンピシャで非常に助かりました!
返信削除