我正在为一个RxJava用例而苦苦挣扎,并且可能会使用一些助手。
单击按钮时,我打开一个对话框,让用户选择一个值。对话框需要的初始值等于先前选择的值(或默认值)。我尝试这样实现:
Observables.combineLatest(
RxView.clicks(my_button),
viewModel.valueObservable
)
.subscribe { clickAndValuePair->
showDialog(
initialValue = clickAndValuePair.second
)
}
问题是,当选择新值时,对话框再次打开,因为在此组合的Observable中发出了新值。处理这种情况的最佳做法是什么?
答案 0 :(得分:3)
您也许可以使用&& i !== i2
运算符来处理此问题:
zip()
zip操作将可观察对象的每个 n 项匹配在一起,因此它始终在发出后等待单击。为此,您需要确保仅从对话框更新值,并始终从那里更新它。即使您没有更新任何内容。
更好的选择可能是只要在withLatestFrom()
运算符单击时获取最新值:
Observables.zip(
RxView.clicks(my_button),
viewModel.valueObservable
).subscribe {
showDialog(initialValue = it.second)
}