android 在ActivityGroup里执行跳转
来源:互联网 发布:sql中round函数怎么用 编辑:程序博客网 时间:2024/06/03 12:09
在工作中使用ActivityGroup的时候犯了一个严重的错误,后来经过头的点播,才豁然开朗,明白了这中间的道理,现在这些心得记录下来。
在刚开始接触ActivityGroup的时候我把它当成了J2EE中的框架集(framset)来使用,framset也是可以同时加载多个jsp页面。而ActivityGroup也是是可以管理多个Activity,很容易就把他当成framset 来看待。
其实不然,我们知道在Android中只允许一个Activity活动在当前界面,在这里我们就不能同时让多个Activity同时存活在ActivityGroup中,当我们加载一个Activity到ActivityGroup中来的时候我们要做的就是移除其他的存在于当前 ActivityGroup中的view,然后加载需要的Activity到当前的ActivityGroup中来。
LinearLayout container=(LinearLayout)((ActivityGroup)getParent()).getWindow().findViewById(R.id.body);//注意这里,还是获取group的view
container.removeAllViews();
Intent intent=new Intent(a.this,b.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Window subActivity=((ActivityGroup)a.this.getParent()).getLocalActivityManager().startActivity(“locallist”,intent);
container.addView(subActivity.getDecorView());
下面这些是从LocalActivityManager.startActivity()官方文档翻译过来的:
给你将要启动的Activity设置一个唯一的字符串ID与之关联,因此,如果你以后调用startActivity()的上一次相同的活动对象将被保留。
当以前的活动根据这个ID开始,就可能要么被摧毁,以一个新的开始,或者当前的一个再利用。
如果当前活动采用非多重启动模式(如singleTop),或意图有Intent.FLAG_ACTIVITY_SINGLE_TOP标志设置,那么当前活动将继续运行,Activity.onNewIntent()方法调用。
如果新的意图是与前一个相同,而新的意图没有Intent.FLAG_ACTIVITY_CLEAR_TOP设置,那么当前的活动将继续运行原样。否则,目前的活动将结束,一个新的开始。
有一个问题,即,如果其目的不包括一个明确的组成部分,我们可以恢复,这比以前运行时的状态被保存不同的活动课的状态(如果可用的活动点之间的变更集)。
getDecorView():
新添加窗口到窗口管理器中。
当我们要从b.class中跳转回到a.clas的时候,我们要先找到他对应的资源ID号,然后执行和上面跳转一样的操作。
LinearLayout container=(LinearLayout)((ActivityGroup)getParent()).getWindow().findViewById(R.id.body);//注意这里,还是获取group的view
container.removeAllViews();
Intent intent=new Intent(b.this,a.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
((ActivityGroup)b.this.getParent()).getLocalActivityManager().removeAllActivities();
Window subActivity=((ActivityGroup)b.this.getParent()).getLocalActivityManager().startActivity(”locallist“,intent);
container.addView(subActivity.getDecorView());
这里就是关于在ActivityGroup中的跳转和向回跳转的方法。要特别注意的是只能允许一个Activity活动在当前的ActivityGroup 中。当你startActivity的时候会按照你给定的资源ID去ActivityManager中去查找Activity,这个Activity只有两种状态,要么存在要么被销毁了。
另外就是在acitivityGroup中捕获返回键的按键事件,我们通常是这样处理的
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode==KeyEvent.KEYCODE_BACK)
{
//这里放捕获按键处理事件
}
return super.onKeyDown(keyCode, event);
}
我们会发现我们捕获按键没用了,很多人就会误以为ActivityGroup按键事件的优先级高于Activity的按键事件的优先级。其实这也是一个误区,他们的按键事件是优先级是一样的,不存在谁的优先级高于谁 ,只是我们这里对按键事件的处理有一些问题,我们应该这样做:
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode==KeyEvent.KEYCODE_BACK)
{
//这里放捕获按键处理事件
return true;
}else
return super.onKeyDown((keyCode, event);//除了捕获你想要的返回键之外,其余的应该交给他的父类去处理
}
这些只是我的个人理解,如有错误还望大家多多指教!
源码下载地址:http://download.csdn.net/source/3292686
运行效果如下:
图1:抽屉未打开 图2:打开抽屉
图3:跳转前 图4:跳转后
- android 在ActivityGroup里执行跳转
- android ActivityGroup实现activity的局部跳转
- Android In-app Billing 在ActivityGroup中的 子activity OnActivityResult()方法不执行的问题
- 使用ActivityGroup在TabHost标签页内中跳转Activity
- 使用ActivityGroup在TabHost标签页内中跳转Activity
- android ActivityGroup中跳转activity的关键代码
- Android在ActivityGroup里面使用startActivityForResult
- activitygroup+gridview 内部跳转
- Android串口通讯,在线程里一直监听是否有消息发来,接收到消息到runOnUiThread处理跳转页面,页面跳转关闭之后,在发送消息尽然还会执行在打开页面?
- android ActivityGroup
- android-ActivityGroup
- Android ActivityGroup
- Android 同一个BroadcastReceiver在两个程序里执行
- android 终于解决了 在ActivityGroup中捕获Back事件
- 在C++里执行VBS
- 在mongoDB里 执行脚本
- 在activitygroup中用startActivityForResult
- Android学习 (二十) 在fragment里用Intent跳转到其他Activity
- springMVC、spring3学习资料目录——来自开涛额博客
- Linux Futex的设计与实现
- UNIX环境高级编程读书笔记(八)—进程控制 (2)
- UNIX环境高级编程读书笔记(八)—进程控制 (3)
- Play framework 内存泄漏以及nginx写log占用磁盘空间的问题
- android 在ActivityGroup里执行跳转
- VS2010+QT4.7开发环境搭建
- UIControl 的几个事件的说明
- StackContext、ValueStack、ActionContext的理解
- 关于RHEL6中ulimit的nproc限制
- jQuery中获取节点属性
- 如何进行有效的代码检查
- OD加载程序在retn停下的问题
- 斯坦纳树 Steiner Tree