【发布时间】:2022-10-19 13:36:48
【问题描述】:
我正在尝试使用此处的官方视频在 jetpack compose 中实现 Viewmodel:
它显示了这个最小的例子:
class HelloViewModel : ViewModel() {
private val _name = MutableLiveData("")
val name: LiveData<String> = _name
fun onNameChange(newName: String) {
_name.value = newName
}
}
@Composable
fun HelloScreen(helloViewModel: HelloViewModel = HelloViewModel()) {
val name: String by helloViewModel.name.observeAsState("")
HelloContent(name = name, onNameChange = { helloViewModel.onNameChange(it) })
}
@Composable
fun HelloContent(name: String, onNameChange: (String) -> Unit) {
Column(modifier = Modifier.padding(16.dp)) {
if (name.isNotEmpty()) {
Text(
text = "Hello, $name!",
modifier = Modifier.padding(bottom = 8.dp),
style = MaterialTheme.typography.h5
)
}
OutlinedTextField(
value = name,
onValueChange = onNameChange,
label = { Text("Name") }
)
}
}
更新到 Jetpack Compose 1.1.0 版后,我不能写任何字符,插入后立即删除,请知道的解决方法, 预先感谢,
【问题讨论】:
-
您在此处为每个重组创建一个新的视图模型:
helloViewModel: HelloViewModel = HelloViewModel()。应该是helloViewModel: HelloViewModel = viewModel()。您是否从某个地方复制了此代码?在这种情况下,应该报告。 -
谢谢菲利普,它解决了我的问题,我不得不添加该依赖项:
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.4.1"然后做你的推荐,然后一切正常! -
此代码与此 Google 官方视频非常相似(不是说相同)。 youtube.com/watch?v=mymWGMy9pYI&t=167s
-
那就是我在帖子的前两行中写的
标签: android kotlin android-jetpack-compose