синхронизировать два представления с RxBinding - PullRequest
0 голосов
/ 05 июня 2018

Я использую RxJava throttleFirst в течение одной секунды, чтобы избежать быстрых нажатий кнопок, однако я также хочу, чтобы при нажатии кнопки вторая кнопка также была отключена на секунду и наоборот, поэтому, короче говоря, я не допускаю быстрых нажатий на эти кнопки.две кнопки одна за другой ... Что бы вы посоветовали?Могу ли я добиться этого с помощью RxBinding?

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

1 Ответ

0 голосов
/ 06 июня 2018

вот один из возможных подходов ...

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

возможно, не самый элегантный, но, надеюсь, это, по крайней мере, вдохновляет на некоторые мысли!

...