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