22

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

不过,我刚刚添加了第三个片段,现在当我远离它们时,我的适配器/viewpager 似乎正在破坏我的片段。例如,如果我在第 1 页,当我接近第 3 页时,它会被破坏并重新创建。如果我在第 3 页,那么第 1 页也会发生同样的情况。

这在我的应用程序中引起了很多问题。这些片段根本不是很重的 RAM,那么我怎样才能阻止这种情况发生呢?

4

2 回答 2

52

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

在您的情况下,以下内容应将您的片段保存在内存中而不是破坏它们。

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

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

于 2012-11-07T15:57:14.273 回答
5

只需在 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);

从你的代码

于 2015-08-19T04:54:57.843 回答