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

 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/5382.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论