【发布时间】:2021-09-21 12:23:30
【问题描述】:
我有一个带有RootFragment 的应用程序,其中包含一个ViewPager2,呈现多个ChildFragment。
RootFragment 有一个RootViewModel,每个ChildFragment 也有一个ChildViewModel。
运行应用程序,我可以看到根片段的视图模型被创建一次,并通过旋转等保存 - 这正是我所期望的。
但是,当我滚动浏览子片段并再次返回时,每次 ViewPager2 销毁/重新创建要显示的片段时,似乎都会重新创建 ChildVieWModels。这根本不是我需要的!
即使子片段本身被ViewPager2 销毁和重新创建,我如何才能保留子片段的视图模型?
我的子片段正在请求这样的视图模型:
private val viewModel: ChildViewModel by viewModels()
我也尝试将子视图模型的范围限定为父片段,但这只是意味着每个子片段都会获得相同的 ChildViewModel 实例,这也不完全正确:
private val viewModel: ChildViewModel by viewModels({ requireParentFragment() })
我查看了 ViewPager2 的示例,但它们的子片段中似乎都没有视图模型。
我在这里误解了什么?
【问题讨论】:
标签: android android-fragments android-viewmodel android-viewpager2