【问题标题】:What is the difference between each constructor when extending FragmentStateAdapter?扩展 FragmentStateAdapter 时每个构造函数有什么区别?
【发布时间】:2021-04-04 21:40:17
【问题描述】:

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

CustomAdapter adapter = new CustomAdapter(getActivity());
CustomAdapter adapter = new CustomAdapter(getChildFragmentManager(), getLifeCycle());

两者似乎都可以正常工作,但我想知道在第二个适配器上使用其中一个有什么区别以及为什么它是 getChildFragmentManager() 而不是 getFragmentManager()。

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

【问题讨论】:

    标签: android android-fragments view android-viewpager android-viewpager2


    【解决方案1】:

    FragmentStateAdapter 实际上有三个构造函数:

    • FragmentStateAdapter(FragmentActivity) - 这使用 Activity 的 getSupportFragmentManager() 和 Activity 的 getLifecycle()。如果您的 ViewPager2 直接托管在 Activity 中,这就是您要使用的内容
    • FragmentStateAdapter(Fragment) - 这使用 Fragment 的 getChildFragmentManager() 和 Fragment 的 getLifecycle()。如果您的 ViewPager2 托管在另一个 Fragment 中,这就是您要使用的内容
    • FragmentStateAdapter(FragmentManager, Lifecycle) - 这是其他两个构造函数在内部调用的内容。除非您向根本没有 FragmentActivity 的服务等添加片段,否则您永远不会使用它。

    必须始终在托管ViewPager2 时使用带有Fragment 的那个(如果您想为相同的效果编写更多代码,请使用getChildFragmentManager()+getLifecycle())在 Fragment 内 - 这可确保您的 FragmentStateAdapter 创建的 Fragment 在配置更改或进程死亡或重新创建后恢复其状态 - 只有当它们是包含您的 ViewPager2 的 Fragment 的子片段时才有可能.

    【讨论】:

    • 所以在这种情况下我应该使用正确的片段吗?
    • 没错。如果您在 Fragment 中,则应使用采用 Fragment 的构造函数。
    猜你喜欢
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    相关资源
    最近更新 更多