TabActivity 的onkeydown失效问题

本文介绍了解决ActivityGroup中子Activity获得焦点后导致父Activity无法捕获按键事件的问题。提供了一种通过在子Activity中重写onKeyDown方法并将按键事件回传给父Activity的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ActivityGroup下,启动了子Activity以后父A失去了焦点,用onKeyDown重写无法捕捉到按键事件。

查阅了相关的问题,很多都是利用重写disPathKeyEvent来解决的。




其实还有一个方案:在子A下(拥有焦点的子A)重写onKeyDown,捕捉到按键事件后,回传给父A


[java]  view plain copy
  1. public onKeyDown(KeyCode code,KyeEvent evnet) {  
  2.       Activity parent = getParetn();  
  3.       parent.onKeyDown(code,event);  
  4. }  

交由父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方法就有效了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值