Общий доступ к модели просмотра

#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) .