我有 3 个 EditText 字段,并且为这些字段创建了 3 个可观察值。
Observable<CharSequence> o1 = RxTextView.textChanges(field1);
Observable<CharSequence> o2 = RxTextView.textChanges(field2);
Observable<CharSequence> o3 = RxTextView.textChanges(field3);
当所有这三个字段都有一些值时,我想启用一个按钮。用户可以在字段中以任意顺序输入值。我怎样才能做到这一点?
EDIT
我使用 zip 来实现这一点。
Observable<CharSequence> o1 = RxTextView.textChanges(field1);
Observable<CharSequence> o2 = RxTextView.textChanges(field2);
Observable<CharSequence> o3 = RxTextView.textChanges(field3);
Observable.zip(o1, o2, o3, (c1, c2, c3) -> c1.length() > 0 && c2.length() > 0 && c3.length() > 0).subscribe(myButton::setEnabled)
当我在所有三个文本字段中输入某些内容时,上述情况就会起作用。例如我在所有三个文本字段中输入了 1 个字符,然后该按钮将被启用。但是当我删除三个字段中任何一个字段中的字符时。 zip 不会被调用,因为它将等待其他 2 个文本字段传输一些数据,然后再调用订阅者的 onNext 。因此,当我删除任何文本字段中的任何字符时,我希望再次禁用我的按钮。我怎样才能做到这一点?
Use CombineLatest
代替zip
http://reactivex.io/documentation/operators/combinelatest.html http://reactivex.io/documentation/operators/combinelatest.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)