代码之家  ›  专栏  ›  技术社区  ›  Gregg

Fragment/ViewModel在第一次按键后未捕获硬件键

  •  0
  • Gregg  · 技术社区  · 5 年前

    我将尽我所能解释正在发生的事情,并展示一些代码,其中涉及的内容太多了,不可能放在这里。我有一个安卓设备,有几个硬件按钮,我们可以通过 MainActivity 有点像这样。。。

    override fun dispatchKeyEvent(event: KeyEvent?): Boolean {
      val key = getKey(event)
      // do some stuff
      lifecycleScope.launch {
        delay(1)
        keyboardEvents.offer(key)
      }
    }
    

    SimpleFragment

    viewLifecycleOwner.lifecycleScope.launch {
      mainActivity.listenForHardwareButtons().collect {
      try {
        viewModel.onButtonPressed(it)
      } catch (e: Throwable) {
        Timber.e(e)
      }
      // other stuff
    }
    

    最后,我们所有的视图模型在需要时都有以下功能:

    override suspend fun onButtonPressed(button: HardwareButton) {
      // deal with button presses
    }
    

    在导航到一个片段后,我可以点击任何一个硬件按钮一次,它们就会按预期工作。随后的按钮按下仅使其尽可能远 主要活动 不要慢慢地进入任何可见的片段。

    我知道这不算什么,但这是我的全部。如果有人有什么建议,我很乐意听听。

    0 回复  |  直到 5 年前
    推荐文章