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

