当中间容器变化之后,标题栏也要跟着变化
设计个比对依据:
抽象类BaseView中定义抽象方法,每个继承的View都必须实现,为自己的界面定义一个唯一的int常量,作为比对依据
降低容器之间的耦合度:
中间容器干了其他容器的活,耦合度很高,中间容器应该只需要去“通知”其他容器就可以了
使用观察者模式为中间容器变动增加监听,解决如果有多个关联容器的问题
观察者模式:
被观察的对象======>中间容器
观察者============>标题容器
被观察的对象{
Listlists;boolean isChange=false;
setChange(){
isChange=true;
}
notify(){for(观察者 item:lists){
item.update();
}
}
}
MainActivity.java
/*** 初始化主体*/
public voidinitMiddle() {
mainContainer=(RelativeLayout) findViewById(R.id.il_main);
MiddleManager.getInstance().setMainContainer(mainContainer);
MiddleManager.getInstance().loadView(LoginView.class);//添加观察者
MiddleManager.getInstance().addObserver(TitleManager.getInstance());
}
MiddleManager.java
/*** 修改标题*/
public voidchangeTitle(){
setChanged();
notifyObservers(currentView.getID());
}
TitleManager.java
/*** 修改标题*/@Overridepublic voidupdate(Observable observable, Object data) {if(data!=null &&StringUtils.isNumeric(data.toString())){switch(Integer.parseInt(data.toString())) {caseConstantValue.VIEW_INDEX:
showLoginTitle();break;caseConstantValue.VIEW_LOGIN:
showUnloginTitle();break;
}
}
}
IndexView.java
/*** 返回id*/@Overridepublic intgetID() {returnConstantValue.VIEW_INDEX;
}
ConstantValue.java
packagecom.tsh.lottery;/*** 常量类
*@authortaoshihan
**/
public classConstantValue {public final static int VIEW_INDEX=1;//首页界面id
public final static int VIEW_LOGIN=2;//登陆界面id
}
1.中间容器变成被观察的对象,继承Observable
2.标题容器变成观察者,实现Observer接口
3.建立观察者和被观察者之间的关系,标题被增加到中间容器的数组里面
4.一旦中间容器变动,修改boolean值,然后通知所有的观察者.update()