【发布时间】: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 中,以防出现一些无法捕获的错误