Я пытаюсь использовать один и тот же экземпляр ViewModel в родительском фрагменте и его дочерних элементах, используя компонент навигации. Иерархия выглядит следующим образом: Одиночное действие с навигацией. У этого хоста есть 3 дочерних фрагмента, A, B и C. В последнем фрагменте также есть навигация Хост с 2 фрагментами: X и Y. График ниже иллюстрирует иерархию.
Ожидается: я хотел бы поделиться тот же экземпляр фрагмента C ViewModel с фрагментами X и Y.
Current: ViewModel фрагмента C инициализируется дважды: один раз, когда инициализируется фрагмент C, и второй раз, когда инициализируется фрагмент X. Фрагмент X установлен как пункт назначения по умолчанию в фрагменте C nav graph. Когда я меняю место назначения по умолчанию на Y, ViewModel инициализируется в C и Y.
Что я уже пробовал: В дочерних моделях view я использую это:
val viewModel: ParentViewModel =
ViewModelProvider(findNavController().getViewModelStoreOwner(R.id.parent_graph)).get(
ParentViewModel::class.java
)
В родительском viewModel Я использую это:
val viewModel by viewModels<ParentViewModel>()
Я также пытался внедрить viewModel, используя Koin sharedViewModel с областью фрагмента:
val viewModel by sharedViewModel<ParentViewModel>(from = { parentFragment!! })
Также не повезло.
Возможно или это ошибка в навигационной библиотеке?