使用 RxBinding 同步两个视图

synchronise two views with RxBinding

我使用 RxJava 的 throttleFirst 一秒钟来避免快速点击按钮,但是我也希望在点击一个按钮时第二个按钮也被禁用一秒钟,反之亦然, 所以,简而言之,我不允许一个接一个地快速点击这两个按钮……你会推荐什么?我可以使用 RxBinding 实现吗?

RxView.clicks(button)
                .throttleFirst(1000, TimeUnit.MILLISECONDS)
                .subscribe {
                    doSomething()
                }

这是一种可能的方法...

  1. 为每个按钮创建一个流
  2. 您可能需要知道单击了哪个按钮,因此 map 每个流的输出到将在订阅者中处理的某个已知值
  3. 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 = {
                    ...
                }
        )

也许不是最优雅的,但希望它至少能激发一些思考!