首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Composable在重写的方法中?

@Composable在重写的方法中?
EN

Stack Overflow用户
提问于 2020-12-07 22:50:10
回答 2查看 787关注 0票数 2

我想在重写方法上画一个@Composable,如

代码语言:javascript
复制
@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()

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-19 02:18:09

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

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

清理和重建修复这个。

票数 0
EN

Stack Overflow用户

发布于 2020-12-07 23:22:28

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

ViewModel中创建一个保持滑块位置的MutableLiveData

代码语言:javascript
复制
    val sliderPosition = MutableLiveData<Integer>()

在您的Activity中,让onKeyDown更新MutableLiveData

代码语言:javascript
复制
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
    when (event?.keyCode) {
        KeyEvent.KEYCODE_VOLUME_UP, KeyEvent.KEYCODE_VOLUME_DOWN -> {
            viewModel.sliderPosition.value = getCurrentSliderPosition()
        }
    }
}

然后将ViewModel作为参数传递给可组合函数,然后您可以观察到卷的变化,如下所示:

代码语言:javascript
复制
   val position by viewModel.sliderPosition.observeAsState(0)

现在,您只需在布局中使用position作为常规变量,但当其更改时,Composable将自动使用新值进行更新。

您可以阅读关于使用Compose 这里管理状态的更多信息。

顺便提一句,有一个实验性的(在回答时) keyInputFilter Modifier,您可能想要检查

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65190592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档