ActivityGroup可以得到startActivity返回的View对象

ActivityGroup简介

1.ActivityGroup
的核心就是继承了该类,能够通过getLocalActivityManager()得到一个 LocalActivityManager

,LocalActivityManager  am= getLocalActivityManager();

2.
然后通过 LocalActivityManager 通过 startActivity(String id, Intent intent), 可以与指定的 Actiivty 绑定,并且返回一个 Window LocalActivityManager 可以同时管理多个 Activity

Window window1 = am.startActivity("Module1", newIntent(TestView.this, ModuleView1.class));
Window window2 = am.startActivity("Module2", newIntent(TestView.this, ModuleView2.class));

3.
然后 Window 可以通过 getDecorView() 方法,返回一个 View, 然后通过与指定容器的 addView(View) 方法 , 实现不同的效果

View view1 = window1.getDecorView()
View view2 = window2.getDecorView()

实际中多用简写形式,,
container ScrollView 的一个实例
container.removeAllViews();     // 移除其他所有子视图
container.addView(getLocalActivityManager().startActivity(
                       "Module2",
                       new Intent(TestView.this, ModuleView2.class)
                         .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)                                                     )
                       .getDecorView());


注意 :
container.removeAllViews():
表示在显示该视图之前,先移除其他所有视图 .
Intent.FLAG_ACTIVITY_CLEAR_TOP:
如果在当前 Task 中,有要启动的 Activity ,那么把该 Acitivity 之前的所有 Activity 都关掉,并把此 Activity 置前以避免创建 Activity 的实例

这种方式具有很大的灵活性,常用的就是实现TabHost分页效果,但很好的避免的TabHost的缺点,如title

 

 

 

如果已经启动了四个Activity:A,B,C和D。在D Activity里,我们要跳到B Activity,同时希望C finish掉,可以在startActivity(intent)里的intent里添加flags标记,如下所示:

[java]  view plain copy
  1. Intent intent = new Intent(this, B.class);   
  2. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
  3. startActivity(intent);  


这样启动B Activity,就会把D,C都finished掉,如果你的B Activity的启动模式是默认的(multiple) ,则B Activity会finished掉,再启动一个新的Activity B。  如果不想重新再创建一个新的B Activity,则在上面的代码里再加上:

[java]  view plain copy
  1. intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);  

 这样B Activity就会再创建一个新的了,而是会重用之前的B Activity,同时调用B Activity的onNewIntent()方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值