1,。 写一个 RxBus 类
package com.wjay.yao.layiba.mvp.rxjava; import rx.Observable; import rx.subjects.PublishSubject; import rx.subjects.SerializedSubject; import rx.subjects.Subject; /** * 作者:Creater by yao * 邮箱:1365767731@qq.com */ public class RxBus { private final Subject<Object,Object> rxBus; private static volatile RxBus defaultInstance; private RxBus(){ rxBus = new SerializedSubject<>(PublishSubject.create()); }; public static RxBus getDefault(){ if(defaultInstance == null){ synchronized (RxBus.class){ if(defaultInstance == null){ defaultInstance = new RxBus(); } } } return defaultInstance; } /** * 发送一个新的事件 * @param o */ public void post(Object o){ rxBus.onNext(o); } /** * 根据传递的 eventtype 类型返回特定类型(eventType)的观察者 * @param eventType * @param <T> * @return */ public <T>Observable<T> toObservable(Class<T> eventType){ return rxBus.ofType(eventType); } }
2.在想要 发信息的地方: RxBus.getDefault.post(new TagEvent); 和eventbus一样 需要一个标记的类 也可以用于传输数据 最好一个tag对应一个
3.这样就进行了数据和事件的传输,在需要相应的地方 进行如下操作:
// 使用rxbus 接收进行数据的传递 private Subscription rxSubscription;
private void getRxjavaData(){
rxSubscription =RxBus.getDefault() .toObservable(TagEvent.class) .subscribe(new Action1<TagEvent>() { @Override public void call(TagEvent tagEvent) { int tag = tagEvent.getTag(); Log.e("rxbus",tag+" tagevent"); pullToRefreshListView.setRefreshing(true); } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { // 处理异常 } });
}