Viewpager 不清除片段

Posted

技术标签:

【中文标题】Viewpager 不清除片段【英文标题】:Viewpager not clearing fragments 【发布时间】:2021-10-31 04:33:05 【问题描述】:

我在使用嵌套查看器时遇到了这个问题。

我有两个级别的浏览器。我们称它为 levelOneViewPager,其中我还有一个 viewpager,我们称它为 levelTwoViewPager。

Activity为levelOneViewPager加载数据并设置适配器。

levelOneViewPager 在 onViewCreated 中为 levelTwoViewPager 加载数据并设置适配器。

levelOneViewPager 首次加载数据时一切正常。

现在问题来了。 levelOneViewPager 的第一页已加载,我移至第 4 页并返回第一页,应用程序崩溃。 原因,现在 levelOneViewPager 的第一页被重新创建并正在加载数据,甚至在它设置适配器之前,levelTwoViewPager 的片段已创建并正在访问父片段中的一些数据,这些数据尚不可用。

这是怎么回事?我尚未将适配器设置为 levelTwoViewPager,但已为其创建了片段。

(我尝试同时使用 FragmentPagerAdapter 和 FragmentStatePagerAdapter,这是相同的行为)

【问题讨论】:

【参考方案1】:

为父viewpager添加offscreenpage限制,这应该可以解决问题

【讨论】:

这将如何解决问题?这没有意义。反正我试过了,还是一样。 如果您将 ser 限制为零,它将每次都重新创建父片段,这意味着子片段也将被再次创建 你不能将 offscreenpagelimit 设置为 0,默认情况下它总是 1。任何低于 1 的东西你都尝试设置它丢弃。

以上是关于Viewpager 不清除片段的主要内容,如果未能解决你的问题,请参考以下文章

滑动 ViewPager 时如何清除片段相关状态

如何在 viewpager 每个项目的片段底部添加动作布局

如何使用 Tablayout 清除 Viewpager 的缓存内存

ViewPager 片段重新创建,已恢复但不可见

ViewPager2 无法动态添加删除片段

选择片段 A 时如何在 ViewPager 上不一起启动所有片段