我将https://github.com/mkoslacz/Moviper用于我的 Android 电视盒应用程序。只有一个活动具有多个子片段。仅当尚未处理事件时,我才想将 onKeyDown 传播到子片段。不使用 RxJava 很容易做到。我可以返回一个布尔值来告诉该事件是否已被处理。有没有办法使用 RxJava 处理它?我使用 Kotlin 作为源语言。这是我正在尝试做的事情。
class MainActivity : ViperAiPassiveActivity<HomeContract.View>(), HomeContract.View {
private val keyPressSubject = BehaviorSubject.create<KeyEvent>()
private lateinit var predicate: (KeyEvent) -> Boolean
override fun keyPresses(predicate: (KeyEvent) -> Boolean): Observable<KeyEvent> {
this.predicate = predicate
return keyPressSubject
}
override fun createPresenter() = HomePresenter()
override fun getLayoutId(): Int {
return R.layout.activity_main
}
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
event?.run {
if (predicate(event)) {
keyPressSubject.onNext(event)
return true
}
}
return super.onKeyDown(keyCode, event)
}
}