Three.jsを使って、作ってみた

プログラミング関連の事を色々書いています(^^) 週末はレストランやコンビニのお菓子のことを書いています。

android AlertDialog(アラートダイアログ)が二重に開かないようにする

今回は、androidの「AlertDialog(アラートダイアログ)が二重に開かないようにする」方法を書きます。


AlertDialog(アラートダイアログ)を消しても、また同じものがでてくることがたまにあります。
f:id:gupuru:20140419175854p:plain
例えば、ボタンを押すと、AlertDialogが出るようにした時に、そのボタンを連打したら、何個もAlertDialogが表示されたりします。
こうなると、消すのが一苦労です(笑)


何個もAlertDialogが表示されない(生成されない)ようにする方法を書いていきます。

java

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---*/
}

xml

<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