转载自:http://blog.csdn.net/u014303273
有时候为了每个activity中都有相同的内容显示(即该模块是单列的),并且时时刻刻界面显示一致,通常方法有:
1.在baseActivity中进行添加公共view布局进行显示,这样做功能通常能够实现,但是每个activity中的view不是同一个对象,并且该view变化,其他activity也不会变,如果该控件view比 较复杂,功能事件多,维护修改都是比较麻烦,耦合性高
该方法只是适合简单的相同view,如何网络的变化提示控件,可以在baseactivity中实现,简单功能,简单方法实现
2.在第一个Activity启动的时候,使用Activity对应的Context来创建一个VIew,然后用这个VIew来初始化Application的成员VIew,这样不就通过这种方式将这个View设置成全局变量但是不要忘记,一个VIew只能对应一个parent,在你add之前,注意有没有remove,该方式虽然view显示数据能够保持一致,占用较少的内存,功能耦合低,但是该控件view不能同时在多个activity存在,需要不停移除添加
3.通过activity进行视图嵌套实现。view对象只能依赖一个父对象(容器),不能进行同一时间添加到多个容器中(根据控件事件的分发传递原理,如果一个view对象能够添加到多个容器中,会引起事件传递的混乱,因此Android系统规定一个普通view只能同一时间在一个容器中).android中 activity是一个独立的组件,是各种触摸事件的出发点以及终结点,因此可以将activity作为一该个普通view,这样一来就可以所有activity公用一个view对象了,该方式实现,所有的activity都能同时添加该view,该view都是同一个对象,保证了在所有activity显示的一致性,同时方式实现,功能耦合低,有利于维护修改,占用较少的内存
具体实现:
将该控件封装成activity,activity启动设置成单列加载模式,其他activity需要继承ActivityGroup,通过mActivityManager来获取子activity的view,进行添加到新的activity中进行显示,通过activity进行视图嵌套
//启动activity获取该activity根视图
View view=mActivityManager.startActivity(“”,new Intent(this, ActivityTest1.class)).getDecorView();
//将activity的根视图添加到另外一个activity视图中
contentlayout.addView(mActivityManager.startActivity(“”,view,LinearLayout.LayoutParams .FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);
应用实列: 入淘宝京东购物app, 购物车模块,购物车可以在任何页面(主页,商品详情页面等页面)出现,为了保证购物车模块的独立性,降低模块间耦合性,方便维护,可以将购物车封装成Activity,设置该activity为单列,保证只有一个该购物车对象,同时能够在各种场景(activity)出现,而不是将购物车封装成一个普通的view控件
http://woshiwzy.iteye.com/blog/812707 如何将一个activity加载成一个view