从你的问题中不清楚你是如何通过你的听众的,但我想到了两种一般情况。选择一个与您的实施相匹配的。
案例1:监听器作为接口传递
为此,我假设您也有类似的界面-
interface SliderChangedListener {
fun onSliderChanged(percent: Int)
}
以及您的Slider
类中的一个方法,该方法采用该侦听器的实例-
fun setSlideListener(listener: SliderChangedListener)
这是一种常见的 Java 模式。在 Kotlin 中,删除接口并只传递一个函数变量会更容易,但鉴于您在override
上面显示,您的视图似乎可能来自 Java。无论如何,关键是创建一个 observable 并让它创建和设置调用onNext
.
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
类中有一个侦听器方法,您可以使用问题中的代码直接覆盖该方法。在这种情况下,我们可以使用 aSubject
在侦听器和订阅者之间进行调解。
val mySlider = object : Slider() {
val sliderObservable: PublishSubject<Int> = PublishSubject.create()
override fun onSliderChanged(percent: Int) {
sliderObservable.onNext(percent)
}
}
mySlider.sliderObservable.subscribe({ /* do slider work */ })