使用Rxbus通知Activity页面刷新,不立刻刷新,延迟到activity onResume 后才刷新

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);
            }));
        });
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值