您可以将 ViewPAger 页面内存限制更改为
viewPager.setOffscreenPageLimit(0);
deafult 为 1,因此左侧和右侧的一个 Fragment/View 将保留在内存中。
但是这是不好的做法,viewPager 在每一侧都保留一个片段/视图,以获得更好的性能和平滑和立即滚动的可能性。我建议您为ViewPager 创建侦听器,它会在滚动到所需片段时触发动画(不在onCreateView 中启动动画)。检查ViewPager.OnPageChangeListener,尤其是onPageSelected(int position)方法
编辑:
谷歌承认将限制设置为 0 很弱,在最新版本中 logcat 说:
Requested offscreen page limit 0 too small; defaulting to 1
所以你必须使用监听器来触发动画,它对性能也更好。就像你看到你想使用的方法被作者(谷歌本身)弃用。来自ViewPager 类的方法
public void setOffscreenPageLimit(int limit) {
if (limit < DEFAULT_OFFSCREEN_PAGES) {
Log.w(TAG, "Requested offscreen page limit " + limit + " too small; defaulting to " +
DEFAULT_OFFSCREEN_PAGES);
limit = DEFAULT_OFFSCREEN_PAGES;
}
if (limit != mOffscreenPageLimit) {
mOffscreenPageLimit = limit;
populate();
}
}
您也可以创建自己的ViewPager 或更改DEFAULT_OFFSCREEN_PAGES 或mOffscreenPageLimit 并触发populate(); 方法,所有这些都使用反射,就像这样
Field f = ViewPager.class.getDeclaredField("DEFAULT_OFFSCREEN_PAGES");
f.setAccessible(true);
f.setInt(viewPager, 0);
那么setOffscreenPageLimit(0); 应该可以工作