我正在使用ViewPager
with FragmentStatePageAdapter
我的屏幕上有 5 个页面,其中有大量图像和视图。目前我有mViewPager.setOffscreenPageLimit(1);
所以只有当前、上一个和下一个会在内存中,其他 2 个将被销毁。但对于那些被破坏的碎片我想利用saveState()
and restoreState()
适配器保持其状态,因此当我返回该屏幕时,它无论如何都会转到onCreateView()
该片段的内容也将保持状态。
Having mViewPager.setOffscreenPageLimit(4);
不是一个好的选择,因为它有内存问题。
我搜索了很多,但没有得到任何使用这两个函数来维护和恢复状态的示例。
有人可以帮我继续吗?
无需覆盖saveState()
and restoreState()
的方法FragmentStatePagerAdapter
.
主要是因为它是核心FragmentStatePagerAdapter
已经为您完成的实施。这FragmentManager
您传递给构造函数的参数负责恢复先前实例化的片段。实际上,instantiateItem()
的回调FragmentStatePagerAdapter
确保它返回片段及其保存的状态。
话虽如此,只需覆盖onSaveInstanceState()
方法你的片段并将你想要恢复的所有内容放入Bundle outState
.
您放置在捆绑包中的数据将在提供给的捆绑包中可用onCreate(Bundle)
, onCreateView(LayoutInflater, ViewGroup, Bundle)
, and onActivityCreated(Bundle)
方法。
现在你可以争论了:
“但我已经尝试过以这种方式保存碎片的状态。
这对我不起作用!”
如果您发现自己处于这种情况,请检查如何初始化片段的状态变量。您可能从 Bundle 中获得了所需的内容,但随后从您获得的值中覆盖了它getArguments()
片段的方法。 (这正是我的挣扎,如果您使用工厂方法来实例化片段,可能也是您的情况)。
另外,把你的FragmentStatePagerAdapter
in the onCreate
活动的方法(而不是进入onStart
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)