【发布时间】:2016-07-12 11:56:24
【问题描述】:
我有 3 个 EditText 字段,并为这些字段创建了 3 个 observables。
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 之前流式传输一些数据。所以当我删除任何文本字段中的任何字符时,我希望我的按钮再次被禁用。我怎样才能做到这一点?
【问题讨论】:
标签: java android reactive-programming rx-java rx-android