【发布时间】:2020-02-22 20:30:39
【问题描述】:
我正在尝试使用导航组件在父片段及其子片段中使用相同的 ViewModel 实例。层次结构如下: 具有navigationHost 的单个Activity。该主机有 3 个子片段,A、B 和 C。最后一个片段还有带有 2 个片段的 navigationHost:X 和 Y。下图说明了层次结构。
预期: 我想与片段 X 和 Y 共享片段 C ViewModel 的同一个实例。
当前: 片段 C 的 ViewModel 被初始化两次:一次是在片段 C 初始化时,第二次是在片段 X 初始化时。片段 X 被设置为片段 C 导航图中的默认目的地。当我将默认目标更改为 Y 时,ViewModel 会在 C 和 Y 中初始化。
我已经尝试过的: 在子视图模型中我使用这个:
val viewModel: ParentViewModel =
ViewModelProvider(findNavController().getViewModelStoreOwner(R.id.parent_graph)).get(
ParentViewModel::class.java
)
在父视图模型中我使用这个:
val viewModel by viewModels<ParentViewModel>()
我还尝试使用 Koin sharedViewModel 注入 viewModel 并具有片段范围:
val viewModel by sharedViewModel<ParentViewModel>(from = { parentFragment!! })
也没有运气。
这可能还是导航库中的错误?
【问题讨论】:
标签: android android-fragments viewmodel android-jetpack android-jetpack-navigation