@Composable 在重写的方法中?

@Composable in a overridden method?

我想在覆盖方法上绘制一个@Composable,例如

@Composable
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
    Greeting()
}

不幸的是,我无法用@Composable 标记 override onKeyDown(),因为我得到:

Conflicting overloads: @Composable public open fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean defined in com.example.emptycompose.MainActivity, public open fun onKeyDown(p0: Int, p1: KeyEvent!): Boolean defined in androidx.appcompat.app.AppCompatActivity

如何使用 @Composable 例如一个 override onKeyDown()?

您不能直接 return 这样的可组合项的实例,但您可以拥有一个可观察变化并自动重新组合的可组合项。

在您的 ViewModel 中创建一个 MutableLiveData 来保存滑块位置。

    val sliderPosition = MutableLiveData<Integer>()

在您的 Activity 中,让 onKeyDown 更新 MutableLiveData:

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
    when (event?.keyCode) {
        KeyEvent.KEYCODE_VOLUME_UP, KeyEvent.KEYCODE_VOLUME_DOWN -> {
            viewModel.sliderPosition.value = getCurrentSliderPosition()
        }
    }
}

然后将 ViewModel 作为参数传递给您的可组合函数,然后您可以像这样观察音量变化:

   val position by viewModel.sliderPosition.observeAsState(0)

现在您可以将 position 用作布局中的常规变量,但当它发生变化时,Composable 将自动更新为新值。

您可以阅读有关使用 Compose 管理状态的更多信息 here

作为旁注,有一个实验性的(在回答时)keyInputFilter Modifier 你可能想要 check out

重命名 .kt 文件时会发生这种情况。

例如,我将 KKbutton.kt 重命名为 KKButton.kt 并发生此错误。

清理并重建修复此问题。