在我的片段中,我观察到 dbQuestionsList 字段:
viewModel.dbQuestionsList.observe(viewLifecycleOwner, Observer { list ->
Log.i("a", "dbQuestionsList inside fragment = $list ")
})
在我的片段中,我有几个按钮,根据按下哪个按钮,我调用 viewModel 上的方法,将设置为标签的字符串传递给按钮。
viewModel.onFilterChanged(button.tag as String)
我的视图模式:
lateinit var dbQuestionsList: LiveData<List<DatabaseQuestion>>
init{
onFilterChanged("")
}
private fun onFilterChanged(filter: String) {
dbQuestionsList = mRepository.getDbQuestionsForCategory(filter)
}
存储方法:
fun getDbQuestionsForCategory(categoryName: String): LiveData<List<DatabaseQuestion>> {
return database.dbQuestionsDao().getDbQuestionsByCategory(categoryName)
}
道法:
@Query("SELECT * FROM db_questions_database WHERE category = :categoryId")
fun getDbQuestionsByCategory(categoryId: String): LiveData<List<DatabaseQuestion>>
当我按下按钮时,viewModel 方法会被调用,参数应该用于通过搜索房间数据库来更新 LiveData,但没有任何原因会更新。数据库不为空,因此没有理由返回 null 并且不触发主片段中的观察者。但是当我在我的 viewModel 中这样做时:
lateinit var dbQuestionsList: LiveData<List<DatabaseQuestion>>
init{
onFilterChanged("travel")
}
在我硬编码参数的地方,房间将返回列表并且片段中的观察者将被触发,所以它就像那样工作,但是当按下按钮时传递参数时不起作用,请解释一下,因为这件事没有意义。我尝试使用可变的实时数据,使用 .setValue 和 .postValue 但没有任何效果。