android – 在FragmentStatePagerAdapter中保存状态和恢复状态

前端之家收集整理的这篇文章主要介绍了android – 在FragmentStatePagerAdapter中保存状态和恢复状态前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我在屏幕上使用带有FragmentStatePageAdapter的ViewPager我有5个页面,其中包含大量图像和视图.目前我有mViewPager.setOffscreenPageLimit(1);所以只有当前,前一个和下一个将在内存中,其他2将被销毁.但是对于那些被破坏的片段,我想利用适配器的saveState()和restoreState()来维持它的状态,所以当我回到那个屏幕时,无论如何都会转到那个片段的onCreateView(),它也会保持状态.

有mViewPager.setOffscreenPageLimit(4);因为它有内存问题,所以不是一个好选择.

搜索了很多,但我没有得到任何使用这2个函数维持和恢复状态的样本.

有人可以帮助我继续.

最佳答案
无需覆盖FragmentStatePagerAdapter的saveState()和restoreState()方法.

主要是因为它已经为您完成了FragmentStatePagerAdapter实现的核心.传递给构造函数的FragmentManager负责恢复先前实例化的片段.实际上,FragmentStatePagerAdapter的instantiateItem()回调确保它返回具有已保存状态的片段.

话虽如此,只需覆盖片段的onSaveInstanceState()方法,并将要恢复的所有内容放入Bundle outState中.

您放置在Bundle中的数据将在onCreate(Bundle),onCreateView(LayoutInflater,ViewGroup,Bundle)和onActivityCreated(Bundle)方法的Bundle中提供.

到现在为止你可以争辩说:

“But I have already tried to save the state of the fragment that way.
It does not work for me!”

如果您发现自己处于这种情况,请检查如何初始化片段的状态变量.可能是你从Bundle中获得了你想要的东西,但是从你从片段的getArguments()方法获得的值中覆盖它. (这正是我的斗争,也可能是你的情况,如果你使用工厂方法来实例化片段).

另外,将FragmentStatePagerAdapter放在活动的onCreate方法中(而不是onStart).

猜你在找的Android相关文章