我有一个edittext用户输入一些金额,我有一个默认禁用的继续按钮,只有在金额有效且在某个范围内时才启用,一切正常,直到我尝试将金额格式化为$ 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。
答案 0 :(得分:0)
你有1个Observable订阅者的问题,所以refCunt它会很好!只需在.replay(1).refCount()
末尾添加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);
}
})
.replay(1)
.refCount();