Метод обратного вызова часто называется переадресацией события на 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) } 

Solutions Collecting From Web of "Метод обратного вызова часто называется переадресацией события на Observable?"

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

Случай 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 */ })