【发布时间】:2022-11-22 08:00:45
【问题描述】:
我需要以动态更新显示在 ViewPager2 中的片段的方式设置 ViewPager2。
为了促进这一点,我创建了一个视图模型 LiveData 对象,其中包含一个项目列表,这些项目代表片段应显示的数据:
val items: LiveData<List<Item>>
在包含 ViewPager2 的片段中,在 onViewCreated 中我设置了观察项目:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.items.observe(viewLifecycleOwner) { items ->
binding.viewPager.adapter = createFragmentStateAdapter(items)
}
}
这一切都很好,除非我在打开“不保持活动”的情况下进行测试。当我将应用程序设置为背景/前景时,我看到包含 ViewPager2 的片段已重新创建,并且可观察的项目正在广播更新。但是,出于某种原因,ViewPager2 显示的是较旧的 Fragment,并且似乎忽略了在 items observe 块中创建的新适配器。
当适配器更改时,如何让 ViewPager2 正确更新?
我相信可能发生的情况是 ViewPager2 正在尝试恢复其自身状态,但在此过程中忽略了最近对要使用的适配器所做的更改。
【问题讨论】:
标签: android android-fragments android-viewpager2