Android 扩展FragmentStateAdapter时,每个构造函数之间的区别是什么?

Android 扩展FragmentStateAdapter时,每个构造函数之间的区别是什么?,android,android-fragments,view,android-viewpager,android-viewpager2,Android,Android Fragments,View,Android Viewpager,Android Viewpager2,我正在学习片段,在我制作的应用程序中,我有一个底部导航栏,第一个有一个带有ViewPager2的片段。对于viewpager2,我创建了一个扩展FragmentStateAdapter的自定义适配器,首先我使用了接收FragmentActivity的构造函数,然后使用了接收FragmentManager和生命周期的构造函数。我使用它们的方式是这样的: CustomAdapter adapter = new CustomAdapter(getActivity()); CustomAdapter a

我正在学习片段,在我制作的应用程序中,我有一个底部导航栏,第一个有一个带有ViewPager2的片段。对于viewpager2,我创建了一个扩展FragmentStateAdapter的自定义适配器,首先我使用了接收FragmentActivity的构造函数,然后使用了接收FragmentManager和生命周期的构造函数。我使用它们的方式是这样的:

CustomAdapter adapter = new CustomAdapter(getActivity());
CustomAdapter adapter = new CustomAdapter(getChildFragmentManager(), getLifeCycle());
这两种方法似乎都很好,但我想知道使用其中一种方法有什么区别,为什么在第二个适配器上使用getChildFragmentManager()而不是getFragmentManager()


旁注:为了清楚起见,我一次只使用了一个构造函数。

实际上有三个构造函数用于
FragmentStateAdapter

  • -这使用活动的
    getSupportFragmentManager()
    和活动的
    getLifecycle()
    。如果您的
    ViewPager2
    直接托管在活动中,则会使用此选项
  • -这使用片段的
    getChildFragmentManager()
    和片段的
    getLifecycle()
    。如果您的
    ViewPager2
    托管在另一个片段中,您将使用此选项
  • -这是其他两个构造函数内部调用的。除非您将片段添加到一个根本没有
    FragmentActivity
    的服务中,否则您永远不会使用它

必须始终使用带有
片段的片段
(或者使用
getChildFragmentManager()
+
getLifecycle()
,如果要为相同效果编写更多代码)在片段内托管
ViewPager2
时-这确保了片段的
FragmentStateAdapter
创建正确,并在配置更改或进程死亡或重新创建后恢复其状态-只有当它们是具有您的
ViewPager2
其中。

实际上有三个构造函数用于
FragmentStateAdapter

  • -这使用活动的
    getSupportFragmentManager()
    和活动的
    getLifecycle()
    。如果您的
    ViewPager2
    直接托管在活动中,则会使用此选项
  • -这使用片段的
    getChildFragmentManager()
    和片段的
    getLifecycle()
    。如果您的
    ViewPager2
    托管在另一个片段中,您将使用此选项
  • -这是其他两个构造函数内部调用的。除非您将片段添加到一个根本没有
    FragmentActivity
    的服务中,否则您永远不会使用它

必须始终使用带有
片段的片段
(或者使用
getChildFragmentManager()
+
getLifecycle()
,如果要为相同效果编写更多代码)在片段内托管
ViewPager2
时-这确保了片段的
FragmentStateAdapter
创建正确,并在配置更改或进程死亡或重新创建后恢复其状态-只有当它们是具有您的
ViewPager2
在它里面。

所以在这种情况下,我应该使用一个片段,正确吗?正确。如果你在一个片段中,你应该使用接受一个
片段的构造函数。所以在这种情况下,我应该使用一个接受一个片段正确的构造函数?这是正确的。如果您在片段中,则应该使用接受
片段的构造函数。