防止ViewPager破坏离屏视图

我有一个ViewPager挂钩到显示三个片段的FragmentPagerAdapter。 当ViewPager从当前位置滑动多次时,ViewPager似乎会破坏托pipe片段的视图。

这些视图都是简单的列表,这种优化是完全不必要的,所以我想禁用它。 这是造成一些视觉问题,因为列表有布局animation应用到他们和这些animation被重播后,他们已经被破坏和重新创build。 它还会每次显示滚动条介绍animation(滚动条可以简单地显示,以指示滚动是可能的),这可能会分散注意力,并且用户当前的滚动位置在该过程中丢失。

它也不会加载第三个片段,直到第一次刷卡发生,这是有问题的,因为每个片段处理自己的服务调用,并且我希望在活动加载的同时,所有三个片断都会closures。 延迟第三次服务呼叫并不理想。

有没有什么办法说服ViewPager停止这种行为,只是把我所有的片段保存在内存中?

在支持包的修订版本4中,ViewPager添加了一个方法,允许您指定要使用的屏幕外页面的数量,而不是缺省值为1。

在你的情况下,你要指定2,这样当你在第三页上时,第一个不会被销毁,反之亦然。

mViewPager = (ViewPager)findViewById(R.id.pager); mViewPager.setOffscreenPageLimit(2); 

“设置应保留在视图层次结构中当前页面任意一侧的空闲状态的页数,超出此限制的页面将在需要时从适配器重新创build。

http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int);

默认情况下,当您滑动页面时,ViewPager会重新创build片段。 为了防止这种情况,你可以尝试以下两件事之一:

1.在片段的onCreate()中,调用setRetainInstance(true)。

2.如果片段数量固定且相对较小,则在onCreate()中添加以下代码:

 ViewPager mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setOffscreenPageLimit(3); 

如果我没有记错,第二个select是更有希望的。 但是我强烈build议您尝试一下,看看他们中的哪一个人工作。