gpt4 book ai didi

android - FragmentStatePagerAdapter 性能问题

转载 作者:行者123 更新时间:2023-11-30 03:07:10 27 4
gpt4 key购买 nike

我已经实现了一个在 viewpager 中显示 fragment 的 Activity 。该 Activity 最初显示给定类型(类型 A)的 5 个 fragment 。每个类型 A fragment 都包含一个信息列表。按下按钮时, fragment 将替换为另一种类型为 B 的 fragment (即加载使用不同布局并显示不同信息的 fragment )。

我已经使用 ViewPager 和自定义 FragmentStatePagerAdapter 实现了这一点。自定义 FragmentStatePagerAdapter 覆盖了 getCount、instantiateItem、getItem、getItemPosition 等函数,并且一切正常。当我按下按钮时, View 从 fragment 类型 A 切换到 fragment 类型 B。为此,我使用了替换 fragment 事务,并且还在适配器上调用了 notifyDataSetChanged。从类型 A 到类型 B fragment 的切换是通过检查我需要在适配器的 getItem 函数中创建哪种类型的 fragment 来完成的。问题在于切换过程(即,从 fragment 类型 A 更改为 fragment 类型 B,反之亦然)需要一些时间(大约 2 秒)- 这种延迟非常明显且令人讨厌。

发生这种情况是因为适配器的 getItemPosition 函数返回 POSITION_NONE。当返回 POSITION_NONE 时,viewPager 重新创建 fragment 。此外,当执行替换事务时,适配器的所有项都将被删除并重新创建所有新项。当我切换回 fragment 类型 A 时也会发生同样的情况。

有谁知道是否有更好或更快的方法来做到这一点?使用 FragmentPagerAdapter 应该不是一个好的解决方案,因为 viewPager 中的 fragment 数量可能会增加。

我已经注释掉了 fragment 的更新,问题消失了所以问题是更新 fragment 所花费的时间。有没有办法异步更新 fragment ?这应该可以解决问题。

最佳答案

ViewPager 默认设置一个最小数量的Fragments。通常是当前 Fragment 的左右之一。所以你不需要关心Fragments的总数。

您可以使用 ViewPager.setOffScreenPageLimit() 控制总数方法。

还有一个 AsyncTask管理您的 Fragments 的密集工作似乎是个好主意。

关于android - FragmentStatePagerAdapter 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21604714/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com