我有一个带有FragmentPagerAdapter的ViewPager,之前我的应用程序只使用了两个不同类型的片段,没有问题。
我刚刚添加了第三个片段,现在我的适配器/ViewPager似乎会在我远离它们时销毁我的片段。例如,如果我在第1页,当我接近第3页时,第3页被销毁并重新创建。如果我在第3页,第1页也是同样的情况。
这在我的应用程序中引起了许多问题。这些片段并不占用很多RAM,那么我该如何阻止这种情况发生?
我有一个带有FragmentPagerAdapter的ViewPager,之前我的应用程序只使用了两个不同类型的片段,没有问题。
我刚刚添加了第三个片段,现在我的适配器/ViewPager似乎会在我远离它们时销毁我的片段。例如,如果我在第1页,当我接近第3页时,第3页被销毁并重新创建。如果我在第3页,第1页也是同样的情况。
这在我的应用程序中引起了许多问题。这些片段并不占用很多RAM,那么我该如何阻止这种情况发生?
我相信你正在寻找 ViewPager.setOffscreenPageLimit()。
根据你的情况,下面的代码应该可以将你的fragment保留在内存中而不被销毁。
ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
pager.setOffscreenPageLimit(2);
然而,我怀疑你在销毁视图状态时没有正确地进行存储。你的碎片应该能够正确处理被销毁/重新创建的情况。例如,如果发生方向更改,你的碎片也会被销毁和重新创建。如果用户离开你的应用程序并且系统稍后需要内存并且销毁了你的Activity,则也可能发生这种情况。它应该能够重新打开并处于之前的相同状态。如果这确实是你的问题,请考虑在 onSaveInstanceState()中保存状态。所保存的状态将在 onCreate 中呈现给您,在那里您可以初始化碎片状态以与销毁的状态相同。
只需在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);
destroyItem(..)
。 - SMBiggs
FragmentPagerAdapter
,则在滑动时创建的Fragments
将永远不会被销毁。只有onPause
和onStop
方法将被调用。可能您正在使用FragmentStatePagerAdapter
。 - AppiDevo