Метод обратного вызова часто называется переадресацией события на Observable?

Поэтому у меня есть этот слушатель на пользовательском слайдере. Представление вызывает onSliderChanged(int percent) когда пользователь сдвигает ползунок. Я пытаюсь сделать сетевой вызов, когда ползунок изменяется, но я не хочу делать миллионы сетевых вызовов, так как метод часто вызывается при сдвиге. Как я могу сделать этот обратный вызов слушателя в наблюдаемом? Я знаю, как только его наблюдаемый я могу использовать debounce и обновлять только через определенный промежуток времени.

Я попытался сделать Observable.create() но у меня есть метод обратного вызова, и я не могу понять, как это будет работать. Я использую Kotlin и RxJava2 btw.

 override fun onSliderChanged(percent: Int) { // Either here or in the presenter I want to make this // callback reactive so I can debounce the callback presenter.onSliderChanged(percent) } в override fun onSliderChanged(percent: Int) { // Either here or in the presenter I want to make this // callback reactive so I can debounce the callback presenter.onSliderChanged(percent) } 

Из вашего вопроса неясно, как вы передаете слушателя, но есть два общих случая, которые приходят на ум. Выберите тот, который соответствует вашей реализации.

Случай 1: слушатель передается как интерфейс

Для этого я предполагаю, что у вас тоже такой интерфейс –

 interface SliderChangedListener { fun onSliderChanged(percent: Int) } 

и метод в вашем классе Slider который принимает экземпляр этого прослушивателя –

 fun setSlideListener(listener: SliderChangedListener) 

Это общий шаблон Java. В Kotlin было бы проще отказаться от интерфейса и просто передать функциональную переменную, но, учитывая, что вы показали override выше, кажется, что ваш взгляд исходит из Java. Независимо от того, ключ заключается в создании наблюдаемого и создания и установки слушателя, который вызывает onNext .

 Observable.create(Observable.OnSubscribe<Int> { subscriber -> slider.setSlideListener(object : SliderChangedListener { override fun onSliderChanged(percent: Int) { subscriber.onNext(percent) } }) }).subscribe { /* respond to the slide */ } в Observable.create(Observable.OnSubscribe<Int> { subscriber -> slider.setSlideListener(object : SliderChangedListener { override fun onSliderChanged(percent: Int) { subscriber.onNext(percent) } }) }).subscribe { /* respond to the slide */ } 

Случай 2: вы расширяете класс Slider и переопределяете слушателя

В этом случае я предполагаю, что у вас есть метод слушателя в вашем классе Slider который вы переопределяете непосредственно с кодом в своем вопросе. В этом случае мы можем использовать Subject для посредничества между слушателем и подписчиком.

 val mySlider = object : Slider() { val sliderObservable: PublishSubject<Int> = PublishSubject.create() override fun onSliderChanged(percent: Int) { sliderObservable.onNext(percent) } } mySlider.sliderObservable.subscribe({ /* do slider work */ }) в val mySlider = object : Slider() { val sliderObservable: PublishSubject<Int> = PublishSubject.create() override fun onSliderChanged(percent: Int) { sliderObservable.onNext(percent) } } mySlider.sliderObservable.subscribe({ /* do slider work */ })