如何在Next()之前使用PublishSubject更新UI;

时间:2016-10-28 07:50:47

标签: rx-java

起初。我用这种方式来更新UI。

RetrofitHelper.getInstance().getGankDaily()
               .getInfo(page)
               .subscribeOn(Schedulers.io())
               .doOnSubscribe(new Action0() {
                @Override
                public void call() {
                    //shwo Progressbar
                }
            }).subscribeOn(AndroidSchedulers.mainThread())
              .observeOn(AndroidSchedulers.mainThread())
              .subscribe(new Action1<Integer>() {
                        @Override
                        public void call(Integer integer) {
                        //hide progressbar
                        })

现在,我想使用subject替换此代码。但我不能在UI线程中show progressbar

InfoGet = new Func1<GankType, Observable<Integer,x>() {
    @Override
    public Observable<x> call(Integer page) {
        return RetrofitHelper.getInstance().getGankDaily().
                getInfo(page)
                .subscribeOn(Schedulers.io());
    }
};                                                         
subject.flatmap(InfoGet)
//.doOnSubscribe(show progressbar).subscribeOn(AndroidSchedulers.mainThread()
.observeOn(AndroidSchedulers.mainThread())
            .share();

public void loadmore(int page){
             subject.next(page);
}
result.compose(new HandleErrorTransformer())//handler error
                        .subscribe(new Action1())//show progressbar

doOnSubscribe最初只调用donext需要new Action1()。 所以我无法找到解决这个问题的好方法。 我是rxjava的初学者。

1 个答案:

答案 0 :(得分:1)

如果您需要在某些事件(点击或其他内容)上显示progressBar,然后在响应出现时消失:

您可以仅为progressBar可见性创建单独的PublishSubject final PublishSubject<Boolean> progressSubject = PublishSubject.create(); 并在某处订阅它:

 progressSubject.subscribe(new Action1<Boolean>() {
      @Override
      public void call(Boolean isVisible) {
             // make progressBar VISIBLE or GONE according to isVisible
      }
 });

比这个&#34;事件&#34;只是做着

 clickObservable
      .doOnNext(new Action1<Boolean>() {
           @Override
           public void call(Boolean isVisible) {
                  progressSubject.onNext(true);
           }
        })
      .//someSubscription...

您收到回复的同一行动progressSubject.onNext(false);