我在我的项目中使用jetpack-compose,不知道如何从ViewModel更改TextField
的值。
- 在我的活动中:*
...
@Composable
fun myView() {
var dName = remember {
mutableStateOf(TextFieldValue(""))
}
TextField(
value = dName.value,
onValueChange = { dName.value = it },
modifier = Modifier.fillMaxWidth()
)
}
...
字符串
- 在我的ViewModel中:*
...
var dName = MutableStateFlow("")
...
型
我想在ViewModel中调用dName.value = "test"
,并更改TextField
中显示的值。如何才能实现这一点?
2条答案
按热度按时间ecbunoof1#
假设你有一个名为
viewModel
的viewModel的引用,你只需要调用viewModel.name.collectAsState()
。但除此之外,我建议保持ViewModel中的数据逻辑,方法是将MutableStateFlow设为私有,并向可组合对象公开一个不可变的StateFlow和一个setter方法。个字符
正如您所看到的,我在这里没有使用
remember { mutableStateOf(...) }
,因为ViewModel中的StateFlow是唯一的事实来源。强制性地设置组合对象的值的方法在JetpackCompose提供的声明式API中没有意义。
尝试阅读Jetpack compose中的声明式/命令式UI和状态以及Kotlin流以了解更多信息。
p4tfgftt2#
你也可以用
mutableStateOf
来代替MutableStateFlow
,我觉得很简单。ViewModel
字符串
可组合
型
在
ViewModel
中,当你想改变值时,你可以调用dname = "test"