【发布时间】:2020-01-11 07:21:59
【问题描述】:
我正在使用嵌套导航图,以便在一组片段中划分和共享我的视图模型。
我还有一个 BaseFragment 类,它获取对所需视图模型的引用:
fun provideViewModel() : VM {
return if(viewModelScopeGraphId != null) {
ViewModelProvider(findNavController().getViewModelStoreOwner(viewModelScopeGraphId!!)).get(viewModelClass)
} else {
ViewModelProvider(this).get(viewModelClass)
}
}
如果我需要将视图模型限定为具有该特定 ID 的导航图(或嵌套导航图),我可以覆盖属性 viewModelScopeGraphId。
理想情况下,我只想设置一个布尔标志,如 useScopedViewModel 并获取当前导航图的 id,例如:
fun provideViewModel() : VM {
return if(useScopedViewModel) {
ViewModelProvider(findNavController().getViewModelStoreOwner(getCurrentNavGraphId())).get(viewModelClass)
} else {
ViewModelProvider(this).get(viewModelClass)
}
}
我曾尝试使用navController.graph.id 获取当前图形ID,但我从那里获得的ID 似乎与我的资源ID 不匹配(例如R.id.nav_graph)。有什么我遗漏的吗?
【问题讨论】:
标签: android android-architecture-components android-architecture-navigation