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

设计个比对依据:

抽象类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] 通过比对进行容器联动的更多相关文章

  1. Android实现两个ScrollView互相联动,同步滚动的效果

    公众号:smart_android 作者:loonggg 点击"阅读原文",可查看更多内容和干货 最近在做一个项目,用到了两个ScrollView互相联动的效果,简单来说联动效果意 ...

  2. android 带表头,左右两个联动的ListView

    package com.rytong.mylist; import java.util.ArrayList; import java.util.HashMap; import java.util.Li ...

  3. Android实现导航菜单随着ListView联动,当导航菜单遇到顶部菜单时停止在哪里,并且listview仍能滑动

    需求:现要实现一个特殊UI的处理,如下图所示: 该布局的上面是一个“按钮”,中间是一个“空白布局(当然也可以是ViewPager等)”,下面是一个页面的导航菜单,底部是一个ListView. 要求:滑 ...

  4. Android自定义View(LineBreakLayout-自动换行的标签容器)

      最近一段时间比较忙,都没有时间更新博客,今天公司的事情忙完得空,继续为我的自定义控件系列博客添砖加瓦.本篇博客讲解的是标签自动换行的布局容器,正好前一阵子有个项目中需要,想了想没什么难度就自己弄了 ...

  5. android电子书App、自定义图表、仿腾讯漫画App、仿淘宝优惠券、3D选择容器等源码

    Android精选源码 仿支付宝记账本功能,饼状图:数字键盘 android一款功能完善的电子书应用源码 Android自定义图标库,使用方便,扩展性强 android 3D立体无限旋转容器源码 an ...

  6. Android 中常见控件的介绍和使用

    1 TextView文本框 1.1 TextView类的结构 TextView 是用于显示字符串的组件,对于用户来说就是屏幕中一块用于显示文本的区域.TextView类的层次关系如下: java.la ...

  7. android中文api(79)——Gallery

    前言 本章内容是 android.widget.Gallery,版本为Android 2.3 r1,翻译来自"henly.zhang",欢迎大家访问他的博客:http://www. ...

  8. 【Android自学日记】五大布局常用属性

    线性布局(LinearLayout)常用属性: android:orientation="vertical"--决定子类控件的排布方式(vertical垂直:horizontal水 ...

  9. android用户界面之Gallery3D学习资料汇总

    一.Gallery之根蒂根基教程1.Android Gallery与衍生BaseAdapter容器 http://www.apkbus.com/android-6249-1-1.html 2.Andr ...

随机推荐

  1. dataframe 转为list

    首先使用np.array()函数把DataFrame转化为np.ndarray(),再利用tolist()函数把np.ndarray()转为list.

  2. 代理服务器和NAT技术

    一.代理服务器 所谓“代理”,就是代而劳之的意思.代理服务器就是代理网络用户去取得网络信息,形象的说:它是网络信息的中转站,使得一个网络终端和另一个网络终端不直接进行相连,代理网络用户去取得信息.主要 ...

  3. exec和xargs

    参考:http://www.cnblogs.com/itxdm/p/5936907.html 一. 先复习下find命令 1. name参数 find -name tom 或 find -iname ...

  4. nginx高性能WEB服务器系列之六--nginx负载均衡配置+健康检查

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  5. CH5102 Mobile Service

    CH5102 Mobile Service 描述 一个公司有三个移动服务员,最初分别在位置1,2,3处.如果某个位置(用一个整数表示)有一个请求,那么公司必须指派某名员工赶到那个地方去.某一时刻只有一 ...

  6. POJ-3126-Prime Path(BFS)

    Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 27852   Accepted: 15204 Desc ...

  7. leetcode-821-Shortest Distance to a Character

    题目描述: Given a string S and a character C, return an array of integers representing the shortest dist ...

  8. Laravel一些常用命令整理

    自动创建项目 laravel new || laravel new xxx || composer create-project --prefer-dist laravel/laravel blogc ...

  9. C#-函数的传值与传址

    传值就是将实参的值传到所调用的函数里面,实参的值并没有发生变化,默认传值的有int型,浮点型,bool型,char字符型,结构体等等. 传址就是将地址传到所调用的函数里面操作,实参的值也会跟着变化,传 ...

  10. try语句块和异常处理

    在C++中,异常处理包括: · throw表达式(throw expression) 异常检测部分使用throw表达式来表示它遇到了无法处理的问题.throw表达式抛出一个异常并把控制权转移到能处理该 ...