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
相关产品推荐
相关产品推荐

