Можем ли мы получить тот же экземпляр ViewModel внутри родительской активности, когда мы используем navgraph ViewModels?

#android #android-viewmodel #android-navigation #android-navigationview #android-navigation-graph

Вопрос:

У меня есть представление контейнера фрагментов для загрузки более трех фрагментов, каждый фрагмент совместно используется ViewModel с использованием navgraph ViewModels

 private val viewModel: HomeViewModel by navGraphViewModels(R.id.home_navigation_xml) { defaultViewModelProviderFactory }
 

Как мы можем получить один и тот же экземпляр ViewModel внутри родительской активности?

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

1. Почему вы используете модель представления с областью видимости навигационного графика, если хотите получить к ней доступ в более широком масштабе (т. Е. На уровне всей активности)?

Ответ №1:

Я использовал следующий метод для решения своей проблемы.

 val viewModel by lazy {
            binding?.homeFragmentContainerView?.findNavController()
                ?.getViewModelStoreOwner(R.id.home_navigation_xml)?.viewModelStore?.let {
                    ViewModelProvider(
                        it,
                        ViewModelProvider.AndroidViewModelFactory.getInstance(application)
                    ).get(HomeViewModel::class.java)
                }
        }