Прикрепление Viewmodel к фрагменту работает не так, как ожидалось

#android #fragment #viewmodel

#Android #фрагмент #viewmodel

Вопрос:

Я новичок в этой архитектуре Android, и я пытаюсь понять использование ViewModel.

В настоящее время у меня есть действие с фрагментом, встроенным в его xml. У фрагмента просто есть edittext, содержимое которого я хочу сохранить при вращении телефона. Я правильно реализовал Viewmodel, livedata и observers (я полагаю) и прикрепил ViewModel к фрагменту.

Проблема возникает здесь, когда я поворачиваю телефон, фрагмент воссоздается, а информация исчезает. Но, если я прикрепил ViewModel к действию, приложение работает так, как задумано.

Итак, после некоторой справочной информации возникает вопрос: зачем мне присоединять ViewModel к фрагменту, если объект Viewmodel очищается при воссоздании / уничтожении фрагмента?

Спасибо

PS. Вот как я прикрепил Viewmodel к activity, таким образом, он работает так, как задумано

 Fragment

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
...
final MuestrasViewModelFactory mvmFactory = new MuestrasViewModelFactory(new String[]{"hello","world","again"});
final MuestrasViewModel mvm = new ViewModelProvider(requireActivity(), mvFactory).get(MuestrasViewModel.class);
... //here comes the observers
  

Комментарии:

1. Попробуйте установить фрагмент в качестве владельца, вот так: final MuestrasViewModel mvm = new ViewModelProvider(this, mvFactory).get(MuestrasViewModel.class); Кроме того, вы можете удалить их из метода и объявить их непосредственно в классе.

2. Как вы добавляете свой фрагмент? Вы уверены, что фрагмент является тем же восстановленным экземпляром (вы можете сделать toString() с фрагментом и посмотреть, какой внутренний идентификатор)

3. ViewModel прикрепляется к фрагменту, как предложено в комментарии (с использованием ключевого слова this), но при повороте фрагмент сбрасывается.

4. Фрагмент объявлен в XML-макете activity layout.