【问题标题】:Cannot cancel dialog after losing focus?失去焦点后无法取消对话框?
【发布时间】:2023-03-27 04:31:01
【问题描述】:

我显示一个带有关闭按钮的对话框和一个打开新对话框的按钮。除非我在当前对话框的顶部打开了第二个对话框,否则关闭按钮可以正常工作。我认为我的对话框失去焦点,无法关闭。

  public void anotherOne(View v){

        openDialog2(); //This opens another dialog on top of the current one

}
 public void closeDialog(View v){

        dialog.cancel(); //This works fine unless anotherOne() has been called and closed

}

即使在打开和关闭当前对话框之上的另一个对话框之后,如何将焦点重新附加到当前对话框?

【问题讨论】:

  • 贴出相关代码。您的代码不足以理解确切的问题。
  • 代替 dialog.cancel() 尝试 dialog.dismiss();

标签: java android xml algorithm dialog


【解决方案1】:

你应该在第二个对话的onClick方法中取消第二个对话后取消第一个对话

参考此链接stack question

编辑:

尝试以编程方式设置可取消属性

dialog.setCancelable(true);//will cancel dialog onBackPressed() and when negative button clicked
dialog.setCanceledOnTouchOutside(true); // will cancel when user touches screen outside the dialog's box

【讨论】:

  • 嗯。如果用户想使用后退按钮退出第二个对话框,你知道是否有办法解决这个问题?
  • cancel 方法仅在您的代码中显式调用时执行,或者当您的可取消对话框打开时用户按下 BACK 按钮时执行,因此它应该与后退按钮一起使用,或者您可以覆盖 OnBackPressed .我相信这个想法是首先取消第二个对话,然后按这个顺序取消第一个,我认为你也可以从 onBackPressed 中做到这一点
  • 我试过这样做,但仍然无法正常工作。 @Override public void onBackPressed() { super.onBackPressed(); if(dialog.isShowing()){ dialog.cancel(); } }
  • 尽管取消了第一个对话框,但第二个对话框仍然没有焦点
  • 嗯,这是奇怪的行为,尝试添加手动取消属性。编辑了我的答案
【解决方案2】:

如果你使用 2 对话框,你可以做到这一点。

public void anotherOne(View v){
        openDialog2(); //Open dialog 2

}
 public void closeDialog(View v){
        dialog1.cancel(); 
}

【讨论】:

    【解决方案3】:

    10 多个小时后,我终于弄明白了!错误很简单。我使用 same 对话框对象来控制我的所有对话框。例如,我会像这样初始化一个对话框:

       generalDialog = new generalDialog(MainActivity.this);
       generalDialog.setContentView(R.layout.myLayout);
    

    然后我会在另一个布局上使用相同的对话框实例!

     generalDialog = new generalDialog(MainActivity.this);
     generalDialog.setContentView(R.layout.aDifferentFreakingLayout);
    

    然后,我希望我的第一个对话框可以这样关闭:

    generalDialog.cancel();
    

    相反,我应该创建两个不同的对象并根据情况关闭每个对象!

    现在回想起来,这似乎是一个愚蠢的错误!希望这个答案可以帮助其他处于相同情况的人! 创建不同的对象!!

    【讨论】:

    • 是的,伙计,您没有发布所有代码,问题实际上很奇怪,因为它应该从一开始就有效!太好了,你解决了你的问题!
    • @Rainmaker 你是对的!非常感谢您的帮助,它引导我得到这个答案! +1 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多