Внутри Activity
вы можете получить ViewModel
с этой областью Activity
, например:
val viewModel = ViewModelProviders.of(this)[ViewModel::class.java]
//or
val viewModel by viewModels<ViewModel>()
Аналогично в Fragment
вы можете получить ViewModel
на
//scoped to parent Activity
val viewModel: ViewModel by activityViewModels()
//scoped to parent Fragment
val viewModel: ViewModel by viewModels({ requireParentFragment() })
//scoped to navigation graph
val viewModel: ViewModel by navGraphViewModels(R.id.login_graph)
Теперь, если я попытаюсь получить доступ к ViewModel
внутри Activity
, который ограничен областью навигации, тогда нет вспомогательного метода, поэтому я должен сделать
val viewModel by lazy {
ViewModelProvider(findNavController(R.id.nav_host_fragment)
.getViewModelStoreOwner(R.id.your_graph).viewModelStore,
ViewModelProvider.AndroidViewModelFactory.getInstance(application)
).get(ViewModel::class.java)
}
Есть ли помощникметод, который я пропустил?Должен ли я получить к нему доступ через область навигации?Могу ли я просто использовать область видимости Activity
для доступа к тому же ViewModel
?