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);
まとめ
タイトルがルー大柴な気がする。
