1

我已经实现了一个在 viewpager 中显示片段的活动。活动最初显示给定类型(类型 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 中的片段数量可能会增加。

我已经注释掉了片段的更新,问题就消失了,所以问题是更新片段所需的时间。有没有办法异步更新片段?那应该解决这个问题。

4

1 回答 1

1

默认情况下,ViewPagerinstatiates 的最小计数为Fragments. 一般电流左右各一Fragment。所以你不需要关心Fragments.

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

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

于 2014-02-08T21:06:22.183 回答