我已经实现了一个在查看器中显示片段的活动。该活动最初显示给定类型(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中的片段数量可能会增加。
我已经注释掉了片段的更新,问题已经解决了,所以问题在于更新片段所需的时间。有没有一种异步更新片段的方法?这应该能解决问题。
发布于 2014-02-08 21:06:22
默认情况下,ViewPager设置最小数量的Fragments。通常,当前Fragment中的左、右两个部分。因此,您不需要关心Fragments的总数。
您可以使用ViewPager.setOffScreenPageLimit()方法控制总数。
此外,AsyncTask似乎是管理Fragments的容器工作的好主意。
https://stackoverflow.com/questions/21604714
复制相似问题