#android-fragments #android-livedata #android-viewmodel #mutablelivedata #view-model-pattern
Вопрос:
Я кодирую приложение, которое использует одно действие и имеет 2 фрагмента. Я хочу обмениваться данными между ними с помощью живых данных, поэтому я создаю SharedViewModel extend ViewModel (), и у этого класса есть переменная с именем:
private val _mutableUser = MutableLiveData<UserEntity>()
val userGetFromValidate: LiveData<UserEntity> = _mutableUser
fun setUserFromValidate(userEntity: UserEntity) {
_mutableUser.value = userEntity
}
затем я создал базовую модель, расширяющую модель SharedViewModel, которая имеет :
protected val sharedViewModel = SharedViewModel()
У меня есть LoginFramentViewModel и UserFragmentViewModel, расширяющие базовую модель, 2 экземпляра из которых я использую делегат activityViewModels(). Я установил значение для userGetFromvalidate в loginfragmentviewmodel.
sharedViewModel.setUserFromValidate(идентификатор пользователя)
Фрагмент входа переходит к фрагменту пользователя. Но когда я звоню :
sharedViewModel.userGetFromValidate.value
из LoginFragmentViewModel он возвращает идентификатор пользователя, когда я вызываю его в UserFragmentViewModel, он возвращает значение null.
Я не знаю, почему, пожалуйста, помогите мне. Заранее спасибо.
Комментарии:
1. Вы не должны вызывать конструктор
ViewModel
класса напрямую, вам нужно получить экземпляр для их использованияViewModelProvider(viewModelStoreOwner).get(MyViewModel::class.java)
.