gpt4 book ai didi

android - 扩展FragmentStateAdapter时各个构造函数有什么区别?

转载 作者:行者123 更新时间:2023-12-05 09:33:54 24 4
gpt4 key购买 nike

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

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

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

旁注:需要说明的是,我一次只使用了一个构造函数。

最佳答案

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

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

必须始终使用接受 fragment 的那个(或使用getChildFragmentManager()+getLifecycle() 如果您想为相同的效果编写更多代码)在 Fragment 中托管 ViewPager2 - 这可确保您的 FragmentStateAdapter 创建的 Fragment 在配置更改或进程死亡或重新创建 - 只有当它们是包含您的 ViewPager2 的 fragment 的子 fragment 时才有可能。

关于android - 扩展FragmentStateAdapter时各个构造函数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66946122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com