使用RXJava防止快速点击

时间:2014-03-05 17:23:24

标签: rx-java

我正在编写一个Android应用程序并使用rxjava来处理用户输入事件。基本上我想要做的是,点击一个按钮时发出,然后在之后的一段时间内(比如一两秒钟)放弃后续发射,基本上是为了防止必须多次点击按钮。

4 个答案:

答案 0 :(得分:5)

答案 1 :(得分:0)

继续zsxwing的答案:

如果您不使用 RxBinding 库,而仅使用 RxJava ,则

io.reactivex.Observable.just(new Object())
                .throttleFirst(1, TimeUnit.SECONDS)// prevent rapid click for 1 seconds
                .blockingSubscribe(o -> {                     
                    startActivity(...);
                });

答案 2 :(得分:0)

为防止快速点击,我使用此代码

RxView.clicks(your_view)
            .throttleFirst(300, TimeUnit.MILLISECONDS)
            .subscribe {
                //on click
            }

答案 3 :(得分:-1)

这可以通过共享去抖动和缓冲区运算符来完成

Observable<Object> tapEventEmitter = _rxBus.toObserverable().share();
Observable<Object> debouncedEventEmitter = tapEventEmitter.debounce(1, TimeUnit.SECONDS);
Observable<List<Object>> debouncedBufferEmitter = tapEventEmitter.buffer(debouncedEventEmitter);

debouncedBufferEmitter.buffer(debouncedEventEmitter)
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new Action1<List<Object>>() {
      @Override
      public void call(List<Objecenter code heret> taps) {
        _showTapCount(taps.size());
      }
    });