虽然google已经不推荐使用ActivityGroup来管理Activity了,但还是了解一下其工作原理,方便接下来的工作。

首先,建立一个ContainerActivity继承ActivityGroup,用来管理Activity。

public class ContainerActivity extends ActivityGroup {private LocalActivityManager localActivityManager;private Intent intent = new Intent();public LinearLayout linear;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.container_activity);linear = (LinearLayout) findViewById(R.id.linear1);localActivityManager = this.getLocalActivityManager();}}

布局文件就一个LinearLayout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><LinearLayoutandroid:id="@+id/linear1"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_marginBottom="50dp"android:gravity="top"android:orientation="vertical" ></LinearLayout></RelativeLayout>

接下来,我们新建一个ActivityManager类来管理Activity

public class ActivityManager {public static ArrayList<View> viewsStack = new ArrayList<View>();public static void backToPrevious(ContainerActivity parent) {viewsStack.remove(viewsStack.size() - 1);parent.linear.removeAllViews();parent.linear.addView(viewsStack.get(viewsStack.size() - 1));}
}

注意:我们的ContainerActivity里面什么都没有,新建HomeActivity,并添加布局文件。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="20dp"android:text="@string/hello_world" /></LinearLayout>

HomeActivity里面就一个TextView,然后我们在ContainerActivity中添加代码,如下:

 @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.container_activity);linear = (LinearLayout) findViewById(R.id.linear1);localActivityManager = this.getLocalActivityManager();intent.setClass(ContainerActivity.this,HomeActivity.class);newActivity(intent);}public void newActivity(Intent intent) {intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);linear.removeAllViews();View view = localActivityManager.startActivity("subActivity", intent).getDecorView();linear.addView(view);ActivityManager.viewsStack.clear();ActivityManager.viewsStack.add(view);}

运行,可以看到,HomeActivity中的内容已经被添加到ContainerActivity中去了。

使用ActivityGroup管理Activity相关推荐

  1. Android doc |Getting Started|部分 转载 --管理Activity生命周期

    原文 https://developer.android.com/training/basics/activity-lifecycle/index.html 原文被部分改动 管理Activity生命周 ...

  2. android 管理activity

    2019独角兽企业重金招聘Python工程师标准>>> 关于怎么一次退出所有Activity网上有很多很多种说法,比如用杀进程的方式:android.os.Process.killP ...

  3. android管理activity顺序,android activity 六个主要函数以及一些调用顺序

    Android中一个Activity一般都需要实现六个函数: onCreate(), onStart(), onResume(),onPause(),onStop(),onDestroy(). onC ...

  4. Android官方开发文档Training系列课程中文版:管理Activity的生命周期之Activity的重建

    原文地址:http://android.xsoftlab.net/training/basics/activity-lifecycle/recreating.html#RestoreState 有这么 ...

  5. Android官方开发文档Training系列课程中文版:管理Activity的生命周期之停止和重启Activity

    原文地址 : http://android.xsoftlab.net/training/basics/activity-lifecycle/stopping.html#Start 在activity的 ...

  6. Android官方开发文档Training系列课程中文版:管理Activity的生命周期之暂停和恢复Activity

    原文地址 : http://android.xsoftlab.net/training/basics/activity-lifecycle/pausing.html 在APP的正常使用过程中,在前台工 ...

  7. Android官方开发文档Training系列课程中文版:管理Activity的生命周期之启动一个Activity

    原文地址 : http://android.xsoftlab.net/training/basics/activity-lifecycle/index.html 导言 用户通过导航退出或者返回应用的时 ...

  8. (android文档原创翻译)管理Activity的生命周期一

    ( 英文原文链接地址) 1.启动你的Activity 不同其它的应用程序通过main()方法来启动,android系统是按照一定的顺序通过调用其生命周期(lifecycle)的回调方法来启动或者结束一 ...

  9. [Andriod官方训练教程]管理Activity的生命活动之开始一个Activity

    原文地址:https://developer.android.com/training/basics/activity-lifecycle/starting.html ---------------- ...

  10. Android学习之管理Activity的生命周期

    Activity生命周期 activity第一次启动的时候,它来到系统的前台,开始与用户交互.在此期间,Android系统调用了Activity生命周期中一系列的方法.如果用户执行启动了另一个acti ...

最新文章

  1. Redis源码解析——Zipmap
  2. 宅家学习,如何进行Kubernetes Ingress控制器的技术选型?
  3. Linux进程和计划任务管理
  4. TensorFlow升级1.4:Cannot remove entries from nonexistent file \lib\site-pack
  5. mongodb数据库淘汰_mongodb 内存数据淘汰策略
  6. 传图识字java_Java:全面 清晰的 NIO 学习攻略
  7. 阐述oracle的体系结构,Oracle数据库逻辑体系结构详解
  8. 典型的DIV+CSS布局(左中右)
  9. 最近和一个35岁的朋友聊天,他最近在找工作
  10. 目标检测之hough forest---霍夫森林(Hough Forest)目标检测算法
  11. Android图片的三级缓存整理
  12. 通过纯真IP数据库查询IP归属地信息
  13. 使用CMake编译Geos3.5.0
  14. android 设置锁屏壁纸
  15. 论文精度 —— 2018 CVPR《Generative Image Inpainting with Contextual Attention》
  16. 苹果发布会在即 iMessage将迎来哪些重大更新?
  17. window 中 批量结束进程的命令
  18. 论文翻译-ASTER: An Attentional Scene Text Recognizer with Flexible Rectification
  19. WIN7系统安装及动态分区详解步骤
  20. 学习WEB前端开发是选择自学还是去培训机构?

热门文章

  1. 晨风机器人回复词库_qq机器人词库大全下载
  2. SecureCRT鼠标双击或拖成变成Ctrl+C的解决办法
  3. 大文件读取mmap磁盘映射
  4. 好程序员web前端培训分享JavaScript学习笔记ajax及ajax封装
  5. 爬虫python代码网易云_Python爬虫之网易云音乐下载
  6. qtp 连接mysql_QTP连接MySQL
  7. C-Free5注册码,秘钥,解决办法
  8. chrome最新版本下载
  9. 洛谷oj---P1896 [SCOI2005] 互不侵犯
  10. 智驾科技MAXIEYE完成3亿元B轮融资,暂未取得品牌同名商标