2012-06-05 44 views
0

現在在我的點擊事件中,我注意到有時候我的調試器有時會出現多個對話框同時出現在稍微onClick的時候。Muliple AlertDialogs點擊

我們如何解決它,所以有辦法讓它只顯示1 AlertDialog?

代碼:漂亮的標準。

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setMessage("Go to the next screen?") 
     .setCancelable(false) 
     .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       Intent i = new Intent(class1.this, class2.class); 
startActivity(i); 
      } 
     }) 
     .setNegativeButton("No", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       dialog.cancel(); 
      } 
     }); 
AlertDialog alert = builder.create() 

回答

1

使用isShowing()方法可以檢查警報對話框顯示或不..

和onclick事件創建新的對話框,每次當您單擊所以檢查,如果對話不爲空,則創建對話框如果不是null,則檢查.isShowing()

所以,

AlertDialog alert=null;//declare as a global ..mind that not in your onClick method 

if(null=alert){ 
alert = new AlertDialog.Builder(this).create(); 
} 

if(!alert.isShowing()){ 
    //do stuff here is dialog is showing here... 
} 
+0

是的你是對的。我只是重讀了android上的文檔。我錯過了這個方法。 – Juju

0
 public void onClick(View v) {     
     send(); 
     alertdialog(); 
     alertdialog1(); 
     } 

    //first 
     void alertdialog(){  

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("Go to the next screen?") 
      .setCancelable(false) 
      .setPositiveButton("ok", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }); 
      /*.setNegativeButton("No", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      });*/ 
    AlertDialog alert = builder.create(); 
    alert.show(); 
    } 
    //////sexcond 
     void alertdialog1(){  

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("Go to the next screen?") 
      .setCancelable(false) 
      .setPositiveButton("ok", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }); 
      /*.setNegativeButton("No", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      });*/ 
    AlertDialog alert = builder.create(); 
    alert.show(); 
    } 
+0

我想只顯示一個。有一些與debuger有關的奇怪事件,有時它顯示2滯後。 – Juju

0

嗯試試這樣說:

private AlertDialog mDialog; 

public void fillDialog(){ 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("Go to the next screen?") 
    .setCancelable(false) 
    .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      Intent i = new Intent(class1.this, class2.class); 
      startActivity(i); 
     } 
    }) 
    .setNegativeButton("No", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      dialog.cancel(); 
     } 
    }); 
    mDialog = builder.create() 
} 

public void showDialog(){ 
    if (mDialog == null) createDialog(); 
    if (mDialog.isShowing()) return; 
    mDialog.show(); 
} 
+0

是的,這應該感謝。在我的alertDialog上onclick推出並不是很聰明。 – Juju

0

如果你單擊該按鈕rapidly.it隊列中的所有點擊和處理它們一個接一個。但你想要的是在第一次點擊後忽略其餘的點擊。

boolean isClickable = true; 

     btn.setOnClickListener(new OnClickListener() 
     { 
      public void onClick(View v) 
      { 
       if (isClickable) 
       { 
        AlertDialog.Builder builder = new AlertDialog.Builder(this); 
        builder.setMessage("Go to the next screen?") 
          .setCancelable(false) 
          .setPositiveButton("Yes", 
            new DialogInterface.OnClickListener() 
            { 
             public void onClick(
               DialogInterface dialog, int id) 
             { 
              Intent i = new Intent(class1.this, 
                class2.class); 
              startActivity(i); 
             } 
            }) 
          .setNegativeButton("No", 
            new DialogInterface.OnClickListener() 
            { 
             public void onClick(
               DialogInterface dialog, int id) 
             { 
              dialog.cancel(); 
             } 
            }); 
        AlertDialog alert = builder.create(); 

       } 
       isClickable = false; 
      } 
     });