![[android] 通过比对进行容器联动,第1张 [android] 通过比对进行容器联动,第1张](/aiimages/%5Bandroid%5D+%E9%80%9A%E8%BF%87%E6%AF%94%E5%AF%B9%E8%BF%9B%E8%A1%8C%E5%AE%B9%E5%99%A8%E8%81%94%E5%8A%A8.png)
当中间容器变化之后,标题栏也要跟着变化
设计个比对依据:
抽象类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
* 修改标题 changeTitle(){ setChanged(); notifyObservers(currentVIEw.getID()); }
TitleManager.java
*/ @OverrIDe update(Observable observable,Object data) { if(data!=null && StringUtils.isNumeric(data.toString())){ switch (Integer.parseInt(data.toString())) { case ConstantValue.VIEW_INDEX: showLoginTitle(); break; ConstantValue.VIEW_LOGIN: showUnloginTitle(); ; } } }
IndexVIEw.java
* 返回ID int getID() { return ConstantValue.VIEW_INDEX; }
ConstantValue.java
package com.tsh.lottery; * 常量类 * @author taoshihan * */ ConstantValue { final static int VIEW_INDEX=1;首页界面ID int VIEW_LOGIN=2;登陆界面ID}
1.中间容器变成被观察的对象,继承Observable
2.标题容器变成观察者,实现Observer接口
3.建立观察者和被观察者之间的关系,标题被增加到中间容器的数组里面
4.一旦中间容器变动,修改boolean值,然后通知所有的观察者.update()
总结
以上是内存溢出为你收集整理的[android] 通过比对进行容器联动全部内容,希望文章能够帮你解决[android] 通过比对进行容器联动所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)