zoukankan      html  css  js  c++  java
  • [android] 通过比对进行容器联动

    当中间容器变化之后,标题栏也要跟着变化

     

    设计个比对依据:

    抽象类BaseView中定义抽象方法,每个继承的View都必须实现,为自己的界面定义一个唯一的int常量,作为比对依据

     

    降低容器之间的耦合度:

    中间容器干了其他容器的活,耦合度很高,中间容器应该只需要去“通知”其他容器就可以了

    使用观察者模式为中间容器变动增加监听,解决如果有多个关联容器的问题

     

    观察者模式:

    被观察的对象======>中间容器

    观察者============>标题容器

    被观察的对象{
    List<观察者> lists;
      boolean isChange=false;
        setChange(){
         isChange=true;
      }
      notify(){
        for(观察者 item:lists){
        item.update();
      }
      }
    }

    MainActivity.java

        /**
         * 初始化主体
         */
        public void initMiddle() {
            mainContainer=(RelativeLayout) findViewById(R.id.il_main);
            MiddleManager.getInstance().setMainContainer(mainContainer);
            MiddleManager.getInstance().loadView(LoginView.class);
            //添加观察者
            MiddleManager.getInstance().addObserver(TitleManager.getInstance());
        }

    MiddleManager.java

        /**
         * 修改标题
         */
        public void changeTitle(){
            setChanged();
            notifyObservers(currentView.getID());
        }

    TitleManager.java

        /**
         * 修改标题
         */
        @Override
        public void update(Observable observable, Object data) {
            if(data!=null && StringUtils.isNumeric(data.toString())){
                switch (Integer.parseInt(data.toString())) {
                case ConstantValue.VIEW_INDEX:
                    showLoginTitle();
                    break;
                case ConstantValue.VIEW_LOGIN:
                    showUnloginTitle();
                    break;
                }
            }
        }

    IndexView.java

        /**
         * 返回id
         */
        @Override
        public int getID() {
            return ConstantValue.VIEW_INDEX;
        }

    ConstantValue.java

    package com.tsh.lottery;
    /**
     * 常量类
     * @author taoshihan
     *
     */
    public class ConstantValue {
        public final static int VIEW_INDEX=1;//首页界面id
        public final static int VIEW_LOGIN=2;//登陆界面id
    }

     

    1.中间容器变成被观察的对象,继承Observable

    2.标题容器变成观察者,实现Observer接口

    3.建立观察者和被观察者之间的关系,标题被增加到中间容器的数组里面

    4.一旦中间容器变动,修改boolean值,然后通知所有的观察者.update()

     

  • 相关阅读:
    Alpha冲刺(5/10)
    Alpha冲刺(4/10)
    团队现场编程
    关于合同标准形的专题讨论
    关于相似标准形的专题讨论
    关于数学分析的计算题I(积分)
    关于数学分析的证明题III(级数)
    关于数学分析的证明题II(微分)
    关于数学分析的证明题I(积分)
    关于反常积分收敛的专题讨论
  • 原文地址:https://www.cnblogs.com/taoshihan/p/5626217.html
Copyright © 2011-2022 走看看