1.使用Rxbus通知Activity页面刷新,不立刻刷新,延迟到activity onResume 后才刷新
RxBus.getDefault().toObservable(ReportUpdateEvent.class)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
//延迟收到刷新消息
.compose(new Observable.Transformer<ReportUpdateEvent, ReportUpdateEvent>() {
@Override
public Observable<ReportUpdateEvent> call(Observable<ReportUpdateEvent> reportUpdateEventObservable) {
Func1<ActivityEvent, Boolean> func1=new Func1<ActivityEvent, Boolean>() {
@Override
public Boolean call(ActivityEvent activityEvent) {
return activityEvent.equals(ActivityEvent.RESUME);
}
};
//延迟发送事件给订阅者,直到收到activity的Resume事件
Observable<ActivityEvent> o=lifecycleProvider.lifecycle().takeFirst(func1);
//delay 除了可以设置时间,还可以放观察者
return reportUpdateEventObservable.delay(new Func1<ReportUpdateEvent, Observable<ActivityEvent>>() {
@Override
public Observable<ActivityEvent> call(ReportUpdateEvent reportUpdateEvent) {
//o是activity生命周期的观察者
return o;
}
});
}
})
.subscribe(event -> {
Log.e("MyReportListViewModel","收到刷新事件");
if (event.isRefresh()) {
// 新增报事成功后,返回刷新报事页面。
requestData(1);
}
}, throwable -> {
}
2.优化一下代码
RxBus.getDefault().toObservable(ReportUpdateEvent.class)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
//延迟收到刷新消息
.compose(RxUtil.delayTransformerByLife(lifecycleProvider))
.subscribe(event -> {
Log.e("MyReportListViewModel","收到刷新事件");
if (event.isRefresh()) {
// 新增报事成功后,返回刷新报事页面。
requestData(1);
}
}, throwable -> {
})
public class RxUtil {
public static <T> Observable.Transformer<T, T> delayTransformerByLife(LifecycleProvider<?> lifecycleProvider){
return observable-> observable.delay((o)->{
return lifecycleProvider.lifecycle().takeFirst(((activityEvent)->{
return activityEvent.equals(ActivityEvent.RESUME);
}));
});
}
}