摘要:在网络请求时,要弹出加载框或按钮不能二次点击,rxjava一句话搞定
public static <T> Observable.Transformer<T, T> loadingDialog() {
final AppLoadingDialog dialog = new AppLoadingDialog();
return new Observable.Transformer<T, T>() {
@Override
public Observable<T> call(Observable<T> tObservable) {
return tObservable.doOnSubscribe(new Action0() {
@Override
public void call() {
dialog.show();
}
}).doOnCompleted(new Action0() {
@Override
public void call() {
dialog.dismiss();
}
}).doOnError(new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
dialog.dismiss();
}
});
}
};
}
public static <T> Observable.Transformer<T, T> disableButtons(final View... views) {
return new Observable.Transformer<T, T>() {
@Override
public Observable<T> call(Observable<T> tObservable) {
return tObservable.doOnSubscribe(new Action0() {
@Override
public void call() {
for (View v : views) {
v.setEnabled(false);
}
}
}).doOnCompleted(new Action0() {
@Override
public void call() {
for (View v : views) {
v.setEnabled(true);
}
}
}).doOnError(new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
for (View v : views) {
v.setEnabled(true);
}
}
});
}
};
}
observable.
.compose(RxUtils.<ApiPojo<Object>>disableButtons(disableView))
.compose(RxUtils.<ApiPojo<Object>>loadingDialog())
.subscribe();
一句话,是不是很简单呢。loadingDialog出现时界面已经不能点击了,所以并不需要disableButton