首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FragmentStatePagerAdapter性能问题

FragmentStatePagerAdapter性能问题
EN

Stack Overflow用户
提问于 2014-02-06 13:44:43
回答 1查看 1.7K关注 0票数 1

我已经实现了一个在查看器中显示片段的活动。该活动最初显示给定类型(A类型)的5个片段。每个类型A片段包含一个信息列表。当按下按钮时,碎片被替换为另一组碎片,类型B(即加载使用不同布局并显示不同信息的碎片)。

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

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

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

我已经注释掉了片段的更新,问题已经解决了,所以问题在于更新片段所需的时间。有没有一种异步更新片段的方法?这应该能解决问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-08 21:06:22

默认情况下,ViewPager设置最小数量的Fragments。通常,当前Fragment中的左、右两个部分。因此,您不需要关心Fragments的总数。

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

此外,AsyncTask似乎是管理Fragments的容器工作的好主意。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21604714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档