我正在开发一个 Android 应用程序,并从服务器检索一个列表,我正在将其写入 LiveData 变量,该变量旨在更新 UI 并显示信息。但是,如果没有任何错误,用户界面根本不会更新。
//ViewModel.kt:
//declaration of the list
private val _backupPlayers = MutableLiveData<List<PlayerModel>>()
val backupPlayers: LiveData<List<PlayerModel>>
get() = _backupPlayers
//method that retrieves from server and maps
fun loadPlayers() {
execute {
val playersList = mutableListOf<PlayerModel>()
playerRepository.getPlayers().let { playersResponse ->
playersResponse.body()?.map{
playersList.add(MapToPlayerModel(it))
}
}
_backupPlayers.postValue(playersList)
}
}
//Screen.kt
//observing the list from the viewmodel
val backupPlayers = dashboardViewModel.backupPlayers.observeAsState().value
//sample element which isn't updated
Text(backupPlayers?.count().toString())
到目前为止,我已经尝试了在堆栈溢出和互联网上找到的所有内容:尝试使其成为可变列表并添加到其中,使用 .value 并分配而不是 .postValue() 等等。请帮忙。在应用程序的其余部分,它可以很好地处理地图、字符串等数据。
将
observeAsState()
用于此处提到的 LiveData。您正在使用
.observeAsState().value
它只能获取初始值。
添加依赖
implementation("androidx.compose.runtime:runtime-livedata:1.4.3")