11

私の Android アプリケーションは、ボタンのクリック時に AlertDialog を表示します。ボタンを複数回クリックすると、複数のダイアログが作成されます。どうすればこれを修正できますか?

これが私のコードです:

button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        dialog =  new AlertDialog.Builder(context);             
        dialog.show();
    }
});
4

7 に答える 7

21

ダイアログが表示されているかどうかを確認する必要があります

ダイアログには、ダイアログが現在表示されている場合に返される isShowing() メソッドがあります。

public AlertDialog myDialog;

public void showDialog(Context context) {
    if( myDialog != null && myDialog.isShowing() ) return;

    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle("Title");
    builder.setMessage("Message");
    builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int arg1) {
                dialog.dismiss();
            }});
    builder.setCancelable(false);
    myDialog = builder.create();
    myDialog.show();
  }
于 2014-12-01T11:30:36.167 に答える
7

You can create a global flag (boolean) that is set to true if a dialog is shown? If the user click ok, yes, no or anything the dialog is closed and you set the flag to false.

So something like:

boolean dialogShown;

If(dialogShown)
{
  return;
}
else
{
  dialogShown = true;
  dialog =  new AlertDialog.Builder(context);              
  dialog.show();
}
于 2012-09-24T08:07:19.253 に答える
1

ボタンを押すたびに、メソッドを呼び出します。これが、複数回表示される理由です。

最も簡単な方法は、コードのクラスで次のようにインスタンス変数を定義することです。

boolean alertIsBeingShown = false;

次に、アラートがこのように表示されているときにtrueに設定します

button.setOnClickListener(new OnClickListener() {
           @Override
        public void onClick(View v) {
               if (alertIsBeingShown) return;
               alertIsBeingShown = true;
               dialog =  new AlertDialog.Builder(context);              
               dialog.show();

    }
 });

OKを押して非表示にするコードで、変数をfalseに設定します。

于 2012-09-24T08:06:09.003 に答える
0

そのための正または負のボタンを作成し、それを OK として呼び出して、それを使用して閉じます。何かのようなもの :

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Look at this dialog!")
       .setCancelable(false)
       .setPositiveButton("OK", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
                //do things
           }
       });
AlertDialog alert = builder.create();
alert.show();
于 2012-09-24T08:06:35.320 に答える