observeAsState 不适用于列表,在 Jetpack Compose 中
observeAsState not working for list, in jetpack compose
我正在尝试显示可组合项中的对象列表。为此,我有一个带有以下列表变量的视图模型
var allProviders: LiveData<MutableList<ServiceProvider>> = MutableLiveData(mutableListOf())
此外,在视图模型初始化时,我正在调用一个 api 来填充上面的列表:-
private fun getAllMerchantList() {
getAllMerchants(object: RetrofitCallback {
override fun onData(data: Any?) {
//some logic here
allProviders.value?.addAll(allProvidersLocal)
Log.i("TAG", "ServiceProviders inside: ${allProviders.value?.size}")
}
override fun onFailed(ex: String?) {
Log.i("TAG", "onFailed: ${ex.toString()}")
}
})
}
并且,观察上面的情况,在可组合的情况下,例如:-
val viewModel: MainActivityViewModel = viewModel()
val allProviders by viewModel.allProviders.observeAsState()
但是,上面的代码不起作用。它总是返回可组合的空列表。但是如果我通过 viewmodel 功能登录,我可以看到数据。我该如何纠正?
在 Compose
中使用 mutableStateListOf
而不是 LiveData
var allProviders by mutableStateListOf<ServiceProvider>()
现在将其用作常规列表对象。它将触发重组。此外,尽可能在 Compose 中使用 MutableState
类型的对象,因为它们是为它构建的,反之亦然。
您也可以使用
val mutableStateFlod: MutableStateFlow<MutableList<ServiceProvider>> = MutableStateFlow(emptyList())
而不是 LiveData 和所有
collectAsState
我正在尝试显示可组合项中的对象列表。为此,我有一个带有以下列表变量的视图模型
var allProviders: LiveData<MutableList<ServiceProvider>> = MutableLiveData(mutableListOf())
此外,在视图模型初始化时,我正在调用一个 api 来填充上面的列表:-
private fun getAllMerchantList() {
getAllMerchants(object: RetrofitCallback {
override fun onData(data: Any?) {
//some logic here
allProviders.value?.addAll(allProvidersLocal)
Log.i("TAG", "ServiceProviders inside: ${allProviders.value?.size}")
}
override fun onFailed(ex: String?) {
Log.i("TAG", "onFailed: ${ex.toString()}")
}
})
}
并且,观察上面的情况,在可组合的情况下,例如:-
val viewModel: MainActivityViewModel = viewModel()
val allProviders by viewModel.allProviders.observeAsState()
但是,上面的代码不起作用。它总是返回可组合的空列表。但是如果我通过 viewmodel 功能登录,我可以看到数据。我该如何纠正?
在 Compose
中使用mutableStateListOf
而不是 LiveData
var allProviders by mutableStateListOf<ServiceProvider>()
现在将其用作常规列表对象。它将触发重组。此外,尽可能在 Compose 中使用 MutableState
类型的对象,因为它们是为它构建的,反之亦然。
您也可以使用
val mutableStateFlod: MutableStateFlow<MutableList<ServiceProvider>> = MutableStateFlow(emptyList())
而不是 LiveData 和所有
collectAsState