我已在我的应用中使用接受和拒绝按钮实现了自定义对话框。除非用户在7秒内点击任一按钮,否则会解除dismiss方法。如果用户在7秒内单击任何时间但是从不触发dismiss方法,我想关闭该对话框。我已经搜索了所有的搜索结果,但我还没有从答案中找到解决方案。
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()中尝试过)但是当我在广播接收器中执行它时会出现问题。
答案 0 :(得分: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();