Android Fragments ViewPager2适配器在恢复示例状态后未重置

ddarikpa  于 2022-11-24  发布在  Android
关注(0)|答案(2)|浏览(224)

我需要以动态更新ViewPager 2中显示的片段的方式设置ViewPager 2。
为了便于实现这一点,我创建了一个视图模型LiveData对象,其中包含一个项目列表,这些项目表示片段应该显示的数据:

val items: LiveData<List<Item>>

在我的包含ViewPager 2的片段中,在onViewCreated中,我设置观察项:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    viewModel.items.observe(viewLifecycleOwner) { items ->
        binding.viewPager.adapter = createFragmentStateAdapter(items)
    }
}

这一切都运行良好,除了当我打开“不保留活动”进行测试时。当我在后台/前台运行应用时,我看到包含ViewPager 2的片段被重新创建,而且items observable正在广播更新。但是,由于某种原因,ViewPager 2显示了一个旧的片段,似乎忽略了items observe块中创建的新适配器。
如何在适配器更改时正确更新ViewPager 2?
我认为可能发生的情况是ViewPager 2正在尝试恢复其自身的状态,但在此过程中忽略了要使用的适配器的最近更改。

vfwfrxfs

vfwfrxfs1#

Adapter创建不能放在observe中,因为每次更新数据都会创建一个Adapter,在viewCreated中创建Adapter,Adapter中有数据添加和UI更新操作。
第一个

dced5bon

dced5bon2#

我找到了一个解决方案,方法是在使用的FragmentStateAdapter中重写getItemIdcontainsItem

相关问题