0

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

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

1 回答 1

0

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

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

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

于 2018-06-06T09:59:17.493 回答