android 当Activity中弹出对话框时,无法监听返回键

当你的Activity 已经显示了Dialog时候. 通过下面的方法都是无法监听到返回键事件的: 
1、重写onKeyDown或者onKeyUp方法; 
2、重写onBackPressed方法; 
3、重写dispatchKeyEvent方法;

因为上述方法是重写在activity里面的,也就是说当activity是当前焦点时,它可以捕捉到相应的back键事件,而有dialog弹出时,dialog获取了当前焦点,所以activity里面的方法无法获取到back键事件。

可以使用下面方法监听: 

方法1、自定义的Dialog,该监听只对返回键有效,当点击Dialog中的按钮dismiss的时候,不会回调;

resultDialog.setOnCancelListener(new OnCancelListener() {
     @Override 
     public void onCancel(DialogInterface dialog) {
         System.out.println("dismiss  listener----------"); 
    } 
});
1、Dialog中重载下面方法;
public class UpdateDialog extends Dialog {
    public UpdateDialog(@NonNull Context context) {
        super(context);
    }

    public UpdateDialog(@NonNull Context context, @StyleRes int themeResId) {
        super(context, themeResId);
    }
    @Override
    public boolean dispatchKeyEvent(@NonNull KeyEvent event) {
        switch(event.getKeyCode()){
            case KeyEvent.KEYCODE_BACK:
                System.out.println("dismiss  listener----------");
                break;
            default:
                break;
        }
        return super.dispatchKeyEvent(event);
    }
}
2、设置监听回调;
 dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
            @Override
            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                // TODO Auto-generated method stub
                if(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount()==0){
                    if (!TextUtils.isEmpty(force_update) && force_update.equals("1")) {
                        finish();
                    }
                }
                return false;
            }
        });




你可能感兴趣的:(Android知识)