0

我想在覆盖方法上画一个@Composable,比如

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

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

冲突重载:@Composable public open fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean 定义在 com.example.emptycompose.MainActivity, public open fun onKeyDown(p0: Int, p1: KeyEvent!): Boolean 定义在 androidx .appcompat.app.AppCompatActivity

我如何@Composable在例如 a 中使用 a override onKeyDown()

4

2 回答 2

0

您不能直接返回这样的可组合对象的实例,但您可以拥有一个可观察更改并自动重新组合的可组合对象。

在您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 管理状态的更多信息。

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

于 2020-12-07T23:22:28.657 回答
0

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

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

清理并重建修复此问题。

于 2022-01-19T02:18:09.537 回答