Я использую вложенные навигационные графики для того, чтобы охватывать и делиться моими моделями представления по набору фрагментов.
У меня также есть класс BaseFragment, который получает ссылку на требуемую модель представления:
fun provideViewModel() : VM {
return if(viewModelScopeGraphId != null) {
ViewModelProvider(findNavController().getViewModelStoreOwner(viewModelScopeGraphId!!)).get(viewModelClass)
} else {
ViewModelProvider(this).get(viewModelClass)
}
}
Я могу переопределить свойство, viewModelScopeGraphId
, если мне нужна область видимости для определения области навигации (или вложенного графика навигации) с указанным c идентификатором. В идеале я бы просто хотел установить логический флаг типа useScopedViewModel
и получить идентификатор текущего графика навигации, например:
fun provideViewModel() : VM {
return if(useScopedViewModel) {
ViewModelProvider(findNavController().getViewModelStoreOwner(getCurrentNavGraphId())).get(viewModelClass)
} else {
ViewModelProvider(this).get(viewModelClass)
}
}
Я пытался использовать navController.graph.id
, чтобы получить идентификатор текущего графика, но кажется, что идентификатор, который я получаю оттуда, не совпадает с идентификатором моего ресурса (например, R.id.nav_graph
). Что-то мне не хватает?