【发布时间】:2021-09-05 20:04:26
【问题描述】:
看来我在观察LiveData 时犯了错误,似乎找不到错误在哪里。
这是@Composable的代码:
@Composable
fun ShowAppsScreen2(
viewModel: SharedViewModel
) {
val text: String by viewModel.name.observeAsState(initial = "")
Log.d("ShowAppsScreen2", "ShowAppsScreen2: text = $text.")
Column(modifier = Modifier
.fillMaxSize(1f)
.background(color = Color.Red)) {
Text("TEXT: $text")
}
LaunchedEffect(Unit) {
viewModel.fetchName("Eva")
}
}
这是SharedViewModel的代码:
@HiltViewModel
class SharedViewModel @Inject constructor(
//...
) ViewModel() {
private val _name: MutableLiveData<String> = MutableLiveData()
val name: LiveData<String> = _name
fun fetchName(someName: String) {
viewModelScope.launch {
delay(500)
Log.d(TAG, "setName: $someName")
_name.postValue(someName)
}
}
}
首先,我看到@Composable 中设置的红屏,Text 的文本 "TEXT:" 符合预期。之后,我只看到白屏,好像发生了一些错误并且屏幕没有重新渲染。
在日志中我得到了这个:
D ShowAppsScreen2: ShowAppsScreen2: text = . D ShowAppsScreen2: ShowAppsScreen2: text = . D ShowAppsScreen2: ShowAppsScreen2: text = . D SharedViewModel: setName: Eva
我做错了什么?
【问题讨论】:
-
这段代码对我来说很好用,例如
D/ShowAppsScreen2: ShowAppsScreen2: text = .; D/SharedViewModel: setName: Eva; D/ShowAppsScreen2: ShowAppsScreen2: text = Eva.不知道怎么会变白。确定这是与这个问题相关的所有代码吗? -
是的,我认为这是与此问题相关的所有代码。老实说,这让我很生气,因为我看不出它有什么问题或隐藏在其他地方的东西。我将从头开始重写 Composable 和 ViewModel。
标签: android android-jetpack-compose android-viewmodel