背景

我有下一个场景:

  • 有一个带有物品的导航抽屉 . 每个都切换到不同的片段 .

  • 其中一个片段包含一个viewPager,它包含片段 .

  • 每个viewPager的片段都有一个ListView .

  • 当用户在viewPager的页面之间切换,或转到另一个导航抽屉片段,然后返回到viewPager的一个片段时,ListView应该恢复到其原始状态 .

我使用的只是通过支持库 .

问题

看来这种情况对支持库不起作用,我得到了各种例外,例如:

NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference viewpager

我发现了什么

我发现这个问题已知(链接here) .

我所做的(它的工作原理)是这样的:

  • 具有viewPager的片段包含所有片段实例 .

  • viewpager中的每个片段都保存其膨胀视图,并在调用onCreateView时返回它 .

  • viewpager中的每个片段都像普通片段一样保存并恢复其保存状态 .

  • 我用于viewPager的适配器从"FragmentStatePagerAdapter"扩展,它有一个函数"restoreState",它覆盖它不会调用"super.restoreState()" .

  • 在片段之间切换的活动包含对viewPager的片段的引用 .

这非常浪费(存储对片段和视图的引用),但它可以工作 .

这个问题

还有比这更好的解决方案吗?