起初。我用这种方式来更新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的初学者。
答案 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);