我有4个文本输入字段。当用户在任何字段中输入文本时,我将启用一个按钮。为此,我将结合使用4个在其流中接收文本的可观察对象来使用CombineLatest。我对如何获取每个可观察物的最新价值一无所知。注意:我想使用一个数组,因为最终将有4个以上的输入字段。我也在寻找Kotlin的解决方案。
val text1: PublishSubject<String> = PublishSubject.create()
val text2: PublishSubject<String> = PublishSubject.create()
val text3: PublishSubject<String> = PublishSubject.create()
val text4: PublishSubject<String> = PublishSubject.create()
val inputs = Arrays.asList(
text1, text2, text3, text4
)
Observable.combineLatest(inputs) {
// How do I access the latest value from each observable?
}
答案 0 :(得分:2)
在lambda内,您得到一个数组。该数组的第i个元素(在下面的示例中为arrayOfEmissions
)对应于第i个可观察到的最新元素。
Observable.combineLatest(inputs) { arrayOfEmissions ->
}
答案 1 :(得分:0)
您可以将它们组合起来,并提供一个将值包装到自定义类中的函数:
Observable.combineLatest(
text1,
text2,
text3,
text4,
Function4<String, String, String, String, LatestResult> { t1, t2, t3, t4 ->
LatestResult(t1, t2, t3, t4)
})
.subscribe { latestResult ->
// Access the latest results here:
println(latestResult.text1)
println(latestResult.text2)
println(latestResult.text3)
println(latestResult.text4)
}
}
data class LatestResult(val text1: String, val text2: String, val text3: String, val text4: String)