如何防止对话框打开两次

时间:2011-09-23 10:03:44

标签: android

我的应用程序中有按钮,双击我的按钮我打开一个对话框。有时当我快速双击按钮然后对话框打开两次时会发生什么,因此用户必须取消对话框两次。

所以任何人都可以建议我如何阻止此对话框在我的按钮的双击上打开两次。

7 个答案:

答案 0 :(得分:9)

为对话框创建一个字段,例如

private Dialog m_dialog = null;

并在你的onClick监听器中检查它的状态:

if ((m_dialog == null) || !m_dialog.isShowing()){
    m_dialog = new Dialog(...); // initiate it the way you need
    m_dialog.show();
}

修改 顺便说一句,如果你不需要每次分隔if()子句时都需要初始化对话框:

if (m_dialog == null){
    m_dialog = new Dialog(...); // initiate it the way you need
    m_dialog.show();
} 
else if (!m_dialog.isShowing()){
    m_dialog.show();
}

答案 1 :(得分:2)

这可能会对你有所帮助:

取一个计数变量,即count=0;。 在按钮中单击验证条件,使if(count==0)显示对话框并将计数设为1.(此对话框不会第二次打开),而关闭对话框会再次计数为0。

我认为这会起作用

希望它有所帮助。

答案 2 :(得分:1)

按下Button后,请使用Button.setEnabled(false)将其停用。对话框完成后,使用Button重新启用DialogInterface.OnDismissListener。这样您就不必拥有对话框的全局引用。

答案 3 :(得分:1)

当前方法应该是使用DialogFragment。这样,如果只使用标签就可以了,不需要多余的代码逻辑,而如果带有标签的Fragment已经存在,则跳过加载:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment prev = getSupportFragmentManager().findFragmentByTag("TAG_DIALOG");
        if (prev == null) {
            ft.addToBackStack(null);
            // Create and show the dialog.
            DialogFragment newFragment = ImageDialog.newInstance(b);
            newFragment.show(ft, "TAG_DIALOG");
        }

答案 4 :(得分:0)

过去2天我遇到了同样的问题,在经过大量的点击和试用后,我发现我的代码中出现了一个小问题我没有解雇我在onPostExecute()中打开的对话我的AsyncTask在AsyncTask工作之后做了一些额外的工作。

当我打电话给myCustomDialog.dismiss()时,一切正常。

答案 5 :(得分:0)

boolean isBusy = false;

View.OnClickListener ShowDialog_Click(){
    return new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(isBusy){
                return;
            }
            isBusy = true;
            //show dialog
        }
    };
}

dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
      @Override
      public void onDismiss(DialogInterface dialogInterface) {
          dialog.dismiss();
          isBusy = false;
      }
});

答案 6 :(得分:0)

您应该在onClick之前创建对话框变量。 例如:

private fun onFilterClick() {
    val dialog = FilterDialogFragment()

    btn_filter.setOnClickListener {
        if (!dialog.isAdded)
            dialog.show(supportFragmentManager, dialog.tag)
    }
}