В моем фрагменте я наблюдаю поле 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, но НИЧЕГО не работает.