使用RxBinding同步两个视图

时间:2018-06-05 15:14:14

标签: android rx-java2 throttling rx-binding

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

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

1 个答案:

答案 0 :(得分:0)

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

  1. 为每个按钮创建一个流
  2. 您可能需要知道点击了哪个按钮,因此map每个流的输出为将在订阅者中处理的某个已知值
  3. merge两个流一起和throttleFirst合并流
  4. 这看起来像这样:

    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 = {
                        ...
                    }
            )
    

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