Я пытаюсь использовать новые компоненты архитектуры в Android, и до сих пор это работало очень хорошо. Однако я наткнулся на архитектурную проблему.
У меня есть MainActivity
, в котором находится множество фрагментов: A
, B
и C
. До сих пор каждый раз, когда мне нужна моя ViewModel (VM), я извлекаю ее в контексте MainActivity
(например: MyViewModel vm = ViewModelProviders.of(getActivity()).get(MyViewModel.class);
). Теперь подумайте об этом:
- Фрагмент
C
позволяет пользователю выбрать какое-то значение и записать его в файлVM
. - Фрагмент
A
использует фрагментC
, чтобы пользователь мог выбрать значение, а затемA
считывает значение непосредственно изVM
и показывает его в своем пользовательском интерфейсе. - Фрагмент
B
использует тот же подход, что и фрагментA
.
Проблема в том, что поскольку VM
всегда находится в контексте MainActivity
, если фрагмент A
использовался до B
, значение все равно будет доступно, а B
покажет некоторые старые данные.
Наиболее очевидным решением, которое я вижу, является создание VM
в контексте фрагментов A
и B
соответственно. Но тогда я не могу понять, как предоставить фрагменту C
доступ к этим VM
.
Я также мог бы создать VM
в контексте фрагмента C
, но для этого потребовались бы фрагменты A
и B
для создания экземпляра C
, что я не думаю, что это хорошее решение.
Третьим решением было бы сохранить текущий подход и очистить данные в VM
, когда это уместно, но я думаю, что это тоже беспорядок.
Каков наилучший способ сделать это?