我正在努力解决一个 RxJava 用例,需要一些助手。
单击按钮时,我会打开一个对话框让用户选择一个值。对话框需要等于先前选择的值(或默认值)的初始值。我尝试像这样实现它:
Observables.combineLatest(
RxView.clicks(my_button),
viewModel.valueObservable
)
.subscribe { clickAndValuePair->
showDialog(
initialValue = clickAndValuePair.second
)
}
问题是,当选择新值时,对话框会再次打开,因为新值是在此组合的 Observable 中发出的。处理这种情况的最佳做法是什么?
最佳答案
您也许可以使用 zip()
运算符来处理此问题:
Observables.zip(
RxView.clicks(my_button),
viewModel.valueObservable
).subscribe {
showDialog(initialValue = it.second)
}
zip 操作将 observables 的每一个 n 项匹配在一起,因此它总是在发出后等待点击。为此,您需要确保仅更新对话框中的值,并且始终从那里更新它。即使您没有更新任何内容。
一个更好的替代方案可能是只要点击withLatestFrom()
就获取最新值。运算符:
RxView.clicks(my_button)
.withLatestFrom(viewModel.valueObservable)
.subscribe { showDialog(initialValue = it.second)}
关于android - 如何在 RxJava2/RxKotlin 中正确组合包含点击事件和值的 Observables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56073848/