android - 有什么方法可以在视图模型中使用变量初始化房间实时数据?
问题描述
我想在调用该方法时初始化我的房间实时数据。当视图模型像这样创建时,我知道初始化房间实时数据的方法。
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)
}
}
解决方案
在 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))
}
}
推荐阅读
- python-3.x - 如何使用networkx(python)构建一个二分体
- python - 如何连接 HOG 和 LBP 特征描述符?
- sql - 如何防止 PL/SQL 中的 SQL 注入
- java - 如何将两个整数(挥杆、击球)转换为准确度
- node.js - Sailsjs 套接字和 nginx 代理
- python - numpy.linalg.LinAlgError:尝试求解时出现奇异矩阵错误
- mysql - mysql@5.7 上的访问被拒绝
- python - Django-modeltranslation ValueError:添加翻译字段时出错。模型已包含该字段
- python - 通过对字符串中的外观进行排名,对 str 和 int 的值进行排序
- windows - 如何删除子目录中目录的文件扩展名?