2017-08-11 15 views
0

SwitchCompatのクリック/スワイプをデバウンスしようとしていますが、成功しません。 onNextはdebounce()を経由していませんが、以下のコードはうまく見えます:ユーザーがスイッチをスパムすると、onNextはデバッグのために省略されず、クリックごとに呼び出されます。RxJava Debounce onNext()

これはRxJavaのバグでしょうか?

timer = Observable.create { subscriber: Subscriber<in Void>? -> 
     super.setOnCheckedChangeListener { buttonView, isChecked -> 
      subscriber?.onNext(null) 
     } 
    } 
    timer.debounce(3,TimeUnit.SECONDS) 
+0

1つのことをクリアするには:debounceがタイムスパンで動作することは分かりますか?デバウンス作業を行うには、コードに応じて3秒以内にスイッチをオンまたはオフにする必要があります。ダミー目的のためにボタンを使用して、それが機能するかどうかを確認してください。 – chandil03

+0

返信ありがとう、はい私はそれを達成するために努力しているものです。 – scottazord

+0

あなたはそれに関連するすべてのコードを投稿できますか?あなたが与えたコードは、あなたがそれを達成しようとしている方法を説明していないからです。カスタムSwtichクラスを作成してから何かをやっているようです。 – chandil03

答えて

3

これが実際のコードの場合は、問題はdebounceにはまったく関係しないと思います。ほとんどのRx演算子と同様に、debounceは新しいObservableを返します。timerが指しているものを変更しません。

debounceによって返された参照を保存していないため、基本的に何も起こりません。

試してみてください。timer = timer.debounce(3, TimeUnit.SECONDS)

+1

ありがとう、仕事をした! – scottazord

1

あなたがジェイク・ウォートンからRxBinding libraryを使用する必要があります。それはアンドロイドウィジェットをRxにラップします。あなたはKotlin & RxBinding Kotlin Versionを使用している場合

RxCompoundButton.checkedChanges(switchCompat) 
    .debounce(3, TimeUnit.SECONDS) 
    .subscribe(); 
0

:あなたのためにあなたは、このように使用することができますRxCompoundButtonは、そこにあります。あなたは、あなたのプロジェクトにRxBindingを使用することを許可されていない場合は、カスタムCompoundButton

import com.jakewharton.rxbinding.widget.checkedChanges 

class CustomCompoundButton: CompoundButton { 
    constructor(context: Context): super(context, null) 

    constructor(context: Context, attrs: AttributeSet?): super(context, attrs, 0) 

    constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int): super(context, attrs, defStyleAttr, 0) 

    fun throttledCheckedChanges() { 
     return this.checkedChanges().debounce(3, TimeUnit.SECONDS) 
    } 
    // OR 
    val throttledCheckedChanges by lazy { 
     this.checkedChanges().debounce(3, TimeUnit.SECONDS) 
    } 

} 

// Use it in your activity/ fragment 
customCompoundButton.throttledCheckedChanges().subscribe { /* do sth */ } 
// OR 
customCompoundButton.throttledCheckedChanges.subscribe { /* do sth */ } 

で表現することができます。 Rxラッパーの作成については、CompoundButtonCheckedChangeObservable.javaをご覧ください。

関連する問題