Android中容器之间的联动问题

1.Android下的容器之间的联动?

场景:有三个模块,标题容器Title,中间容器内容Middle(FrameLayout),底部容器导航Bottom,如何实现A,C随着B的变化而变化?

思路:如果能够区分当前正在显示的界面是哪个,那问题不就解决了?


方法一:字节码class判断

           在执行ChangeTitleAndBottom()方法时,见名知意,该方法是用来切换Title和Bottom容器里面的页面内容,

              如果能获取到当前Middle中页面的class文件,不就可以哦了,图中currentUI为当前Middle中正在显示的页面。伪代码如下:



          上述代码貌似就解决了问题,但是如果在团队开发中,就会有问题,因为,这样做的前提是,项目在刚开始的时候就要将所有页面的内容名称给定下来。,所以,我们可以想出另外一种方式,给每个界面绑定一个唯一的标识,根据标识来区分当前所显示的界面。


方法二:唯一标识,switch判断

           


          这样做还是 存在问题:

        1、当界面过多的时候,需要在中间容器中使用大量篇幅的代码去处理标题和底部

         2、如果项目中有其他的容器(如:左右菜单容器)与中间容器联动,  需要在中间容器中使用大量篇幅的代码

               去处理左右两个菜单

     那么问题来了,开发中到底该如何解决这种问题呢?仔细观察代码,我们不难发现出现这种问题的根本原因,就是代码的耦合度太高了,那么,降低耦合度不就解决了吗?这时,我们可以通过观察者模式来搞定它。


方法三:唯一标识+观察者模式

思路;   我们可以将中间容器视为被观察者,顶部标题栏Title和底部导航栏Bottom设为观察者,将观察者存放到一个有序集合中ArrayList<Observer>。

具体实现步骤:

 操作步骤:
         1、将中间容器Middle变成被观察的对象,作为Observable子类,使用观察者集合

         2、将标题和底部容器变成观察者,作为Observer<I>实现类

         3、将标题和底部容器添加到观察者集合中

         4、当中间容器变动了调用(super.setChanged()),通知(super.notifyObservers(Object data))观察者更新内容, 循环遍历观察者集合
         5、所有的观察者处理update方法

代码如下

被观察者Middle中:



观察者(例如:Title)中代码





       这样做的好处是,以后如果需求更改了,被观察者中的代码完全不需要改动,需要更改的只是观察者集合中的元素。


       

          

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值