覆盖对话框onBackPressed()?

时间:2011-06-01 17:03:13

标签: android dialog

如何覆盖Dialog onBackPressed来关闭对话框以及在finish()上调用Activity

5 个答案:

答案 0 :(得分:56)

您可以使用setOnCancelListener

dialog.setOnCancelListener(new DialogInterface.OnCancelListener()
{
    @Override
    public void onCancel(DialogInterface dialog)
    {
         MyActivity.this.finish();
    }
});

您只需完成自己的活动。对话框将自动被解雇。

答案 1 :(得分:24)

dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
                    @Override
                    public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                        if (keyCode == KeyEvent.KEYCODE_BACK) {
                               dialog.cancel();
                               return true;
                            }
                         return false;
                    }
                })

答案 2 :(得分:3)

@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
  return new Dialog(getActivity(), getTheme()){
    @Override
    public void onBackPressed(){
      // dismiss();
      // activityReference.finish();
    }
  };
}

答案 3 :(得分:0)

在我的情况下,我使用DialogFragment,它仍然是一个对话框.. 所以我在我的对话框中覆盖onCancel(),每当我在显示对话框时单击后退按钮,它就会像活动的onBackPressed()一样做出反应。

@Override
public void onCancel(DialogInterface dialog) 
{
    super.onCancel(dialog);
    Log.i("RecDialog.onCancel()", "onCancel");
}
希望我帮忙。

答案 4 :(得分:0)

我最后在我的对话框中添加了一个关键监听器来监听Back键。 不像覆盖onBackPressed()那样优雅,但它有效。 这是代码:

dlgDetails = new AlertDialog.Builder(this)
    .setOnKeyListener(new DialogInterface.OnKeyListener() {
        @Override
        public boolean onKey (DialogInterface dialog, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK && 
                event.getAction() == KeyEvent.ACTION_UP && 
                !event.isCanceled()) {
                dialog.cancel();
                showDialog(DIALOG_MENU);
                return true;
            }
            return false;
        }
    })
    //(Rest of the .stuff ...)