ActivityGroup下,启动了子Activity以后父A失去了焦点,用onKeyDown重写无法捕捉到按键事件。
查阅了相关的问题,很多都是利用重写disPathKeyEvent来解决的。
其实还有一个方案:在子A下(拥有焦点的子A)重写onKeyDown,捕捉到按键事件后,回传给父A
- public onKeyDown(KeyCode code,KyeEvent evnet) {
- Activity parent = getParetn();
- parent.onKeyDown(code,event);
- }
交由父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方法就有效了
子Activity焦点与按键事件传递
本文介绍了解决ActivityGroup中子Activity获得焦点后导致父Activity无法捕获按键事件的问题。提供了一种通过在子Activity中重写onKeyDown方法并将按键事件回传给父Activity的解决方案。
3188

被折叠的 条评论
为什么被折叠?



