android 在ActivityGroup里执行跳转 activitygroup

2011-05-18 13:17

在工作中使用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)

{

//这里放捕获按键处理事件

}

android 在ActivityGroup里执行跳转 activitygroup
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:跳转后

  

  

爱华网本文地址 » http://www.aihuau.com/a/25101012/117269.html

更多阅读

在水里养的花有哪些 房间养什么植物好

在水里养的花有哪些——简介随着无土栽培技术的发展,在水中种植花卉,已经越来越普遍。理论上,只要满足了花,对于阳光,水分,营养的需要,多数花都可以在水中栽植。小编在这里介绍下,目前主要的几种,在水里养的花。在水里养的花有哪些——可以

教你如何在百度贴吧转帖 贴吧转帖

在百度知道百度分类混过一段时间,看到很多人都问百度贴吧如何转帖,经常我们看到一个好的帖子喜欢把他放在自己的I贴吧里,在这里把自己会的方法写下来,希望可以帮到大家。教你如何在百度贴吧转帖——以前的方法(如今改版)教你如何在百度贴

qq炫舞中怎么在沙滩里游泳 qq炫舞沙滩社区滑板车

qq炫舞中怎么在沙滩里游泳——简介 qq炫舞的沙滩中推出了游泳池,但是很多亲们试了很多次却进不去,下面介绍一下,到底怎么才能进入沙滩的游泳池中。qq炫舞中怎么在沙滩里游泳——方法/步骤qq炫舞中怎么在沙滩里游泳 1、第一步,我们需要

怎么在方框里打钩 手机上方框里打钩符号

怎么在方框里打钩——简介在平时的办公应用当中~许多有多项选择之类的文本需要在前面的方框里打个对勾~今天我们就说一下如何在小方框里打对勾~~怎么在方框里打钩——方法/步骤怎么在方框里打钩 1、打开文字编辑器~我们以word为例~

声明:《android 在ActivityGroup里执行跳转 activitygroup》为网友爱生活爱自己分享!如侵犯到您的合法权益请联系我们删除