我在屏幕上使用 ViewPager
和 FragmentStatePageAdapter
我有 5 个页面,其中有很多图像和 View 。目前我有 mViewPager.setOffscreenPageLimit(1);
所以只有当前、上一个和下一个会在内存中,其他 2 个将被销毁。但是对于那些被破坏的 fragment ,我想利用适配器的 saveState()
和 restoreState()
来维持它的状态,所以当我回到那个屏幕时,它无论如何都会转到该 fragment 的 onCreateView()
也将保持状态。
mViewPager.setOffscreenPageLimit(4);
不是一个好的选择,因为它有内存问题。
我搜索了很多,但没有找到任何使用这两个函数来维护和恢复状态的示例。
有人可以帮我继续吗。
最佳答案
无需覆盖 FragmentStatePagerAdapter
的 saveState()
和 restoreState()
方法。
主要是因为它是已经为您完成的 FragmentStatePagerAdapter
实现的核心。您传递给构造函数的 FragmentManager
负责恢复之前实例化的 fragment 。实际上,FragmentStatePagerAdapter
的 instantiateItem()
回调确保它返回带有已保存状态的 fragment 。
话虽如此,只需重写 fragment 的 onSaveInstanceState()
方法并将您想要恢复的所有内容放入 Bundle outState
。
您放置在 Bundle 中的数据将在提供给 onCreate(Bundle)
、onCreateView(LayoutInflater, ViewGroup, Bundle)
和 的 Bundle 中可用onActivityCreated(Bundle)
方法。
现在你可以争论了:
"But I have already tried to save the state of the fragment that way. It does not work for me!"
如果您发现自己处于这种情况,请检查您如何初始化 fragment 的状态变量。可能是您从 Bundle 中获得了您想要的东西,但随后从您从 fragment 的 getArguments()
方法中获得的值覆盖了它。 (这正是我的挣扎,如果您使用工厂方法来实例化 fragment ,也可能是您的情况)。
此外,将您的 FragmentStatePagerAdapter
放在 Activity 的 onCreate
方法中(而不是放在 onStart
中)。
关于android - 在 FragmentStatePagerAdapter 中保存状态和恢复状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16416170/