使用RxAndroid处理onKeyDown

我使用https://github.com/mkoslacz/Moviper为我的应用程序的Android电视盒。 只有一个活动与多个子碎片。 我只想在事件尚未处理时才将onKeyDown传播到子片段。 不使用RxJava很容易。 我可以返回一个布尔值来告诉事件已经处理或不。 有没有一种方法可以使用RxJava来处理? 我使用Kotlin作为源语言。 这是我正在尝试做的事情。

class MainActivity : ViperAiPassiveActivity(), HomeContract.View { private val keyPressSubject = BehaviorSubject.create() private lateinit var predicate: (KeyEvent) -> Boolean override fun keyPresses(predicate: (KeyEvent) -> Boolean): Observable { 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) } } 

我结束了创建自己的事件处理程序(虽然它不使用RxJava,但它在我的情况下做的工作)

 object KeyEventManager { private val handlers: MutableMap Boolean> = ArrayMap() fun register(handler: (KeyEvent?) -> Boolean): Int { val id = (handlers.keys.max() ?: 0) + 1 handlers.put(id, handler) return id } fun unregister(id: Int) { handlers.remove(id) } fun postEvent(event: KeyEvent?): Boolean { for (key in handlers.keys) { handlers.get(key)?.run { if (invoke(event)) { return true } } } return false } }