У меня есть ViewModel
со свойством типа LiveData<UserData>
, считываемое из базы данных Room.
Его код выглядит следующим образом:
class UserDataViewModel(application: Application) : AndroidViewModel(application) {
private val userDataDao: UserDataDao = AppDatabase.getInstance(application).dao()
val userData: LiveData<UserData?> = userDataDao.getUserData()
}
В связанном активность, я получаю ссылку на модель представления:
private val viewModel: UserDataViewModel by viewModels()
В этом упражнении мне нужно получить значение UserData
при нажатии кнопки:
private fun handleClick(view: View) {
viewModel.userData.value?.let {
// do stuff if the userData is present
}
}
Сейчас теоретически, если пользователь не нажимает кнопку до загрузки данных, он никогда не должен быть нулевым.
Однако, поскольку код остается в силе, вызов viewModel.userData.value
всегда равен нулю, а блок let
никогда не выполняется.
Но, , если я добавлю этот оператор в onCreate
, блок let
в обработчике щелчков выполняется как требуется :
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel.userData.observe(this, Observer {
// do nothing
})
}
My вопрос в том, зачем мне вызывать функцию наблюдения, даже если я ничего не делаю с событием изменения, чтобы получить действительные ответы от LiveData::getValue
?