我有三个EditText字段,为这些字段创建了三个可观察对象。
Observable<CharSequence> o1 = RxTextView.textChanges(field1);
Observable<CharSequence> o2 = RxTextView.textChanges(field2);
Observable<CharSequence> o3 = RxTextView.textChanges(field3);
当这三个字段都有值时,我希望能够启用一个按钮。用户可以以任意顺序输入字段中的值。我该如何做到呢?
编辑
我使用了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之前流一些数据。因此,当我在任何文本字段中删除任何字符时,我希望我的按钮再次被禁用。我该如何实现?