• [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()

     

  • 相关阅读:
    jupytr notebook远程登录Linux服务器,切换conda虚拟环境
    Linux 命令su 和 su -执行机制的区别
    Shell编程知识4-su详细
    Shell编程知识3
    Shell编程知识2
    Ubuntu # echo $PATH //查看当前用户的环境变量--》修改配置环境变量
    Util和Helper类
    Qt QBarSeries简易柱状图教程
    解决QIcon引用qrc不显示图片
    qt调用quit()后未结束线程解决方案
  • 原文地址:https://www.cnblogs.com/taoshihan/p/5626217.html
Copyright © 2020-2023  润新知