Совместное использование одного экземпляра ViewModel между различными фрагментами на экране - PullRequest
0 голосов
/ 01 декабря 2019

Я использую один шаблон активности и на одном конкретном экране хочу поделиться одной моделью представления с двумя разными фрагментами. После небольшого исследования я нашел следующие решения:

  1. Я использую экземпляр действия при создании viewModel, чтобы оба моих фрагмента получили один и тот же экземпляр. но недостаток этого подхода заключается в том, что экземпляр viewModel будет работать до тех пор, пока приложение не будет запущено.
ViewModelProviders.of(Activity.this, viewModelFactory).get(CustomViewModel::class.java)

Я могу добавить тег к первому фрагменту при его запуске и передать экземпляр первого фрагмента при создании viewModel во втором фрагменте. Таким образом, у меня будет один экземпляр ViewModel, разделенный на два фрагмента. ViewModelProviders.of(fragmentManager?.findFragmentByTag(TAG)!!, viewModelFactory).get(CustomViewModel::class.java)

Я прочитал еще один метод, чтобы поделиться viewModel, но я забыл, потому что он не работает для меня.

Я хотел бычтобы узнать, какой метод лучше всего поделится viewModel между фрагментами. Какие у меня есть варианты? Благодаря.

1 Ответ

0 голосов
/ 04 декабря 2019

в соответствии с документами . Вот как вы можете использовать одну и ту же модель ViewModel для нескольких фрагментов.

model = activity?.run {
        ViewModelProviders.of(this)[SharedViewModel::class.java]
    } ?: throw Exception("Invalid Activity")

, как описано в следующих документах:

Обратите внимание, что оба фрагмента извлекают действие, которое их содержит. Таким образом, когда каждый из фрагментов получает ViewModelProvider, они получают один и тот же экземпляр SharedViewModel, который ограничен этим действием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...