RxJava/RxAndroid的新手,我发现缺乏令人不安的例子.作为一种使用Rx的方法,id喜欢试着让小东西工作.基本上,如果EditText
输入了文本,则Button
在其下方启用.
我遇到了这个答案,但作者编辑并没有真正展示如何完全实现这样的东西.
根据我收集的内容,我可以使用RxBindings创建Observable
类似:
Observableobservable = RxTextView.textChanges(mEditText);
按说我现在需要.subcribe()
一个Observer
值得关注的变化observable
,但我不确定如何做到这一点来完成.
另外,如果需要,如何在不使用RxBindings的情况下创建EditTexts Observable?
编辑:虽然存在Retrolambda,但显示如何在没有lambda(或两者)的情况下实现它的答案将会有所帮助.
Observableobservable = 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
来监视更改并在文本更改时发出项目.
为了订阅Observable
,你会做这样的事情.
Observableobservable = RxTextView.textChanges(mEditText).skip(1); mButton.setEnabled(false) observable.subscribe(mButton -> mButton.setEnabled(true));
如果您不使用retrolambda
,您可以执行以下操作:
Observableobservable = RxTextView.textChanges(mEditText).skip(1); mButton.setEnabled(false); observable.subscribe(new Action1 (){ @Override public void call(CharSequence c) { mButton.setEnabled(true); } });
至于你问题的第二部分:说实话,我不确定,但我猜你会TextWatcher
在EditText
每次文本更改时添加一个并触发事件(using Observable.just(charSequenceAfterEdit)
).