我正在使用房间数据库的实时数据,并且我的活动观察到了从房间数据库提供的实时数据。
@Query("SELECT * FROM BUS WHERE BUS_CATEGORY = :busCategory")
LiveData<List<Bus>> getLiveBuses( String busCategory);
ViewModels通过Dao(数据访问对象)获取LiveData,并且活动观察到此实时数据。
现在可以正常工作了。但是,当busCategory更改时,我无法修改此实时数据来获取新选择的busCategory的巴士。
因此,如何在查询参数可更改的情况下观察相同的liveData?
我建议您使用我进行查询的viewModel并使用MutableLiveData观察更改。第一步
var mutableCategory: MutableLiveData<String> = MutableLiveData()
可变活动数据的设置者
fun searchByCategory(param: String) {
mutableCategory.value = param
}
观察到的变化
var busObservable: LiveData<Bus> = Transformations.switchMap(mutableCategory) { param->
busModelDao.getLiveBuses(param)
}
以及观察实时数据的最后一步
busObservable.observe(this, Observer {
//your logic for list})
并触发mutablelivedata
searchByCategory(//categoryName)
我认为这不是一个合理的期望。触发一个新查询并订阅它会更有意义。