#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)
}
}