android - 使用父片段作为所有者在 ViewPager 中共享 ViewModel
问题描述
我在 ViewPager 中有一个带有片段 B 和片段 C 的父片段 A。我想在 Fragment B 和 Fragment C 中共享 Fragment 的 A ViewModel。
这是我的方法,起初看起来很直观:
在包含 ViewPager 的父片段 A 中,我像这样创建我的 viewModel:
val viewModel by viewModels<SharedViewModel>()
...
@HiltViewModel
class SharedViewModel @Inject constructor(
stateHandle: SavedStateHandle
) {
val myArgument = stateHandle.get<Boolean>("myArgument")
...
}
我的 ViewPager Fragment 的 B 和 C 正在尝试访问相同的SharedViewModel
实例,如下所示:
private val sharedViewModel by viewModels<SharedViewModel>(
ownerProducer = { requireParentFragment() }
)
一切正常,除非进程被破坏,我savedStateHandle
的 inSharedViewModel
不保留导航组件传递的参数。这样做会SharedViewModel
返回 null 并且savedStateHandle
是空的。
val myArgument = stateHandle.get<Boolean>("myArgument")
有人知道为什么会这样吗?使用activityViewModels
似乎可以解决这个问题,但我不完全明白为什么。