Android 访问“活动”中的“ViewModel”,作用域为导航图

Android 访问“活动”中的“ViewModel”,作用域为导航图,android,android-viewmodel,android-architecture-navigation,Android,Android Viewmodel,Android Architecture Navigation,在Activity内部,您可以获得一个ViewModel范围为该Activity的视图,如下所示: val viewModel = ViewModelProviders.of(this)[ViewModel::class.java] //deprecated way val viewModel = ViewModelProvider(this)[ViewModel::class.java] //or val viewModel by viewModels<ViewModel>()

Activity
内部,您可以获得一个
ViewModel
范围为该
Activity
的视图,如下所示:

val viewModel = ViewModelProviders.of(this)[ViewModel::class.java] //deprecated way
val viewModel = ViewModelProvider(this)[ViewModel::class.java]
//or
val viewModel by viewModels<ViewModel>()
现在,如果我试图访问
活动
中的
视图模型
,它的作用域是导航图,那么就没有助手方法,所以我必须这样做

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

有没有我错过的助手方法?我必须通过导航图范围访问它吗?我可以只使用
活动
范围访问相同的
视图模型

为什么活动应该知道儿童的视图模型的范围?看看这是否有帮助
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)
}