使用 RxBinding 同步两个视图
synchronise two views with RxBinding
我使用 RxJava 的 throttleFirst 一秒钟来避免快速点击按钮,但是我也希望在点击一个按钮时第二个按钮也被禁用一秒钟,反之亦然,
所以,简而言之,我不允许一个接一个地快速点击这两个按钮……你会推荐什么?我可以使用 RxBinding 实现吗?
RxView.clicks(button)
.throttleFirst(1000, TimeUnit.MILLISECONDS)
.subscribe {
doSomething()
}
这是一种可能的方法...
- 为每个按钮创建一个流
- 您可能需要知道单击了哪个按钮,因此
map
每个流的输出到将在订阅者中处理的某个已知值
merge
两个流在一起,throttleFirst
合并流
这看起来像这样:
RxView.clicks(button1).map { "button1" }
.mergeWith(RxView.clicks(button2).map { "button2" })
.throttleFirst(1, TimeUnit.SECONDS)
.subscribeBy(
onNext = { value ->
if(value == "button1") {
// handle button1 click
} else {
// handle button2 click
}
},
onError = {
...
}
)
也许不是最优雅的,但希望它至少能激发一些思考!
我使用 RxJava 的 throttleFirst 一秒钟来避免快速点击按钮,但是我也希望在点击一个按钮时第二个按钮也被禁用一秒钟,反之亦然, 所以,简而言之,我不允许一个接一个地快速点击这两个按钮……你会推荐什么?我可以使用 RxBinding 实现吗?
RxView.clicks(button)
.throttleFirst(1000, TimeUnit.MILLISECONDS)
.subscribe {
doSomething()
}
这是一种可能的方法...
- 为每个按钮创建一个流
- 您可能需要知道单击了哪个按钮,因此
map
每个流的输出到将在订阅者中处理的某个已知值 merge
两个流在一起,throttleFirst
合并流
这看起来像这样:
RxView.clicks(button1).map { "button1" }
.mergeWith(RxView.clicks(button2).map { "button2" })
.throttleFirst(1, TimeUnit.SECONDS)
.subscribeBy(
onNext = { value ->
if(value == "button1") {
// handle button1 click
} else {
// handle button2 click
}
},
onError = {
...
}
)
也许不是最优雅的,但希望它至少能激发一些思考!