当中间容器变化之后,标题栏也要跟着变化
设计个比对依据:
抽象类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()