如何格式化文本与RxJava + RxAndroid WidgetObservable



我有一个编辑文本,用户输入一些金额,我有一个继续按钮,默认情况下禁用,只有在金额有效且在一定范围内才启用,一切工作正常,直到我尝试将金额格式化为$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();

相关内容

  • 没有找到相关文章

最新更新