快速单击按钮,对话框打开两次

Rah*_*hul 10 android button android-alertdialog

我有Button,点击,显示一个Dialog.一切都像魅力,但如果我双击按钮或快速单击按钮,Dialog打开两到三次.我必须单击后退按钮两次或三次才能解除Dialog.

我已经在SO上搜索了相关问题,但大多数答案建议禁用按钮或使用变量并将其设置为true和false,这不是我的要求.

如果有人知道如何解决这个问题,请帮助我.

我用的代码

// Delete item on click of delete button
holder.butDelete.setOnClickListener(new OnClickListener() {         
@Override
    public void onClick(View v) {
        Dialog passwordDialog = new Dialog(SettingsActivity.this);      
        passwordDialog.show();
    }
});
Run Code Online (Sandbox Code Playgroud)

use*_*305 9

您只需检查Dialog是否已经显示:

Dialog passwordDialog = new Dialog(SettingsActivity.this);
holder.butDelete.setOnClickListener(new OnClickListener() {           
    @Override
    public void onClick(View v) {                  
        if(!passwordDialog.isShowing()) {
            passwordDialog.show();
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

更新:

如果这在您的情况下不起作用,那么在您的活动中全局声明:

Dialog passwordDialog = null;
Run Code Online (Sandbox Code Playgroud)

Button点击:

holder.butDelete.setOnClickListener(new OnClickListener() {           
    @Override
    public void onClick(View v) {                  
        if(passwordDialog == null) {
            passwordDialog = new Dialog(SettingsActivity.this); 
            passwordDialog.show(); 
        }
    }
});
Run Code Online (Sandbox Code Playgroud)


Ver*_*rsa 7

全球申报:

private Boolean dialogShownOnce = false;
private mDialog dia;
Run Code Online (Sandbox Code Playgroud)

dialog.show();被称为:

dia = new mDialog(getContext());

if (!dia.isShowing() && !dialogShownOnce) {
    dia.show();
    dialogShownOnce = true;
}

dia.setOnDismissListener(new DialogInterface.OnDismissListener() {
    @Override
    public void onDismiss(DialogInterface dialog) {
        dialogShownOnce = false;
    }
});
Run Code Online (Sandbox Code Playgroud)

mDialog不一定是全局的,但我在调用mDialog.dismiss()一些超出本地范围的接口.

仍然使用a Boolean,但我不明白为什么它不能使用.