ActivityGroup下,启动了子Activity以后父A失去了焦点,用onKeyDown重写无法捕捉到按键事件。
查阅了相关的问题,很多都是利用重写disPathKeyEvent来解决的。
其实还有一个方案:在子A下(拥有焦点的子A)重写onKeyDown,捕捉到按键事件后,回传给父A
当键盘按下时
首先触发dispatchKeyEvent
然后触发onUserInteraction
再次onKeyDown
如果按下紧接着松开,则是俩步
紧跟着触发dispatchKeyEvent
然后触发onUserInteraction
再次onKeyUp
如果在一个TabActivity中,有四个子Activity ,如果这几个Activity分别嵌套了很多Fragment , 那么在按返回键的时候就应该监听一下是否还有Fragment
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Activity parent = getParent();
if (keyCode == KeyEvent.KEYCODE_BACK
&& AActivity.this.getSupportFragmentManager()
.getBackStackEntryCount() == 0) {
return parent.onKeyDown(keyCode, event);
} else {
return super.onKeyDown(keyCode, event);
}
}
这样TabActivity的onkeydown方法就有效了