快速说明:在提出问题之前,我做了尽职调查:我知道这听起来像是一个骗局。但是现有的问题都没有问我的确切问题,现有问题的解决方案都不适合我。感谢。
TL; DR:恢复具有嵌套片段的片段时,childFragmentManager
会将嵌套片段添加回来,但不会恢复其状态。我该怎么做呢?
我有一个由ViewPager
支持的FragmentStatePagerAdapter
。 FSPA
会返回片段,当setUserVisibleHint
为true
时,每个片段都会添加另一个片段。我基本上避免了加载一个屏幕外片段的成本,这是默认的ViewPager
行为。内部片段是一个项目列表,因此保持滚动位置很重要。
以下是事件的顺序:
N
,因为它可见,内部片段已添加N+2
或N-2
:现在位置N
的片段已被销毁,因为它已超过ViewPager
' s {{ 1}} of 1 offScreenLimit
时,片段管理器会方便地添加内部片段(因为N
我在猜测)这会导致糟糕的用户体验,因为当回到位置savedInstanceState
时,列表会一直滚动到顶部。
有什么方法可以避免这种情况吗?我试过了:
N
手动保存状态
getChildFragmentManager().saveFragmentInstanceState(myInnerFragment)
并用此替换自动添加的片段
mInnerFragment
请注意,我无法在任何片段中使用N
:外部或内部,因为所有这些都嵌套在另一个片段中。许多答案建议使用反射来挂起并恢复setRetainInstanceState(true)
,但这似乎有风险,而且无论如何由于mChildFragmentManager
限制我无法使用它。 / p>
setRetainInstance