两个Activity之间的观察者模式
来源:互联网 发布:淘宝玻璃茶具销量前十 编辑:程序博客网 时间:2024/05/20 16:09
需求是在闪屏页面启动定位功能,在MainActivity中更改位置信息。如果定位功能在MainActivity生成之前完成。则在MainActivity初始化时就有位置信息。若由于网络原因等在MainActivity生成之后才完成定位,这时候需要通知MainActivity改变定位信息。就涉及到了观察者模式。
最初我的想法是将闪屏页面设为具体通知者,将MainActivity设为具体观察者。结果在给通知者添加观察者的时候发现了问题。因为在闪屏页面中MainActivity还没有被创建。也就没有MainActivity对象。这就没法给观察者设置监听了。
解决方法是将设置监听的过程放到MainActivity中,而通知者设置为一个单例的类。而观察者依然是MainActivity。这样如果定位在MainActivity创建之前执行完成,则不需要绑定监听。如果在MainActivity创建之后执行完成,则MainActivity把自身设置为观察者。在定位结束之后就会由通知者发送通知给观察者。
具体代码:
MainActivity中绑定监听
private IGetCityNameListener getCityNameListener;
if (CITY_NAME != null) {
textViewLocation.setText(CITY_NAME);
} else {
getCityNameListener = EventListener.getEventListener();
getCityNameListener.addWeacher(this);
}
通知者类:
public class EventListener implements IGetCityNameListener {
private ICityNameWacher cityNameWacher;
private static EventListener eventListener;
private EventListener() {
}
// 单例模式使两个Activity使用同一个通知者类对象。
public static EventListener getEventListener() {
if (eventListener == null) {
synchronized (EventListener.class) {
if (eventListener == null) {
EventListener temp = new EventListener();
eventListener = temp;
}
}
}
return eventListener;
}
@Override
public void addWeacher(ICityNameWacher cityNameWacher) {
this.cityNameWacher = cityNameWacher;
}
@Override
public void removeWeacher(ICityNameWacher cityNameWacher) {
// TODO Auto-generated method stub
}
@Override
public void sendChange() {
// 如果观察者为空则说明在MainActivity创建之前定位服务已经完成,不需要发送更改的通知。
if (cityNameWacher != null) {
cityNameWacher.updateCityName();
}
}
}
- 两个Activity之间的观察者模式
- 两个Activity之间的跳转
- [观察者模式]当观察者模式遇到突如其来的“飓风”——“天气”主题与“学校”和“公司”两个观察者之间的故事
- 两个Activity之间跳转问题之activity的四种加载模式
- 基于观察者模式的activity通信
- Android中两个Activity之间的跳转
- 关于两个Activity之间切换的情况
- android学习:两个Activity之间的数据传输
- 两个不相关Activity之间的通信
- 两个Activity之间的切换动画
- 两个,三个Activity之间的相互跳转
- 两个Activity之间跳转执行的生命周期
- 两个Activity之间数据的传递
- 两个Activity之间切换
- Activity的生命周期以及两个activity之间跳转的问题
- 四大组件Activity之两个Activity之间的交互
- Android笔记 关掉两个Activity之间的Activity
- 利用观察者模式实现Service与Activity的通信
- Alphabet 和 Facebook的Stratospheric Internet纠结于繁文缛节
- Android消息处理机制
- Shell - 13
- cocospod 搭建环境和使用
- 2016.4.4HTML表格,列表,块,布局
- 两个Activity之间的观察者模式
- IOC控制反转
- Gson解析数据使用笔记
- bzoj 2648
- 思考未来(一)
- 《MySQL必知必会学习笔记》:插入数据
- 关闭 dialog
- 【编程之法】A.1 语言基础
- Linux应用程序地址布局