私は単純な「ボタンデバウンサー」を作っています。これは、フィルタリングされたクリックをカウントし、TextViewを通して表示します。私は300ms以下の時間間隔でクリックが無視されるように、急速な/スパムのクリックをフィルタリングしたいと思います。 Rxを使用したボタンクリックのデバウンス
が、私は私の研究を行なったし、つまずいRx
の理論で私が望んでいた正確なことを行う必要があります
debounce()
素晴らしい..
は..orので、私は思いました。アプリは最初のクリックを登録するように見えたので、私がどれくらい待っても、カウンタは増えません。
は、ここに私のコードの一部です:私は間違って
...
RxView.clicks(mButton)
.debounce(300, TimeUnit.MILLISECONDS)
.subscribe(new Subscriber<Object>() {
public int mCount;
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Object o) {
mText.setText(String.valueOf(++mCount));
}
});
...
何をしているのですか?私はdebounce()
せずにその事を実行しようとしたが、それは完璧に機能した(カウンタは、ボタンがクリックされたたびに増加する)。
ありがとうございます!
デバッグの代わりにthrottleFirstを使用する方が良いでしょう。 – wilddev
@wilddev:「より良い」かどうかは、 'throttleFirst'と' debounce'が同じ結果をもたらさないため、望ましい動作に依存します。私は最初にデバウンスを要求するように解釈しましたが、もう一度それを読むと、throttleFirstも理にかなっていることに同意します。私は両方の良い候補者を作ると思います。いずれにせよ、どちらも計算スケジューラ上で動作するため、上記のほとんどがいずれにも適用されます。 :) –
"良い"の意味では、throttleFirstの場合はすぐにクリック反応が出ますが、デバウンスには遅れがあります。 – wilddev