ActivityGroup的子activity响应back事件的顺序问题
来源:互联网 发布:spark mail windows 编辑:程序博客网 时间:2024/05/21 11:35
昨天发现一个问题,是当我用ActivityGroup实现多activity跳转的时候用户按下back键直接从子activity退出应用,没有响应到activitygroup的onkeydown事件.其实可以在每个子activity覆写onkeydown事件弹出退出应用提示,但是就是想搞清楚为什么在子activity上按back就直接退出了而不响应到主activitygroup的onkeydown事件.如果可以响应,那么我们在主activityGroup里写一个退出提示框就可以了.这样不是可以省点代码吗.后来发现子activity是listview的时候里边的数据发生变化后就会先响应自己的onkeydown事件,如果子activity是非listview的可以直接响应到主activityGroup的onkeydown事件.(这里的前提是每个子activity都不覆写onkeydown事件只有activityGroup实现这个事件)后来查资料实验后给listview覆写onkeydown事件但是返回false.这样就可以将事件传递到主activityGroup里去响应了.总之比在子activity里覆写onkeydonw事件实现一堆逻辑要少一些代码的.子listview可以写:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return false;
} else {
return super.onKeyDown(keyCode, event);
}
}
主acitivtyGroup可以写:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
quit();//自己实现的弹出提示框,这个大家都会就不详细写了.
return true;
} else {
return super.onKeyDown(keyCode, event);
}
}
以下是我查到的资料,很有用.
键盘事件只会发送到当前获得焦点的View,这个KeyEvent只能被最上层获得焦点窗口的activity和view得到。一般来说这些事件会从上倒下去寻找合适的接受组件,ViewGroup的一个childView的onKeyDown()方法return true,那么表示该方法消费了此次事件,此时不会再传递到ViewGroup的onKeyDown()方法,如果onKeyDown()方法return false,那么表示该方法并未处理完全,该事件仍然需要以某种方式传递下去继续等待处理,这时传递到ActivityGroup的onKeyDown()方法。但是KeyEvent.KEYCODE_MENU不会传递到ActivityGroup去。
一个ActivityGroup的键盘事件处理
按下按键时执行
首先执行ActivityGroup dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_DOWN)
然后执行ActivityGroup onUserInteraction
最后执行ActivityGroup onKeyDown
松开按键时执行
首先执行ActivityGroup dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_UP)
然后执行ActivityGroup onUserInteraction
最后执行ActivityGroup onKeyDown
如果childView是listView,按上下键选择列表时的事件执行流程
按下键时
首先执行ActivityGroup dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_DOWN)
然后执行ActivityGroup onUserInteraction
然后执行childActivity dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_DOWN)
然后执行childActivity onUserInteraction
松开键时
首先执行ActivityGroup dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_UP)
然后执行ActivityGroup onUserInteraction
然后执行childActivity dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_UP)
然后执行childActivity onUserInteraction
然后执行childActivity onKeyUp
最后执行ActivityGroup onKeyUp
如果焦点在childView的listView上,按Menu键的事件
首先执行ActivityGroup dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_DOWN)
然后执行ActivityGroup onUserInteraction
然后执行childActivity dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_DOWN)
然后执行childActivity onUserInteraction
最后执行childActivity onKeyDown
松开键时
首先执行ActivityGroup dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_UP)
然后执行ActivityGroup onUserInteraction
然后执行childActivity dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_UP)
然后执行childActivity onUserInteraction
然后执行childActivity onKeyUp
如果焦点在childView的listView上,按Back键的事件
首先执行ActivityGroup dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_DOWN)
然后执行ActivityGroup onUserInteraction
然后执行childActivity dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_DOWN)
然后执行childActivity onUserInteraction
然后执行childActivity onKeyDown
最后执行ActivityGroup onKeyDown
Activity.dispatchKeyEvent(MotionEvent) - 这允许你的活动可以在分发给窗口之前捕获所有的键盘事件。
由上面可知,当焦点在childView的listView上时,没有执行ActivityGroup onKeyDown,而有执行ActivityGroup的dispatchKeyEvent,因此可以在ActivityGroup的dispatchKeyEvent来捕获childActivity的Menu键事件
- ActivityGroup的子activity响应back事件的顺序问题
- ActivityGroup的子activity响应back事件的顺序问题
- ActivityGroup的子activity响应back事件的顺序问题
- 焦点在子Activity的listView时ActivityGroup无法响应Menu键的问题
- 焦点在子Activity的listView时ActivityGroup无法响应Menu键的问题
- 关于activitygroup和子activity之间的事件监听
- ActivityGroup 子activity 触摸事件 传递
- ActivityGroup下子Activity的布局问题
- Cocos2dx中响应Android的Back(返回)与Menu(小房子)事件
- 焦点在子Activity时ActivityGroup无法显示menu的问题
- 焦点在子Activity时ActivityGroup无法显示menu的问题
- Android In-app Billing 在ActivityGroup中的 子activity OnActivityResult()方法不执行的问题
- 使用ActivityGroup 时子选项卡activity里的EditText只能输入无法删除问题
- ActivityGroup---activity的管理器
- 消除使用activityGroup时, 子Activity的上黑边框
- ActivityGroup里面装的子Activity不能使用OnActivityResult()方法
- ActivityGroup子Activity获得焦点返回键的处理
- ActivityGroup子Activity获得焦点返回键的处理
- error: expected specifier-qualifier-list before xxx (a structure )
- uboot源码分析(4)
- IE6下div图片下边4px空隙bug的解决办法
- CodeSmith Professional 5.0.1 KeyGen
- AIX 系统更换IBM小机硬盘
- ActivityGroup的子activity响应back事件的顺序问题
- DateDemo
- android 游戏开发
- DATA - RANGE OF
- 指向类的数据成员和函数指针
- fifo 以及几个信号的理解
- 序列化和反序列化
- 在access 2007 中进行sql query
- GHUnit for Xcode 3