ViewPager屏幕外的页面限制

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

我的目标是仅在selectfragment时才下载图像,或者仅在用户hover图像时下载图像。 一种方法是使用onPageSelected侦听器并设置一个标志,告诉GridViewAdapter是否允许下载图像。

我能想到的另一种HoverListener是在ImageView上设置一个HoverListener ,并只在onHover上下载图像,但是这个监听器只能在4.0及更高版本中使用。

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

Solutions Collecting From Web of "ViewPager屏幕外的页面限制"

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

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

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

然后用占位符图像加载您的网格,并不加载实际图像,直到页面更改。

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

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

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

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

 <android.support.v4.view.ViewPager [...] app:offscreenPageLimit="@{1}" [...] </android.support.v4.view.ViewPager> 

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

在里面,使用viewPager.removeViewAt(int) (即限制寻呼机只加载3个页面:当前,上一个和下一个, position + 1之前和position + 1之前删除多余的意见。

然后,您应该在viewpager适配器中处理destroyItem ,并在销毁的视图中recycle()位图。

 @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(); } } 

我的目标是只select一个片段时下载图像

你可以在setUserVisibleHint(boolean isVisibleToUser)中使用setUserVisibleHint(boolean isVisibleToUser)片段的callback。

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

比方说,如果你想要加载所有的片段(4片段),那么只能使用setOffscreenPageLimit(3) ,否则避免使用setOffscreenPageLimit

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

为了避免下载图片而用户实际上没有滚动到片段,你可以覆盖“setUserVisibilityHint(boolean visibleToUser)”,只有当“visibleToUser”变为true时才加载图片