combineLatest中的可选Observable

时间:2017-11-22 09:47:23

标签: android kotlin observable reactive-programming rx-java2

如果所有值至少改变一次,则rx中定义的combineLatest只会发出。

  

(只要每个源Observable发出至少一个   项)

我用它来操作我的android视图中的视图。 例如,只要所有可观察对象都发出有效值,我就会启用一个号召性用语按钮。否则我禁用它。

    Observable.combineLatest(
            toObservable(email),
            toObservable(username),
            toObservable(status),
            toObservable(phonenumber),
            toObservable(birthdate),
            Function5<String, String, String, String, Date, Boolean> { email, username, status, phonenumber, birthdate ->
                validator?.checkEmail(email) ?: true
                // and much more...
            }
    ).subscribeBy { ctaEnabled.set(it) }

如果所有值至少更改了一个,则ctaEnabled仅设置为该片段。因为只有在所有Observable都发出至少1个项目时才会调用Function5。

但是,状态和生日的字段是可选的,不得填写。 因为所有ObservableField都使用null初始化并且无法显式设置为null(rxjava 2中不允许),因此当用户未在其中键入文本时,不会发出状态和生日。

val status: ObservableField<String> = ObservableField()
val phonenumber: ObservableField<String> = ObservableField()
val birthdate: ObservableField<Date> = ObservableField()
// ... and so on

我考虑使用.startWith("")来解决字符串Observables的问题,因为所有字符串Observable都至少发出一个空字符串。 但我无法在Date字段中使用此解决方案,因为它可以为空。

也许combineLatest不是我正在搜索的操作,但我找不到合适的方法来处理可选的observable。

最好的问候&amp;谢谢, Moritz的

0 个答案:

没有答案