我正在尝试通过导航组件在父片段及其子代中使用相同的ViewModel实例。层次结构如下:具有NavigationHost的单个Activity。该主机有3个子片段,A,B和C。最后一个片段也具有带有2个片段的navigationHost:X和Y。下图说明了层次结构。
预期:我想与片段X和Y共享片段C ViewModel的相同实例。
当前:片段C的ViewModel初始化两次:片段C初始化时一次,片段X初始化时第二次。在片段C导航图中,片段X被设置为默认目标。当我将默认目标更改为Y时,ViewModel在C和Y中初始化。
我已经尝试过的方法:在子viewModel中,我使用以下代码:
val viewModel: ParentViewModel = ViewModelProvider(findNavController().getViewModelStoreOwner(R.id.parent_graph)).get( ParentViewModel::class.java )
在父viewModel中,我使用此:
val viewModel by viewModels<ParentViewModel>()
我还尝试使用Koin sharedViewModel注入具有片段范围的viewModel:
val viewModel by sharedViewModel<ParentViewModel>(from = { parentFragment!! })
也没有运气。
是否可能是导航库中的错误?
我正在尝试通过导航组件在父片段及其子代中使用相同的ViewModel实例。层次结构如下:具有NavigationHost的单个Activity。该主机有3个...
NavHostFragment
本身就是片段,因此您的结构实际上是