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轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...