本文章主要讲解怎么解决在Activity中,弹出Dialog后无法捕捉到Activity的Back点击事件。
通常,我们捕捉Back点击事件一般有以下几种方法:
重写onKeyDown或者onKeyUp方法
重写onBackPressed方法
重写dispatchKeyEvent方法
但是当在有Dialog弹出时,想捕捉Back键的事件的话,上述三种办法都无法实现。原因是Dialog在Activity中弹出,因此Dialog抢走了Activity的焦点,当前的焦点变为Dialog了,所以Activity不是当前焦点,因此无法获取到Back键事件。
也就是说只有当Activity是当前焦点时,它才可以捕捉到相应的Back键事件,而有Dialog弹出时,Dialog获取了当前焦点。但是如果我们需要做到相应的需求时,此时有两种思路可以解决这个问题:
Dialog中拦截返回键
- 一 ) 在Dialog中可以通过调用setOnKeyListener()方法来为Dialog增加按键事件的监听。并重写dispatchKeyEvent方法。
//设置Dialog中的setOnKeyListener
selectDialog.setOnKeyListener(new OnKeyListener() {
//第一个参数是拦截到此事件的对话框对象的引用,第二个参数是此事件对应的keyCode,第三个参数是此事件对象本身。
@Override