ViewPager屏幕外页面限制

有没有办法绕过ViewPager的正常行为及其屏幕外页面限制 ? 我的ViewPager包含四个fragments ,每个fragments包含一个图像的ViewPager 。 我遇到的问题是,在ViewPager的ViewPager ,会创建两个fragments ,这会导致同时从catch中下载/获取大约20个图像(每个片段大约10个)。 是否可以禁用屏幕外页面限制?

我的目标是仅在选择fragment时下载图像,或仅在用户hover图像时下载图像。 实现此目的的一种方法是使用onPageSelected侦听器并设置一个标志,该标志告诉GridViewAdapter是否允许下载图像。

我能想到的第二种方法是在ImageView上设置HoverListener ,并且只在onHover上下载图像,但该侦听器仅在4.0及更高版本中可用。

有没有更好的方法来实现这一目标?

  • Onclick on view pager in android无法在我的代码中工作
  • 将图标添加到SlidingTabLayout而不是Text
  • 替换已弃用的图库的选项
  • 从片段内部获取父ViewPager视图
  • Viewpager没有显示在RecyclerView行内
  • 另一个CoordinatorLayout中的CoordinatorLayout
  • IllegalArgumentException:半径必须> 0
  • Android setBackgroundResource导致内存不足
  • 是否可以禁用屏幕外页面限制?

    不可以。它已设置为最小可能值:查看页面每侧一页。 这对于使animation效果起作用是必要的 – 您可以同时看到两个片段(原始片段和新片段)的一部分。

    我的目标是仅在选择片段时下载图像,或仅在用户hover图像时下载图像。

    然后使用占位符图像加载网格,并且在页面更改之前不要加载实际图像。

    此外,请注意“hover”意味着某种鼠标或类似的指针,这在大多数Android设备上都没有使用。

    只需将屏幕外限制设置为1即可。

     ViewPager mViewpager = (ViewPager)findView.... mViewPager.setOffscreenPageLimit(1); 

    我的目标是仅在选择片段时下载图像

    您可以在setUserVisibleHint(boolean isVisibleToUser)中使用setUserVisibleHint(boolean isVisibleToUser)回调。

    您也可以使用Android数据绑定在xml中执行此操作:

      

    处理viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener()

    在其中,使用viewPager.removeViewAt(int)删除position + 1position + 1之前的额外视图(即限制寻呼机仅加载3个页面:当前,上一个和下一个。

    然后你应该在viewpager适配器中处理destroyItemrecycle()在被破坏的视图中的位图。

     @Override public void destroyItem(ViewGroup container, int position, Object object) { LinearLayout layout = (LinearLayout) object; ((ViewPager) container).removeView(layout); ImageView imgDisplay = (ImageView) layout.findViewById(R.id.quranPage); Drawable drawable = imgDisplay.getDrawable(); if (drawable instanceof BitmapDrawable) { BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; Bitmap bitmap = bitmapDrawable.getBitmap(); if (bitmap != null) //when reading page fails, this will be null bitmap.recycle(); } } 

    为了避免在没有用户实际滚动到片段的情况下下载图像,您可以覆盖“setUserVisibilityHint(boolean visibleToUser)”并仅在“visibleToUser”变为true时加载图像

    mViewPager.setOffscreenPageLimit(1); 不会给你想要的东西,它会加载邻居片段,如果它没有加载(这意味着它将加载2片段)。

    假设您想要一次加载所有片段(4个片段),那么只使用setOffscreenPageLimit(3) ,否则请避免使用setOffscreenPageLimit

    我认为你不能改变viewpager加载邻居片段的默认行为。