@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 并发生此错误。
清理并重建修复此问题。
我想在覆盖方法上绘制一个@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 并发生此错误。
清理并重建修复此问题。