我想在重写方法上画一个@Composable,如
@Composable
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
Greeting()
}不幸的是,我无法用@Composable标记override onKeyDown(),因为我得到:
冲突重载:@Composable public open onKeyDown(keyCode: Int,event: KeyEvent?):com.example.emptycompose.MainActivity中定义的布尔值,公共打开的onKeyDown(p0: Int,p1: KeyEvent!):在androidx.appcompat.app.AppCompatActivity中定义的布尔值
如何在例如@Composable中使用override onKeyDown()?
发布于 2022-01-19 02:18:09
当您重命名.kt文件时,就会发生这种情况。
例如,我将KKbutton.kt重命名为KKButton.kt,就会发生此错误。
清理和重建修复这个。
发布于 2020-12-07 23:22:28
您不能直接返回这样的可组合实例,但是您可以拥有一个可自动观察更改和重新组合的可组合实例。
在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,您可能想要检查。
https://stackoverflow.com/questions/65190592
复制相似问题