RXBus初使用
2018-03-20 17:35
85 查看
public class RxBus { private static volatile RxBus defaultInstance; private final Subject<Object, Object> bus; // PublishSubject只会把在订阅发生的时间点之后来自原始Observable的数据发射给观察者 public RxBus() { bus = new SerializedSubject<>(PublishSubject.create()); } // 单例RxBus public static RxBus getDefault() { if (defaultInstance == null) { synchronized (RxBus.class) { if (defaultInstance == null) { defaultInstance = new RxBus(); } } } return defaultInstance ; } // 发送一个新的事件 public void post (Object o) { bus.onNext(o); } // 根据传递的 eventType 类型返回特定类型(eventType)的 被观察者 public <T> Observable<T> toObservable (Class<T> eventType) { return bus.ofType(eventType); // 这里感谢小鄧子的提醒: ofType = filter + cast // return bus.filter(new Func1<Object, Boolean>() { // @Override // public Boolean call(Object o) { // return eventType.isInstance(o); // } // }) .cast(eventType); } }使用RxBus post数据RxBus.getDefault().post(new UserEvent(1, Constants.RENOVATE));//post方法里面的参数是自己自定义的even
接收RxBus post出来的数据,post出来的数据哪里都可以接收,但是接收的时候首先的保证Subscription已经注册,
如果没有注册,则接收不到注册之前post出来的数据。使用RxBus接收post出来的数据
printSubscribe = RxBus.getDefault().toObservable(StateEvent.class).subscribe(new Action1<StateEvent>() {@Overridepublic void call(StateEvent printEvent) {if (printEvent.getId() == 1) {receiptConnected = printEvent.isConnected();if (receiptConnected) {imgReceiptState.setImageResource(R.drawable.print_receipt_state_open);} else {imgReceiptState.setImageResource(R.drawable.print_receipt_state_close);}}}});根据自定义的event里面的字段,得到RxBus post出来的数据,在进行ui的更新操作
相关文章推荐
- OpenGL(一) 使用Win API 建立黑色窗口
- 安卓APK分析工具APKAnalyser的使用
- List使用总结
- 反射——如何使用反射
- C++中使用pair和make_pair在vector, sort -- ZZ
- webpack 学习笔记 01 使用webpack的原因
- VC中如何使用 CRT 调试功能来检测内存泄漏
- 【万里征程——Windows App开发】使用华丽丽的字体
- 母版页中使用ScriptManager和内容页RegisterStartupScript冲突
- Android中shape的使用
- break、continue、return在for循环中的使用
- Android的ADB工具使用
- cocos2dx使用TiledMap创建斜45度地图场景
- Delphi XE5开发Android程序使用自定义字体文件.
- Rumtime类使用
- 【Apache Solr系列之三】Solr客户端SolrJ API使用文档-增删改
- mysql 打包表在phpmyadmin提示正在使用中..
- python使用装饰器捕获异常
- 在uboot里面添加环境变量使用run来执行