当前位置:  开发笔记 > Android > 正文

EditText有文本时启用按钮(RxAndroid)

如何解决《EditText有文本时启用按钮(RxAndroid)》经验,为你挑选了2个好方法。

RxJava/RxAndroid的新手,我发现缺乏令人不安的例子.作为一种使用Rx的方法,id喜欢试着让小东西工作.基本上,如果EditText输入了文本,则Button在其下方启用.

我遇到了这个答案,但作者编辑并没有真正展示如何完全实现这样的东西.

根据我收集的内容,我可以使用RxBindings创建Observable类似:

Observable observable = RxTextView.textChanges(mEditText);

按说我现在需要.subcribe()一个Observer值得关注的变化observable,但我不确定如何做到这一点来完成.

另外,如果需要,如何在不使用RxBindings的情况下创建EditTexts Observable?

编辑:虽然存在Retrolambda,但显示如何在没有lambda(或两者)的情况下实现它的答案将会有所帮助.



1> LordRaydenMK..:
Observable observable = RxTextView.textChanges(mEditText);
    observable.map(new Func1() {
        @Override
        public Boolean call(CharSequence charSequence) {
            return charSequence.length() > 0;
        }
    }).subscribe(new Subscriber() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(Boolean aBoolean) {
             mButton.setEnabled(aBoolean);
        }
    });

不要忘记保留对订阅的引用,并在不再需要时取消订阅(例如in onDestroy).

RxJava-Android-Samples包含适用于Android的RxJava示例.看看这个.您可能想查看表单验证示例.

另外,如果需要,如何在不使用RxBindings的情况下创建EditTexts Observable?

您可以查看实施情况.它是开源的.在内部,它使用a TextWatcher来监视更改并在文本更改时发出项目.



2> W.K.S..:

为了订阅Observable,你会做这样的事情.

Observable observable = RxTextView.textChanges(mEditText).skip(1);
mButton.setEnabled(false)
observable.subscribe(mButton -> mButton.setEnabled(true));

如果您不使用retrolambda,您可以执行以下操作:

Observable observable = RxTextView.textChanges(mEditText).skip(1);
mButton.setEnabled(false);
observable.subscribe(new Action1(){

    @Override
    public void call(CharSequence c) {
        mButton.setEnabled(true);
    }

});

至于你问题的第二部分:说实话,我不确定,但我猜你会TextWatcherEditText每次文本更改时添加一个并触发事件(using Observable.just(charSequenceAfterEdit)).

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有