2016-08-09 14 views
1

Ich habe den folgenden Code in meinem Android-App, mehrere Klicks auf eine Schaltfläche zu verhindern versuchen: vonRxView.debounce wartet auf den Zeitraum der Entprellung, um den Befehl auszuführen, wie führe ich den Befehl sofort aus?

RxView.clicks(bSubmit) 
      .debounce(2500, TimeUnit.MILLISECONDS) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(c -> displayToast()); 

aber statt der Ausführung des Codes und dann verhindert mehrere Klicks in der gleichen Zeitspanne wird beaufschlagt, Was dieser Code tut ist, dass er den Befehl ausführt, nachdem die Debounce-Zeitspanne abgelaufen ist.

Wie kann ich erreichen, was ich will?

+3

möchten Sie möglicherweise ThrotleFirst-Operator überprüfen. – dwursteisen

+0

Arbeitete wie ein Charme! Wenn du dies als Antwort postest, würde ich es akzeptieren. Vielen Dank! –

Antwort

4

Nach Reactivex.io documentation, debounce emittieren das letzte Ereignis während eines Zeitfensters.

Was Sie wollen, ist das erste Ereignis während eines Zeitfensters zu emittieren, das, was nicht throttleFirst (siehe documentation).

RxView.clicks(bSubmit) 
     .throttleFirst(2500, TimeUnit.MILLISECONDS) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribe(c -> displayToast()); 
Verwandte Themen