点击返回键,关闭Dialog,并且关闭Activity

作者: cheng 发布时间: 2019-10-28 浏览: 3358 次 编辑

点击返回键,关闭Dialog,并且关闭Activity

当我们点击返回键,需要将整个Activity和Dialog一块关闭时。我们首先想到的就是通过onKeyDown()方法,重写Activity的返回键事件;但结果并不愉快,好像没有达到我们想要的效果。

原来是Dialog抢走了Activity的焦点,Activity不再是当前的焦点,所以无法获取back键事件,因此我们需要重写Dialog的返回键事件:

// 监听 Dialog 的 Key 事件 
mDialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
            @Override
            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK) {
                    // 关闭 Dialog
                    dialog.dismiss();
                    // 关闭当前 Activity
                    finish();
                    // 返回 true,表示返回事件已被处理,不再向下传递
                    return true;
                } else {
                    return false;
                }
            }
        });

后来又看到另外一种方法,好像更加方便:

// 监听 Cancel 事件
mDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                // 关闭 Dialog
                dialog.dismiss();
                // 关闭当前 Activity
                finish();
            }
        });

注意:在设置setCancelable(false)时,setOnCancelListener()无效。