2016-10-28 4 views
1

です。私はこの方法でUIを更新します。今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スレッドでshow progressbarに、私はできません。このcode.butを置き換えるためにサブジェクトを使用したいです。のみ最初とdonextで呼ば

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 

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

関連する問題