8

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

4

4 回答 4

6

我认为throttleFirst这就是你想要的:https ://github.com/Netflix/RxJava/wiki/Filtering-Observables#wiki-throttlefirst

于 2014-03-06T10:17:19.483 回答
2

继续zsxwing的回答:

如果您没有使用RxBinding库,而只使用RxJava,那么,

io.reactivex.Observable.just(view_obj)
                .throttleFirst(1, TimeUnit.SECONDS)// prevent rapid click for 1 seconds
                .blockingSubscribe(o -> {                     
                    startActivity(...);
                });
于 2019-05-01T10:30:17.100 回答
2

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

RxView.clicks(your_view)
            .throttleFirst(300, TimeUnit.MILLISECONDS)
            .subscribe {
                //on click
            }
于 2019-09-28T12:52:13.817 回答
-1

这可以通过 share debounce 和 buffer operator 来完成

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());
      }
    });
于 2016-07-05T15:27:36.757 回答