前言
经常我们会有这样的需求,B页面操作后,要求A页面处理相关数据,像这样一般我们都是,要么B页面保留A页面的引用,要么使用广播,但是写起来还是想对麻烦的,用Rxbus
就可以很容易和优雅的解决
相同功能的组件用的比较多的有
Otto(不再维护不推荐使用)
和EventBus
如果项目中没有使用
Rxjava
那还是使用EventBus
吧 毕竟Rxbus
只有500+的Star 而EventBus
可是1W+ 而且Rxbus
`很多地方还不完善
使用
总的来说 我们要做的无外乎两件事:发送事件
和 接受事件
但是接受事件的对象一定要先注册到Rxbus
中
添加引用
1 | implementation 'com.hwangjr.rxbus:rxbus:2.0.0' |
注册与取消注册
1 |
|
发送事件
发送事件有两种方式一种为
方式1 自动发送事件
1 | ( |
可以看出我们加了Produce
注解
加了这个注解就会在注册
的时候发送事件
接收方 会根据 设置的Tag
和返回的数据类型
来调用相应的方法,于方法名无关
当然也可以不写tags
和thread
- 默认
tags
为rxbus_default_tag
- 默认
thread
为EventThread.MAIN_THREAD
例如
1 |
|
方式2 手动发送事件
1 | RxBus.get().post("我是新数据"); |
接受事件
加了
Subscribe
注解接受事件的方法也和
方法名无关
只和tags
和传入的参数类型
有关需要注意的是数据类型不能为
interface
类型 也就是说数据类型不能像List<String>
这样,必须为ArrayList<String>
这样的如果
tags一样`
类型也一样`的多个方法,都会接受到相应的事件
默认tags
和thread
1 |
|
自定义tags
和thread
1 | ( |