0

クリックイベントで、デバッガーがonClickにわずかに遅れると、複数のダイアログが同時に表示される可能性があることに気付きました。

どのように修正すればよいので、AlertDialogを1つだけ表示するようにする方法はありますか?

コード:かなり標準的です。

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()
4

4 に答える 4

1

メソッドを使用してisShowing()、アラートダイアログが表示されているかどうかを確認できます..

およびonClickイベントはクリックするたびに新しいダイアログを作成するので、ダイアログがnullでないかどうかを確認し、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...
 } 
于 2012-06-05T13:55:08.837 に答える
0

ボタンをすばやくクリックすると、すべてのクリックがキューに入れられ、1つずつ処理されます。ただし、最初にクリックした後は、残りのクリックを無視する必要があります。

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;
            }
        });    
于 2012-06-05T13:58:59.313 に答える
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();
   }  
于 2012-06-05T13:56:30.830 に答える
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();
}
于 2012-06-05T13:57:38.213 に答える