`
昔雪似花
  • 浏览: 204692 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于ActivityGroup使用过程中遇到的一点问题

阅读更多
在工作中使用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);//除了捕获你想要的返回键之外,其余的应该交给他的父类去处理
}
分享到:
评论

相关推荐

    使用ActivityGroup管理Activity

    - 兼容性问题:由于`ActivityGroup`在API 11后被弃用,对于支持新版本Android系统的应用来说,使用`ActivityGroup`可能会导致兼容性问题。 - 生命周期管理:`ActivityGroup`管理的子Activity生命周期可能会变得复杂...

    ActivityGroup实现Activit栈

    在Android开发中,ActivityGroup是早些版本API中提供的一种特殊类型的Activity,它允许开发者在一个TabHost或者帧布局(FrameLayout)中嵌套多个Activity,从而实现类似iOS中UINavigationController的堆叠管理器效果...

    使用ActivityGroup来切换Activity和Layout

    在实现过程中,我们首先需要创建一个`ActivityGroup`的子类,比如`MyActivityGroup`,并重写其关键方法。这些方法包括: 1. `onCreate()`:在这个方法中,我们需要初始化`LocalActivityManager`,并设置其管理的`...

    用ActivityGroup解决TabHost中多个Activity跳转问题

    然而,在早期的Android版本中,如果每个选项卡都用独立的Activity实现,那么在Activity之间进行跳转时可能会遇到一些问题,比如回退栈管理复杂、内存消耗高等。为了解决这些问题,开发者引入了ActivityGroup,它允许...

    activitygroup

    `ActivityGroup`在早期的Android版本中被用来解决在同一个栈内管理多个`Activity`的需求,但在Android 3.0(API Level 11)之后,官方推荐使用`Fragment`来替代,因为`Fragment`提供了更灵活且性能更好的解决方案。...

    tabhost和ActivityGroup的组合使用

    在实际项目中,我们可以将TabHost和Fragment结合使用,每个标签页都包含一个Fragment容器,然后在Fragment之间进行切换,这样既能实现动态内容加载,又能避免因使用ActivityGroup带来的潜在问题。对于旧项目改造,...

    Android中ActivityGroup的应用

    ActivityGroup的用法,头部和底部为固定布局中间动态显示界面 并在中间布局实现手势滑动效果,自定义SlidingDrawer(抽屉)效果,在ActivityGroup里执行跳转等功能。至于在Android在ActivityGroup里执行跳转详细介绍 ...

    Android开发—使用ActivityGroup来切换Activity和Layout.pdf

    在Android开发中,ActivityGroup是一种特殊类型的Activity,它允许开发者在一个Activity内嵌套其他Activity,实现...然而,理解ActivityGroup的历史和工作原理仍然是学习Android开发历史和演进过程中的一个重要环节。

    TabHost, ActivityGroup 的使用例子

    这种方式虽然能实现类似Fragment的效果,但因为ActivityGroup的局限性,建议尽量避免在新项目中使用。 总的来说,TabHost和ActivityGroup是Android早期的组件,现在已经被Fragment和FragmentManager所取代。虽然...

    ActivityGroup的使用

    ActivityGroupActivityGroupActivityGroupActivityGroupActivityGroupActivityGroupActivityGroupActivityGroupActivityGroup

    android ActivityGroup的demo

    3. **setContentView()**:在ActivityGroup中,我们不能直接使用setContentView()方法加载布局,而是需要通过LocalActivityManager的startActivity()和getWindow()方法来设置子Activity的视图。 4. **...

    gridview+activityGroup实现tab分页

    在Android开发中,创建一个具有分页功能的Tab布局是常见的需求,这通常涉及到GridView和ActivityGroup的结合使用。下面将详细解释这两个组件以及如何利用它们实现Tab分页。 首先,`GridView`是Android的一种视图...

    ActivityGroup框架

    在Android开发中,ActivityGroup是一种特殊的布局管理器,它允许在一个TabHost中嵌套多个Activity。这个框架的设计目的是为了...在学习和使用过程中,应结合最新的开发规范和技术趋势,以确保代码的可维护性和兼容性。

    ActivityGroup应用实例

    7. **升级到Fragment**:虽然ActivityGroup在现代Android开发中已经较少使用,但理解它的工作原理有助于理解Fragment。通常,开发者会被鼓励将ActivityGroup的代码重构为使用Fragment,以利用Fragment提供的更丰富的...

    ActivityGroup和GridView实现标签分页

    然而,由于ActivityGroup存在一些问题,如内存泄漏、回退栈管理复杂等,所以在后来的版本中被废弃,推荐使用Fragment来替代。但是,对于理解旧版应用或学习历史知识,了解ActivityGroup仍然很有价值。 GridView则...

    ActivityGroup

    2. **兼容性问题**:随着Android API的更新,`ActivityGroup`在后来的版本中被弃用,对于新版本的Android系统,使用`ActivityGroup`可能会遇到不兼容或不稳定的问题。 3. **代码复杂性**:使用`ActivityGroup`往往...

    ActivityGroup之activity内跳转和外跳转

    5. **外跳转处理**:在子Activity中,当需要跳转到不在ActivityGroup内的Activity时,使用`startActivityForResult()`或`startActivity()`,然后在ActivityGroup中监听并处理结果,以保持返回栈的正确性。...

    ActivityGroup之Activity内跳转和外跳转

    这个过程通常需要重写`startChildActivity()`方法,以便在ActivityGroup内部管理子Activity的生命周期。例如: ```java public void startChildActivity(String tag, Intent intent) { Window window = ...

    Android Fragment应用实战Demo,向ActivityGroup说再见 源码程序

    在Android开发中,Fragment是应用程序界面的一个模块化组件,它可以在Activity中添加、删除或替换。Fragment的概念是在Android 3.0...如果你在使用过程中遇到问题,可以参考提供的博客链接或在社区里留言寻求帮助。

    Android开发—使用ActivityGroup来切换Activity和Layout

    在上面的代码中,我们使用 Intent 来启动不同的 Activity,并且使用 startSubActivity 方法来在 ActivityGroup 中启动这些 Activity。然后,我们可以使用 setContentView 方法来加载不同的ContentView。 最后,我们...

Global site tag (gtag.js) - Google Analytics