android AlertDialog(アラートダイアログ)が二重に開かないようにする
今回は、androidの「AlertDialog(アラートダイアログ)が二重に開かないようにする」方法を書きます。
AlertDialog(アラートダイアログ)を消しても、また同じものがでてくることがたまにあります。
例えば、ボタンを押すと、AlertDialogが出るようにした時に、そのボタンを連打したら、何個もAlertDialogが表示されたりします。
こうなると、消すのが一苦労です(笑)
何個もAlertDialogが表示されない(生成されない)ようにする方法を書いていきます。
public AlertDialog myAlertDialog; //追加1 public void nya(View v){ //すでに表示されていたら、return if( myAlertDialog != null && myAlertDialog.isShowing() ) return; //追加2 AlertDialog.Builder alertDialog=new AlertDialog.Builder(this); // ダイアログの設定 alertDialog.setTitle("たいとる"); //タイトル alertDialog.setMessage("ないよう"); //内容 alertDialog.setPositiveButton("おーけー", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { //「おーけー」ボタンが押された時の処理 dialog.dismiss(); } }); /*---追加3---*/ alertDialog.setCancelable(false); myAlertDialog = alertDialog.create(); myAlertDialog.show(); /*---追加3---*/ }
<Button android:id="@+id/button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="ぼたん" android:onClick="nya" />
※こちらのコードは、ボタンを押すと「nya()」という関数を呼び出すものです。
これで、何個も表示(生成)されないはずです。
重要なのは、ここです↓↓
if( myAlertDialog != null && myAlertDialog.isShowing() ) return;
AlertDialogが表示(生成)されていたら、「return」します。
ここで、表示(生成)しているかを判別しています。
ここさえ、ちゃんと書いていれば、何個も表示(生成)されないはずです。
では、実験してみます。
「普通」と「二重に開かない」の2種類を作りました。
どちらもボタンが押されると、AlertDialogが表示するものです。
こちらは、「普通」のAlertDialogが表示するものです。
ボタンを連打すると、何個もAlertDialogが表示(生成)されました。
・普通のタイプ
public void nya(View v){ // 再現しやすいように負荷をかける SystemClock.sleep(1000); AlertDialog.Builder alertDialog=new AlertDialog.Builder(this); // ダイアログの設定 alertDialog.setTitle("たいとる"); //タイトル alertDialog.setMessage("ないよう"); //内容 alertDialog.setPositiveButton("おーけー", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { //「おーけー」ボタンが押された時の処理 } }); // ダイアログの作成と表示 alertDialog.create().show(); }
こちらは、「二重に開かないタイプ」のAlertDialogが表示するものです。
ボタンを連打しても、一つしか表示(生成)されませんでした。
・二重に開かないタイプ
public AlertDialog myAlertDialog; public void nya(View v){ //すでに表示されていたら、return if( myAlertDialog != null && myAlertDialog.isShowing() ) return; AlertDialog.Builder alertDialog=new AlertDialog.Builder(this); // 再現しやすいように負荷をかける SystemClock.sleep(1000); // ダイアログの設定 alertDialog.setTitle("たいとる"); //タイトル alertDialog.setMessage("ないよう"); //内容 alertDialog.setPositiveButton("おーけー", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { //「おーけー」ボタンが押された時の処理 dialog.dismiss(); } }); alertDialog.setCancelable(false); myAlertDialog = alertDialog.create(); myAlertDialog.show(); }
以上で、終わります。
参考サイト
android - How to check is a dialog opened or not ? - Stack Overflow