带有列表的LiveData不会触发重组

问题描述 投票:0回答:1

我正在开发一个 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() 等等。请帮忙。在应用程序的其余部分,它可以很好地处理地图、字符串等数据。

android kotlin android-jetpack-compose android-livedata
1个回答
0
投票

observeAsState()
用于此处提到的 LiveData。
https://developer.android.com/jetpack/compose/state#use-other-types-of-state-in-jetpack-compose

您正在使用

.observeAsState().value
它只能获取初始值。


添加依赖

implementation("androidx.compose.runtime:runtime-livedata:1.4.3")
© www.soinside.com 2019 - 2024. All rights reserved.