You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Compose按钮点击获取string.xml文本遇@Composable调用错误求解

解决Composable点击回调中调用stringResource的错误

问题原因

stringResource是带@Composable注解的函数,只能在标记了@Composable的函数或lambda内部调用,而clickable的回调属于普通lambda(非Composable上下文),直接在里面调用就会触发报错。

方案1:提前在Composable作用域内获取字符串

在buttonClick这个Composable函数的顶层作用域里先拿到字符串,用remember缓存避免重组时重复计算,点击回调里直接使用这个预存的字符串:

@Composable
fun buttonClick() {
    // 提前在Composable上下文获取字符串,用remember缓存
    val appName = remember { stringResource(id = R.string.app_name) }
    var text by remember { mutableStateOf("") }
    
    val modifier = Modifier.clickable {
        text = appName
    }
    
    // 示例:用modifier和text构建UI
    Text(text = text, modifier = modifier)
}

方案2:通过Context实时获取字符串

如果需要在点击时动态获取(比如多语言切换后立即生效),可以借助LocalContext.current拿到Context,调用getString()方法(该方法无需Composable上下文):

@Composable
fun buttonClick() {
    var text by remember { mutableStateOf("") }
    val context = LocalContext.current
    
    val modifier = Modifier.clickable {
        text = context.getString(R.string.app_name)
    }
    
    Text(text = text, modifier = modifier)
}

内容的提问来源于stack exchange,提问作者acakojic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 03:32:36