我有一个编辑文本,用户输入一些金额,我有一个继续按钮,默认情况下禁用,只有在金额有效且在一定范围内才启用,一切工作正常,直到我尝试将金额格式化为$2000或$10,000。以下是我如何使用WidgetObservable编辑文本。
Observable<Boolean> amountValidObervable = WidgetObservable.text(amount, false)
.debounce(500,TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.map(new Func1<OnTextChangeEvent, Boolean>() {
@Override
public Boolean call(OnTextChangeEvent event) {
CharSequence amount = event.text();
return isValid(amount);
}
});
formChangeSubscription = amountValidObservable.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean isValid) {
amountLayout.setErrorEnabled(isValid ? false : true);
amountLayout.setError(isValid ? null : "Please enter amount within the range");
}
});
amountValidObservable.subscribe(new Subscriber<Boolean>() {
@Override
public void onCompleted() {
log.debug("formChangeObservable completed");
}
@Override
public void onError(Throwable e) {
log.debug("formChangeObservable error!");
}
@Override
public void onNext(Boolean formValid) {
nextBtn.setBackgroundResource(R.drawable.btn);
nextBtn.setEnabled(formValid);
}
});
我想用类似
的东西来格式化编辑文本的文本DecimalFormat decimalFormat = new DecimalFormat("$#,###");
当用户键入时,我如何使用RxJava的这个格式化器来格式化文本?请注意,由于一些依赖,我还不能使用RxBindings。
问题是你有2个订阅者到1个可观察对象,所以将是很好的refcount它!只要在amountValidObervable
的后面加上.replay(1).refCount()
就成了:
WidgetObservable.text(amount, false)
.debounce(500,TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.map(new Func1<OnTextChangeEvent, Boolean>() {
@Override
public Boolean call(OnTextChangeEvent event) {
CharSequence amount = event.text();
return isValid(amount);
}
})
.replay(1)
.refCount();