如果所有值至少改变一次,则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的