El método de callback a menudo para reenviar el evento a Observable?

Así que tengo este oyente en una vista deslizante personalizada. La vista llama onSliderChanged(int percent) cuando el usuario desliza el control deslizante. Intento hacer una llamada de networking cuando el control deslizante cambia, pero no quiero hacer un millón de llamadas de networking ya que el método se llama a menudo cuando se desliza. ¿Cómo puedo hacer que esta callback del oyente sea observable? Sé que una vez que es observable, puedo usar el rebote y solo actualizar después de un cierto intervalo de time.

Intenté hacer Observable.create() pero estoy en un método de callback y no puedo entender cómo funcionaría. Estoy usando Kotlin y RxJava2 por cierto.

 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) } 

No está claro a partir de su pregunta exactamente cómo pasar a su oyente, pero hay dos casos generales que vienen a la mente. Elija el que coincida con su implementación.

Caso 1: el oyente se pasa como una interfaz

Para esto, supongo que tienes una interfaz similar también –

 interface SliderChangedListener { fun onSliderChanged(percent: Int) } 

y un método en su class Slider que toma una instancia de ese oyente –

 fun setSlideListener(listener: SliderChangedListener) 

Este es un patrón común de Java. En Kotlin, sería más fácil eliminar la interfaz y simplemente pasar una variable de function, pero dado que usted mostró una override anterior, parece posible que su vista provenga de Java. De todos modos, la key es crear un observable y hacer que cree y configure el oyente que llama a onNext .

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

Caso 2: Extiende la class Slider y anula al oyente

En este caso, supongo que tiene un método de escucha en su class de Slider que anula directamente con el código en su pregunta. En este caso, podemos usar un Subject para mediar entre el oyente y el suscriptor.

 val mySlider = object : Slider() { val sliderObservable: PublishSubject<Int> = PublishSubject.create() override fun onSliderChanged(percent: Int) { sliderObservable.onNext(percent) } } mySlider.sliderObservable.subscribe({ /* do slider work */ }) 
  • No se puede 'observar en' hilo principal con RxKotlin
  • ¿Cómo se usa Flowable.generate de Kotlin?
  • Observable.fromCallable () implementación con exception
  • Single.zip completando antes de Success
  • Room - SELECT query, get o default
  • Java genérico para Kotlin genérico. Retorno genérico del método
  • Descargar un file desde un control remoto y savelo en un dispositivo Android
  • Buscando con RxJava no funciona
  • Prueba RxJava2 Flowable Query Room
  • Cómo manejar el event handling errores en un solo lugar en rxjava usando wrapper
  • RxAndroid - Manejar errores con el operador Zip