为什么android dialog.dismiss从未调用过?

时间:2016-01-14 22:19:48

标签: android android-dialog

我已在我的应用中使用接受和拒绝按钮实现了自定义对话框。除非用户在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()中尝试过)但是当我在广播接收器中执行它时会出现问题。

1 个答案:

答案 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();