android - 如何在 RxJava2/RxKotlin 中正确组合包含点击事件和值的 Observables
问题描述
我正在为一个 RxJava 用例而苦苦挣扎,可以使用一些助手。
单击按钮时,我会打开一个对话框让用户选择一个值。对话框需要等于先前选择的值(或默认值)的初始值。我尝试像这样实现它:
Observables.combineLatest(
RxView.clicks(my_button),
viewModel.valueObservable
)
.subscribe { clickAndValuePair->
showDialog(
initialValue = clickAndValuePair.second
)
}
The problem is, when new value is picked the dialog is opened again, because new value is emitted in this combined Observable. 处理这种情况的最佳做法是什么?
解决方案
您可能可以使用zip()
操作员处理此问题:
Observables.zip(
RxView.clicks(my_button),
viewModel.valueObservable
).subscribe {
showDialog(initialValue = it.second)
}
zip 操作将每个可观察对象的第n个项目匹配在一起,因此它总是在发射后等待点击。为此,您需要确保只更新对话框中的值并始终从那里更新它。即使你没有更新任何东西。
更好的选择可能是在withLatestFrom()
操作员单击时获取最新值:
RxView.clicks(my_button)
.withLatestFrom(viewModel.valueObservable)
.subscribe { showDialog(initialValue = it.second)}
推荐阅读
- linux-kernel - 列出绑定到驱动程序的所有设备
- java - 如何在java中获取格式化的ldap objectSid?
- web-scraping - 在 Google 表格中使用 ImportXML
- javascript - MySQL 流和管道数据
- snowflake-cloud-data-platform - 无法解析带双引号的 JSON 对象
- r - 根据两个变量的值有条件地更改变量
- python - 如何在 Pandas DataFrame 中平滑地估算值?
- c# - Windows 会话在运行 Selenium 测试时终止
- reactjs - 如何使我的旧前端和新前端在同一个应用程序域中同时可用?
- python - 熊猫如何过滤串联的多个子字符串