【问题标题】:Preload fragment's view in ViewPager on first run首次运行时在 ViewPager 中预加载片段视图
【发布时间】:2013-08-20 17:50:20
【问题描述】:

我正在使用包含 3 个片段的 ViewPager,每个片段加载一个列表。问题是当应用程序第一次运行并且我滑动到下一个片段时,这个片段需要一些时间来加载(大约 2 秒),然后它的视图才可见。这是一种非常奇怪的行为。我想要的只是一旦应用程序启动,ViewPager 中的所有片段都应该为用户准备好,所以当他们刷过片段时,没有等待时间。我怎样才能做到这一点?

【问题讨论】:

  • 您使用的是 FragmentPageAdapter 还是 FragmentStatePageAdapter?
  • 您可以考虑在活动(或寻呼机)中缓存片段列表适配器。这将防止适配器在每次页面更改时重新加载。
  • @Delyan 我使用 FragmentPagerAdapter
  • “这个片段需要一些时间来加载(大约 2 秒)才能看到它的视图” - 听起来你应该抛出一个加载指示器来弥合差距。虽然,如果在这 2 秒延迟期间有什么东西阻塞了 UI 线程,您应该改为修复它。在这种情况下,下面的答案不会真正有帮助,因为它只是将延迟转移到创建 ViewPager 的时间。

标签: android android-fragments android-viewpager


【解决方案1】:

只需在 onCreate() 中调用setOffscreenPageLimit()(在初始化 ViewPager 之后)。 OffscreenPageLimit 设置应保留到当前页面任一侧的页面数(在您的情况下为 2)。这样,您的所有片段都将被实例化。

(另一种(强烈推荐)可能是提高列表或列表适配器的性能,因为 2 秒的加载时间听起来不太好)

【讨论】:

  • 实际上将其设置为2 已经可以确保保留所有 3 个片段。该值设置应保留到当前页面的任一侧的页面数,而不是总页面数。
  • 是的,我知道。但是您也可以将限制设置为100,它仍然有效;-) 这只是一个示例,当然如果他愿意,他可以将限制设置为2
  • 那么在这种情况下,为什么在你的答案中说 " 在你的情况下 3" ?这是不正确的,它向我表明你不知道,这就是我最初添加评论以指出这一点的原因。
  • 好的,为了消除关于 setOffscreenPageLimit() 函数的歧义,我将编辑我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多