FragmentStateAdapter
实际上有三个构造函数:
FragmentStateAdapter(FragmentActivity)
-使用活动的getSupportFragmentManager()
和活动的getLifecycle()
。如果您的ViewPager2
是直接托管在活动中的,那么您将使用这个方法FragmentStateAdapter(Fragment)
-使用片段的getChildFragmentManager()
和片段的getLifecycle()
。如果您的ViewPager2
托管在另一个片段中,那么您将使用这个方法FragmentStateAdapter(FragmentManager, Lifecycle)
-这是其他两个构造函数在内部调用的。你永远不会使用这个,除非你在一个没有FragmentActivity
的服务中添加片段。在片段中托管ViewPager2
时,必须始终使用Fragment
(或者使用getChildFragmentManager()
+getLifecycle()
,如果您想为相同的效果编写更多的代码)这样可以确保FragmentStateAdapter
创建的片段在配置更改或进程死亡或重新创建后正确地恢复其状态—这只是当它们是包含您的ViewPager2
的片段的子片段时,就有可能。