2016-10-28 33 views
1

。我用这种方式来更新用户界面。如何在Next()之前使用PublishSubject更新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 
         }) 

现在,我想用在主题UI线程来代替这个code.but我不能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

如果您需要进行进度是在一些事件可见(点击或东西),然后消失了,当反应过来:

你可以只是进度知名度 final PublishSubject<Boolean> progressSubject = PublishSubject.create(); 创建单独PublishSubject某处订阅它:

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

比,在这个 “事件” 只是在做

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

而你在收到回复的地方也采取同样的动作progressSubject.onNext(false);

相关问题