首页 > 解决方案 > 有什么方法可以在视图模型中使用变量初始化房间实时数据?

问题描述

我想在调用该方法时初始化我的房间实时数据。当视图模型像这样创建时,我知道初始化房间实时数据的方法。

    private val _playList : MutableLiveData<List<PlayListEntity>> = MutableLiveData()
    var playList :LiveData<List<PlayListEntity>>  = apiRepository.selectPlayListByFolderId(1)

但是我想在调用方法时更改它,因为查询对于 ID 会有所不同。有没有办法解决这个问题?

这是我的视图模型代码

class FolderMusicViewModel @Inject constructor(private val apiRepository: ApiRepository) : ViewModel() {

    private val _playList : MutableLiveData<List<PlayListEntity>> = MutableLiveData()
    var playList :LiveData<List<PlayListEntity>>  = _playList//apiRepository.selectPlayListByFolderId(1)


    fun getPlayList(folderId :Int){
        playList = apiRepository.selectPlayListByFolderId(folderId)
       
    }

 
}

标签: android

解决方案


在 ViewModel 中使用 LiveData 的正确方法是:

1-更改私有的 MutableLiveData 而不是公共的。

2-您必须更改公共实时数据的获取功能

3- API 存储库的响应必须是字符串而不是 LiveData。如果您希望它成为 LiveData,您也可以更改私有 LiveData。

看一下代码:

class FolderMusicViewModel @Inject constructor(private val apiRepository: ApiRepository) : ViewModel() {

    private val _playList : MutableLiveData<List<PlayListEntity>> = MutableLiveData()
    val playList :LiveData<List<PlayListEntity>> 
           get() = _playList


    fun getPlayList(folderId :Int){
        _playList.postValue(apiRepository.selectPlayListByFolderId(folderId))
    }
}

推荐阅读