【问题标题】:ObserveAsState not working in jetpack composeObserveAsState 在 jetpack compose 中不起作用
【发布时间】:2022-10-19 13:36:48
【问题描述】:

我正在尝试使用此处的官方视频在 jetpack compose 中实现 Viewmodel:

Jetpack Compose: State

它显示了这个最小的例子:

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


【解决方案1】:

观察状态是一种扩展方法,包括在 androidx.compose.runtime.livedata 库。

所以你必须为你的依赖项添加这个库,如下所示。

dependencies {

    //observeAsState()
    implementation "androidx.compose.runtime:runtime-livedata:1.3.0-rc01"

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-08
    • 2022-07-29
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 2021-08-14
    • 2021-09-27
    • 1970-01-01
    相关资源
    最近更新 更多