【问题标题】:ViewPager setCurrentItem(n, false) calls instantiateItem multiple times - AndroidViewPager setCurrentItem(n, false) 多次调用 instantiateItem - Android
【发布时间】:2016-06-02 11:37:28
【问题描述】:

我有一个 ViewPager,其中显示的每个页面都使用 UniversalImageLoader 和图像 URL 加载全屏图像。

我正在使用 viewPager.setCurrentItem(n, false) 将 ViewPager 打开到任何图像,而不总是第一张图像。

问题是,当我调用 viewPager.setCurrentItem(n, false) 时,它会调用 instantiateItem (n+1) 次,而通用图像加载器会加载所有这些(n+1) 张图片对我来说效率低下。

我希望我的 ViewPager 将当前项目设置为 (n) 并且只实例化前后页面。有可能吗?

【问题讨论】:

  • 查看分页器包含片段或视图?
  • 带有 PagerAdapter 的视图
  • 它的默认行为。尝试将数字 'n' 设为全局,并通过位置来完成任务。但必须再次处理滚动。

标签: android android-viewpager


【解决方案1】:

试试这个:

yourViewPager.setOffscreenPageLimit(1);

然后您的视图寻呼机只加载 (n-1) 、 (n) 和 (n+1) 页面。\ 此外,如果您在视图寻呼机中使用片段,您可以通过以下方式强制它加载片段#n:

public class MyFragment extends Fragment {
  @Override
  public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        //Load your image
      }
        else {  }
      }
    }

【讨论】:

    【解决方案2】:

    根据Android documentation,使用setCurrentItem(int position, boolean smoothScroll)setCurrentItem(int position) 会将ViewPager 滚动到给定位置。因此将加载将滚动的所有视图。因此,如果您不想加载所有这些视图,则不应调用该方法。

    相反,您可以尝试调整用于PagerAdapterList 中项目的位置。因此,您可以尝试将List 中位置5 的项目移动到位置0,然后更新PagerAdapter,而不是将ViewPager 滚动到位置5。例如,您可以删除前 4 个项目并将它们放在最后,这将减少必须加载的视图数量。但我不知道这是否符合您的要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-15
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      相关资源
      最近更新 更多