您的位置:首页 > 移动开发 > Android开发

[android] 通过比对进行容器联动

2016-06-29 11:22 435 查看
当中间容器变化之后,标题栏也要跟着变化

设计个比对依据:

抽象类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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: