RxJava/RxAndroid - 处理多个EditText更改

g.r*_*ion 8 java android reactive-programming rx-java rx-android

我有3个EditText字段,我为这些字段创建了3个observable.

    Observable<CharSequence> o1 = RxTextView.textChanges(field1);
    Observable<CharSequence> o2 = RxTextView.textChanges(field2);
    Observable<CharSequence> o3 = RxTextView.textChanges(field3);
Run Code Online (Sandbox Code Playgroud)

当所有这三个字段都有一些值时,我想启用一个按钮.用户可以在字段中以任何顺序输入值.我怎样才能做到这一点?

编辑

我使用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)
Run Code Online (Sandbox Code Playgroud)

当我在所有三个文本字段中输入内容时,上述情况有效.例如,我在所有三个文本字段中输入了1个字符,然后按钮将被启用.但是当我删除三个字段中的任何一个字符时.zip不会被调用,因为它会在订阅者调用onNext之前等待其他两个文本字段流式传输某些数据.所以当我删除任何文本字段中的任何字符时,我希望我的按钮再次被禁用.我怎样才能做到这一点?