如何告诉我的自定义FragmentPagerAdapter停止销毁我的碎片?

时间:2012-11-07 15:53:19

标签: android android-fragments android-viewpager

我有一个带有FragmentPagerAdapter的ViewPager,我的应用程序之前只使用过两个片段(不同类型)而没有问题。

我刚刚添加了第三个片段,现在我的适配器/ viewpager似乎在远离它们时会破坏我的碎片。例如,如果我在第1页,第3页将被销毁并在我接近它时重新创建。如果我在第3页,第1页也是如此。

这会在我的应用中造成很多问题。片段根本不是RAM很重,所以我怎么能阻止这种情况发生呢?

2 个答案:

答案 0 :(得分:47)

我相信您正在寻找ViewPager.setOffscreenPageLimit()

在您的情况下,以下内容应将您的碎片保留在内存中而不是销毁它们。

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

但是,我怀疑你在销毁时没有正确存储你的视图状态。您的片段应该正确处理被销毁/重新创建。例如,如果方向发生变化,您的片段也会被销毁并重新创建。如果用户离开您的应用程序并且系统稍后需要内存并破坏您的活动,也可能发生这种情况。它应该能够重新打开并处于与以前相同的状态。如果这确实是您的问题,请考虑在onSaveInstanceState()中保存状态。保存的状态将在onCreate中呈现给您,您可以在其中初始化片段的状态,使其与已销毁的状态相同。

答案 1 :(得分:4)

只需在FragmentpagerAdapter

中覆盖此方法
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
       // TODO Auto-generated method stub
       super.destroyItem(ViewGroup container, int position, Object object);
}

删除super.destroyItem(ViewGroup container, int position, Object object);

来自您的代码