【问题标题】:Why android dialog.dismiss never called?为什么 android dialog.dismiss 从未调用过?
【发布时间】:2016-01-14 22:19:48
【问题描述】:

我在我的应用中实现了自定义对话框,带有接受和拒绝按钮。除非用户在 7 秒内单击任一按钮,否则将触发解除方法。如果用户在 7 秒内单击任何时间,我想关闭对话框,但从不触发解除方法。我已经搜索了所有内容,但我没有从答案中找到解决方案。

final Dialog d = new Dialog(MyActivity.this, R.style.Theme_Dialog);
d.setContentView(R.layout.dialog_layout);
d.show();

spRequest.play(spSoundId, 1, 1, 1, 12, 1);
new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        //dia.dismiss();
        d.dismiss();
    }
}, 7000);    //the alert will play for 7 seconds and stop

Button accept = (Button) d.findViewById(R.id.acpt);
accept.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
        d.dismiss();
        spRequest.release();
    }
});

Button reject = (Button) d.findViewById(R.id.rjct);
reject.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
        d.dismiss();
        spRequest.release();
        msg.setText("");
    }
});

更新:经过一些调试和研究,我注意到如果我单击按钮两次,对话框将被关闭。我猜对话框被绘制了两次。我仍在努力。就像@aelimill 所说,从活动主体调用此代码时工作正常(我在 OnCreate() 中尝试过)但是当我在广播接收器中执行它时会出现问题。

【问题讨论】:

  • 我复制了你的代码,它运行良好。对话框在按钮单击时被关闭。唯一的区别是这一行 spRequest.play(spSoundId, 1, 1, 1, 12, 1); (我评论了它)。尝试在按钮单击侦听器中评论这一行和带有 spRequest.release() 的行
  • 对话框在 7 秒后消失。但是,如果您单击其中一个按钮,则 d.dismiss 将被忽略。你点击按钮了吗?
  • 抱歉,更新了我的评论 :) 是的,对话框在按钮点击时被关闭
  • 感谢您的帮助。在我的 spRequest.release();被解雇但 d.dismiss() 不是。我会进一步调查。
  • 尝试将 spRequest.release() 包裹在 try/catch 中,以防出现一些无法捕获的错误

标签: android android-dialog


【解决方案1】:

通常,您会覆盖对话框按钮的 onClick 方法来关闭它们,而不是对话框之外的按钮:

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setMessage("MyMessage");

  alertDialogBuilder.setPositiveButton("yes", new DialogInterface.OnClickListener() {
     @Override
     public void onClick(DialogInterface arg0, int arg1) {
        //do something
     }
  });

  alertDialogBuilder.setNegativeButton("No",new DialogInterface.OnClickListener() {
     @Override
     public void onClick(DialogInterface dialog, int which) {
        alertdialog.cancel();
        //or alertdialog.dismiss();
     }
  });

  AlertDialog alertDialog = alertDialogBuilder.create();
  alertDialog.show();

【讨论】:

  • 感谢您的回答。但我相信实现自定义对话框是可能的。我想将 Android 对话框视为最后一个选项,因为它看起来丑陋且不专业:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多