J'essaie de supprimer les clics / balayages pour mon SwitchCompat sans succès. Le code ci-dessous semble correct, bien que onNext ne passe pas par debounce (), c'est-à-dire: lorsqu'un utilisateur envoie un spam sur le commutateur, onNext est appelé pour chaque clic, sans être omis en raison du debounce.

Ça devrait marcher, c'est un bogue avec RxJava?

    timer = Observable.create { subscriber: Subscriber<in Void>? ->
        super.setOnCheckedChangeListener { buttonView, isChecked ->
            subscriber?.onNext(null)
        }
    }
    timer.debounce(3,TimeUnit.SECONDS)
0
scottazord 11 août 2017 à 05:49

2 réponses

Meilleure réponse

S'il s'agit de votre code réel, je pense que le problème n'est pas du tout lié à debounce. Comme la plupart des opérateurs Rx, debounce renvoie un nouvel observable - il ne change pas celui vers lequel timer pointe.

Donc, puisque vous ne stockez nulle part la référence retournée par debounce, essentiellement rien ne se passe.

Essayez: timer = timer.debounce(3, TimeUnit.SECONDS)

3
david.mihola 11 août 2017 à 06:43

Vous devez utiliser la bibliothèque RxBinding de Jake Wharton. Il enveloppe les widgets Android dans Rx. Pour vous, il y a RxCompoundButton, que vous pouvez utiliser comme ceci:

RxCompoundButton.checkedChanges(switchCompat)
    .debounce(3, TimeUnit.SECONDS)
    .subscribe();
1
ildar ishalin 11 août 2017 à 10:22