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

Jetpack Compose:切换手机方向时文本内容意外变更问题

解决Composable屏幕旋转时文本意外更新的问题

问题根源在于你使用remember保存状态:当屏幕旋转触发Activity重建时,Composable会重新执行初始化逻辑,remember块里的nextWord()会被再次调用,导致文本被意外替换。

解决这个问题只需把remember替换为rememberSaveable——它会将状态保存到系统Bundle中,在配置变化(如屏幕旋转)后自动恢复之前的状态,不会重新执行初始赋值逻辑。

修改后的代码:

@Composable
fun WordDisplay() {
    var text: String by rememberSaveable {
        mutableStateOf(nextWord())
    }

    Box(modifier = Modifier
        .fillMaxSize()
        .clickable(onClick = { text = nextWord() })) {
        AutoResizableText(
            text = text,
            modifier = Modifier
                .padding(16.dp)
                .fillMaxSize()
                .wrapContentSize(Alignment.Center),
            style = MaterialTheme.typography.bodyLarge.copy(fontSize = MaterialTheme.typography.bodyLarge.fontSize * 10)
        )
    }
}

补充说明:

  • rememberSaveable默认支持可被Bundle序列化的类型(比如String),如果是自定义类型,需要额外提供Saver处理序列化逻辑。
  • 修改后只有点击Box时才会调用nextWord()更新文本,屏幕旋转时会保留当前显示的内容。

内容的提问来源于stack exchange,提问作者Karl-Marx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 23:20:53