有没有办法绕过ViewPager
及其屏幕外页面限制的正常行为?
我的ViewPager
包含四个fragments
,每个gridview
包含ViewPager
个图像。我遇到的问题是,在fragments
的实例化中,创建了两个fragment
,这导致同时从catch中下载/获取大约20个图像(每个片段大约10个)。是否可以禁用屏幕外页面限制?
我的目标是仅在选择onPageSelected
时下载图像,或仅在用户悬停图像时下载图像。实现此目的的一种方法是使用GridViewAdapter
侦听器并设置一个标志,告诉HoverListener
是否允许下载图像。
我能想到的另一种方法是在ImageView
上设置onHover
,只在{{1}}上下载图片,但该监听器仅在4.0及更高版本中可用
有没有更好的方法来实现这一目标?
答案 0 :(得分:38)
是否可以禁用屏幕外页面限制?
没有。它已设置为最小可能值:查看页面每侧一页。这对于使动画效果起作用是必要的 - 你可以同时看到两个片段(原始片段和新片段)的一部分。
我的目标是仅在选择片段时下载图像,或仅在用户悬停图像时下载图像。
然后使用占位符图像加载网格,并且在页面更改之前不要加载实际图像。
另外,请注意“悬停”意味着某种鼠标或类似的指针,这在大多数Android设备上都没有使用。
答案 1 :(得分:29)
只需将屏幕外限制设为一个。
ViewPager mViewpager = (ViewPager)findView....
mViewPager.setOffscreenPageLimit(1);
答案 2 :(得分:6)
我的目标是仅在选择片段时下载图像
您可以在ViewPager中使用片段的setUserVisibleHint(boolean isVisibleToUser)
回调。
答案 3 :(得分:3)
您也可以使用Android数据绑定在xml中执行此操作:
<android.support.v4.view.ViewPager
[...]
app:offscreenPageLimit="@{1}"
[...]
</android.support.v4.view.ViewPager>
答案 4 :(得分:2)
处理viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener()
在其中,使用position + 1
删除position - 1
之后和viewPager.removeViewAt(int)
之前的额外观看次数(即限制寻呼机仅加载3页:当前,上一页和下一页。
然后你应该在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();
}
}
答案 5 :(得分:1)
为避免在用户没有实际滚动到片段的情况下下载图像,您可以覆盖&#34; setUserVisibilityHint(boolean visibleToUser)&#34;并且仅在&#34; visibleToUser&#34;变得真实
答案 6 :(得分:0)
mViewPager.setOffscreenPageLimit(1);
不会给你想要的东西,如果它没有加载,它将加载邻居片段(这意味着它将加载2个片段)。
假设您想要一次加载所有片段(4个片段),那么只使用setOffscreenPageLimit(3)
,否则请避免使用setOffscreenPageLimit
。
我认为你无法改变viewpager加载邻居片段的默认行为。