以前我们要想在activity或fragment之间传递信息,我们会通过onActvityResult接收信息。但是这样有一个缺点,一个是代码量太大,重复率太高。二是有时候传递的数据需要经过几个界面的跳转。加入从A->B->C,C界面修改了某些信息,同时,想在A界面进行界面的刷新。那么通过onActvityResult的话很难操作。还有就是,加入从A->B,B传递信息给A界面。以往通过onActvityResult,我们需要在B界面关闭的时候,A界面才能拿到数据,再进行局部刷新,这样的话,A界面很可能会闪烁(数据刷新)。这样的话用户体验感就很差了。那么现在,我们可以怎么做呢。
在未使用Rxjava之前,我用EventBus来进行组件之间的通讯。今天我们暂且不讲EventBus了,我们来讲讲RxBus。
首先,大家最好先了解一下Rxjava,下面是简单的介绍:
简介转载自:
RxJava 是 ReactiveX 在 Java 上的开源的实现。Observable(观察者) 和 Subscriber(订阅者)是两个主要的类。在 RxJava 上,一个 Observable 是一个发出数据流或者事件的类,Subscriber 是一个对这些发出的 items (数据流或者事件)进行处理(采取行动)的类。一个 Observable 的标准流发出一个或多个 item,然后成功完成或者出错。一个 Observable 可以有多个 Subscribers,并且通过 Observable 发出的每一个 item,该 item 将会被发送到 Subscriber.onNext() 方法来进行处理。一旦 Observable 不再发出 items,它将会调用 Subscriber.onCompleted() 方法,或如果有一个出错的话 Observable 会调用 Subscriber.onError() 方法。
首先,附上rxjava/rxandroid的链接,或者直接到github搜索查看最新版本链接
compile 'io.reactivex:rxjava:1.1.0'
compile 'io.reactivex:rxandroid:1.1.0'
废话不多说,直接附上RxBus的代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
代码很简单,先创建一个单例的Rxbus对象,然后可以通过post发出一个事件,发起者作为一个被观察者。或者通过toObservable观察一个事件。
这里解释一下rxjava一般来说有三种动作:onNext,onComplete,OnError.分别对应接下来的动作,还有完成时的动作,出错时的动作。
public Observable toObservable (Class eventType)
这里通过泛型传入一个对象,然后对这个对象进行观察。
那现在可以通过代码来介绍一下如何发起一个事
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
首先,我们要新建一个User对象,作为我们所要发出去的数据。
然后new出一个对象,通过RxBus.getDefault().post();将数据发出去,那么此时,对这个事件订阅的,就会接收到一个通知。其实rxjava就是观察者模式的一个实现。
那么,我们看看怎么接收到数据,代码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
观察对象的时候我使用了lambda表达式进行简写,这是JAVA8的新特性,有兴趣的可以去了解一下,还有一些操作符,如map,flatmap,filter,zip等操作,这里就不做演示了。
这里的代码效果和上面的代码是一样的,如果使用了java8的朋友,在new Action1() 这里按一下ALT+ENTER,就可以进行简化代码。