【问题标题】:ViewPager2 Adapter isn't reset after a restore instance stateViewPager2 适配器在恢复实例状态后不会重置
【发布时间】: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


    【解决方案1】:

    我通过在我使用的FragmentStateAdapter中覆盖getItemIdcontainsItem找到了解决方案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      • 2014-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多