android - 如何防止 viewpager 在 android 中默认初始化下一个 View ?

标签 android android-viewpager fragment

我已经实现了 viewpager 以在 android 应用程序中显示一些介绍屏幕。有 4 个不同的屏幕,上面有不同的动画。我的问题是,当用户在 viewpager 的 0 fragment 上时, fragment 1 默认初始化并且动画在后台结束,当用户转到 fragment 1 时没有动画(因为当 fragment 1 与 fragment 1 同时初始化时动画已经结束)。我想做的是,当用户在 fragment 0 上时,只有 fragment 0 应该初始化,而不是下一个 fragment ,即 fragment 1。当用户转到 fragment 1 时, fragment 0 应该销毁,以便在滑回 fragment 0 时它应该再次初始化以显示动画。我该怎么做。

最佳答案

您可以将 ViewPAger 页面内存限制更改为

viewPager.setOffscreenPageLimit(0);

默认为 1,因此左侧和右侧各一个 Fragment/View 将保留在内存中。

但这是一种糟糕的做法,viewPager 在每一侧都保留一个 fragment/ View ,以获得更好的性能以及平滑和立即滚动的可能性。我建议您为 ViewPager 创建监听器,它会在滚动到所需 fragment 时触发动画(而不是在 onCreateView 中启动动画)。检查ViewPager.OnPageChangeListener , 特别是 onPageSelected(int position) 方法

编辑: 谷歌承认将限制设置为 0 是很弱的,在最新版本的 logcat 中说:

Requested offscreen page limit 0 too small; defaulting to 1

所以你必须使用监听器来触发动画,它对性能也更好。就像您看到的那样,您想要使用的方法已被作者(Google 本身)弃用。 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_PAGESmOffscreenPageLimit 并触发 populate(); 方法,全部使用反射,像这样

Field f = ViewPager.class.getDeclaredField("DEFAULT_OFFSCREEN_PAGES");
f.setAccessible(true);
f.setInt(viewPager, 0);

然后 setOffscreenPageLimit(0); 应该可以工作

关于android - 如何防止 viewpager 在 android 中默认初始化下一个 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27547882/

相关文章:

android - GAPP 中的问题未安装在 Genymotion 模拟器中

android - 在 Eclipse 中添加库时出现 Jar 不匹配错误

Android添加 fragment 后退后无法显示

java - 替换时如何保存 fragment 内容?

android - fragment 未显示在 ActionBar 下方的 MenuDrawer

android - HeifDecoderImpl 导致 'decStrong() called too many times'

android - 选中ToggleButton时,Android在AsyncTask中播放声音

android - 我想改变 ringertonevolume 的音量

android - 确定哪个 fragment 当前在 ViewPager 中可见

android - 标签标题不显示