android观察者模式容器联动,[android] 通过比对进行容器联动

当中间容器变化之后,标题栏也要跟着变化

设计个比对依据:

抽象类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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值