[android] 通过比对进行容器联动
当中间容器变化之后,标题栏也要跟着变化
设计个比对依据:
抽象类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()
[android] 通过比对进行容器联动的更多相关文章
- Android实现两个ScrollView互相联动,同步滚动的效果
公众号:smart_android 作者:loonggg 点击"阅读原文",可查看更多内容和干货 最近在做一个项目,用到了两个ScrollView互相联动的效果,简单来说联动效果意 ...
- android 带表头,左右两个联动的ListView
package com.rytong.mylist; import java.util.ArrayList; import java.util.HashMap; import java.util.Li ...
- Android实现导航菜单随着ListView联动,当导航菜单遇到顶部菜单时停止在哪里,并且listview仍能滑动
需求:现要实现一个特殊UI的处理,如下图所示: 该布局的上面是一个“按钮”,中间是一个“空白布局(当然也可以是ViewPager等)”,下面是一个页面的导航菜单,底部是一个ListView. 要求:滑 ...
- Android自定义View(LineBreakLayout-自动换行的标签容器)
最近一段时间比较忙,都没有时间更新博客,今天公司的事情忙完得空,继续为我的自定义控件系列博客添砖加瓦.本篇博客讲解的是标签自动换行的布局容器,正好前一阵子有个项目中需要,想了想没什么难度就自己弄了 ...
- android电子书App、自定义图表、仿腾讯漫画App、仿淘宝优惠券、3D选择容器等源码
Android精选源码 仿支付宝记账本功能,饼状图:数字键盘 android一款功能完善的电子书应用源码 Android自定义图标库,使用方便,扩展性强 android 3D立体无限旋转容器源码 an ...
- Android 中常见控件的介绍和使用
1 TextView文本框 1.1 TextView类的结构 TextView 是用于显示字符串的组件,对于用户来说就是屏幕中一块用于显示文本的区域.TextView类的层次关系如下: java.la ...
- android中文api(79)——Gallery
前言 本章内容是 android.widget.Gallery,版本为Android 2.3 r1,翻译来自"henly.zhang",欢迎大家访问他的博客:http://www. ...
- 【Android自学日记】五大布局常用属性
线性布局(LinearLayout)常用属性: android:orientation="vertical"--决定子类控件的排布方式(vertical垂直:horizontal水 ...
- android用户界面之Gallery3D学习资料汇总
一.Gallery之根蒂根基教程1.Android Gallery与衍生BaseAdapter容器 http://www.apkbus.com/android-6249-1-1.html 2.Andr ...
随机推荐
- 点击隐藏显示和点击body空白处隐藏
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [arc082f]Sandglass 递推
Description 有一个沙漏由两个上下相通玻璃球A和B构成,这两个玻璃球都含有一定量的沙子,我们暂且假定AB中位于上方的玻璃球的为U,下方的玻璃球为L,则除非U中没有沙子,否则每秒钟都会有1克沙 ...
- Setup "EQGRP_Lost_in_Translation" Of NAS
Setup "EQGRP_Lost_in_Translation" Of NAS 1.前言: 北京时间4月14号晚,TheShadowBrokers在steemit.com博客上放 ...
- jquery选项卡效果
效果图: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- Hibernate框架基础
Hibernate框架基础 Hibernate框架 ORM概念 O, Object 对象 R, Realtion 关系 (关系型数据库: MySQL, Oracle…) M,Mapping 映射 OR ...
- Log中关于start meeting在zVideoApp和zVideoUI中的流程可以搜索的几个字符串
[31356:36164:04-29/17:53:38.164:INFO:SBConfUI.cpp(940)] CSBConfUI::OnConfStatusChanged(CONF_STATUS) ...
- [CH3803] 扑克牌 (期望DP+记忆化搜索)
[题目链接] [CH3803] 扑克牌 [题面描述] \(54\)张牌,每次随机摸一张,求得到 A张黑桃 B张红桃 C张梅花 D张方块 的期望步数.特别地,大王和小王可以当做任意一种花色,当然,会选择 ...
- JAVA中 this关键字的用法
this 在类中就是代表当前对象,可以通过 this 关键字完成当前对象的成员属性.成员方法和构造方法的调用. 那么何时用 this? 当在定义类中的方法时,如果需要调用该类对象,就可以用 this来 ...
- MVC返回数据流,ajax接受并保存文件
js代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...
- 关于DES加密内部收费版
数据加密算法(Data Encryption Algorithm,DEA)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,最初开发的DEA是嵌入硬件中的.通常,自动取款 ...