ViewPager屏幕外页面限制

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

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

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

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

Related of "ViewPager屏幕外页面限制"

是否可以禁用屏幕外页面限制?

不可以。它已设置为最小可能值:查看页面每侧一页。 这对于使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加载邻居片段的默认行为。