LocalActivityManager

来源:互联网 发布:mac os x 10.10虚拟机 编辑:程序博客网 时间:2024/06/05 21:59
本来标题名字准备叫《如何在一个Activity的一部分中显示其他Activity》,但是实在太长了……
于是就用其中必须用到LocalActivityManager这个类作为标题了。

总的来说,实现“如何在一个Activity的一部分中显示其他Activity”除了LocalActivityManager还需要一个或多个"容器"Layout(或者和Layout同级别的View)。

假设这个容器是一个LinearLayout,id是container,通常来说我们会想把这个容器的layout_weight设置成1,以便把位置先占好。

然后实例化LocalActivityManager:
LocalActivityManager mgr = getLocalActivityManager();
然后
mContainer = (LinearLayout) findViewById(R.id.container);
最后就可以把MyOtherActivity塞进container里面了。
mContainer.addView((mgr.startActivity("MyOtherActivityInstance1", new Intent(this, MyOtherActivity.class))).getDecorView());

addView是往Layout里动态增加View,别处也会用到。mgr.startActivity比一般的startActivity多一个String id参数:
"public Window startActivity (String id, Intent intent)"

其实这个String id只是一个标识,自己随便起个不重样的名字就好了,作用就是系统看到id一样的activity时会把两个activity当作一个处理,不会弄出平行的两个来,反之亦然。

至于最后这个getDecorView()方法,我一开始觉得很神奇,查了很多地方,最后觉得其实也不是很复杂,就是把Activity里面所有的View,包括其摆放方式,都给调出来,这样在addView的时候就不用担心摆放等问题了。


参考资料:
  1. http://stackoverflow.com/questions/5071275/can-i-use-activity-group-to-show-to-activities-at-the-same-time-in-android
  2. http://www.cnblogs.com/over140/archive/2010/09/07/1820876.html
原创粉丝点击