Compose 导航是配置更改?
Compose navigation is configuration change?
我在一个可组合项 (MainView
) 中记住了字符串类型 (message
) 的可变状态。如果我修改字符串并导航到另一个可组合项 (NextView
),则在弹出时不会记住修改。如果我改用 rememberSaveable
,修改会被记住。这是 remember {}
的预期行为吗?如果是这样,导航到另一个可组合项并返回是否被视为配置更改?
我正在使用 Android 12(API 级别 31),Kotlin 1.5.31,撰写版本 1.1.0-alpha06,导航撰写 2.4.0-alpha10,生命周期运行时-ktx 2.4.0-rc01, activity-compose 1.4.0-rc01.
这是我的代码:
@Composable
fun MainView(navController: NavController) {
var message by remember { mutableStateOf("Message") }
// modification remembered if rememberSaveable used instead
Column {
TextField(
value = message,
onValueChange = { message = it }
)
Button(onClick = { navController.navigate("NextView") }) {
Text(text = "MainView")
}
}
}
@Composable
fun NextView(navController: NavController) {
Button(onClick = { navController.popBackStack() }) {
Text(text = "NextView")
}
}
(如果有帮助,我很乐意分享我的其他依赖项和系统信息以及我使用这两个视图设置 NavHost
的 MainActivity
。)
导航不被视为配置更改。对设备的更改,例如其方向、更改默认系统语言、wifi 切换 on/off 都是配置更改。在大多数情况下,配置更改将导致您的 activity 被破坏。如果你的 activity 被摧毁,任何使用 just remember 的东西都会丢失。但是如果你使用rememberSaveable,状态会在activity重启时恢复。
我在一个可组合项 (MainView
) 中记住了字符串类型 (message
) 的可变状态。如果我修改字符串并导航到另一个可组合项 (NextView
),则在弹出时不会记住修改。如果我改用 rememberSaveable
,修改会被记住。这是 remember {}
的预期行为吗?如果是这样,导航到另一个可组合项并返回是否被视为配置更改?
我正在使用 Android 12(API 级别 31),Kotlin 1.5.31,撰写版本 1.1.0-alpha06,导航撰写 2.4.0-alpha10,生命周期运行时-ktx 2.4.0-rc01, activity-compose 1.4.0-rc01.
这是我的代码:
@Composable
fun MainView(navController: NavController) {
var message by remember { mutableStateOf("Message") }
// modification remembered if rememberSaveable used instead
Column {
TextField(
value = message,
onValueChange = { message = it }
)
Button(onClick = { navController.navigate("NextView") }) {
Text(text = "MainView")
}
}
}
@Composable
fun NextView(navController: NavController) {
Button(onClick = { navController.popBackStack() }) {
Text(text = "NextView")
}
}
(如果有帮助,我很乐意分享我的其他依赖项和系统信息以及我使用这两个视图设置 NavHost
的 MainActivity
。)
导航不被视为配置更改。对设备的更改,例如其方向、更改默认系统语言、wifi 切换 on/off 都是配置更改。在大多数情况下,配置更改将导致您的 activity 被破坏。如果你的 activity 被摧毁,任何使用 just remember 的东西都会丢失。但是如果你使用rememberSaveable,状态会在activity重启时恢复。