gpt4 book ai didi

android - 如何将 FragmentFactory 与 FragmentStatePagerAdapter 一起使用

转载 作者:行者123 更新时间:2023-12-04 11:45:00 26 4
gpt4 key购买 nike

我喜欢 FragmentFactory 的方法,这使得将依赖项传递给构造函数中的 fragment 成为可能。
我想使用自定义 FragmentFactory连同 FragmentStatePagerAdapter .
我在 Activity 中托管 View 寻呼机。我可以创建一个自定义 fragment 工厂并将其分配给使用

supportFragmentManager.fragmentFactory = CustomFragmentFactory()
然后我可以使用 supportFragmentManager初始化我的 FragmentStatePagerAdapter .
到目前为止很好。
我的问题是 View 寻呼机中的 fragment 显示的数据取决于位置。
假设我有一个列表 itemsItemFragment ,显示在显示 items[position] 的 View 寻呼机中,因此有一个这样的构造函数:
class ItemFragment(val item: Item) : Fragment()
我必须如何实现 CustomFragmentFactoryFragmentStatePagerAdaptergetItem(position: Int)实现安全等效的功能:
override fun getItem(position: Int) = ItemFragment(items[position])

最佳答案

首先,现在不推荐使用 FragmentStatePagerAdapter。因此,最好将 FragmentStateAdapter 与 ViewPager2 一起使用。
如果您需要使用 ViewPager2 将某些内容传递给 Fragment 的构造函数,我找不到任何合适的解决方案,因为它忽略了 FragmentFactory。我正在考虑在 FragmentStateAdapter 的 createFragment 方法中实现 FragmentFactory,但不知道在这种情况下从哪里获得正确的类加载器。
我找到的唯一解决方案是使用 FragmentManager.FragmentLifecycleCallbacks。在这里,您有一个 fragment ,因此您可以将其转换为您的特定实现。您可以在 fragment (重新)创建后设置回调或任何您想要的 fragment 。所以在这种情况下,您不需要将某些内容传递给 fragment 的构造函数,但也可以避免创建 Bundle。

fragmentManager?.registerFragmentLifecycleCallbacks(object : FragmentManager.FragmentLifecycleCallbacks() {
override fun onFragmentPreCreated(fm: FragmentManager, f: Fragment, savedInstanceState: Bundle?) {
super.onFragmentPreCreated(fm, f, savedInstanceState)
}
}, true)
我使用 childFragmentManager 测试了这段代码,它工作正常。但我不得不承认,这不是一个明确的解决方案。如果您可以避免在使用 FragmentStateAdapter 时将某些内容传递给 Fragment 的构造函数,请避免使用它。因为最合适的解决方案是使用 FragmentFactory。
此外,作为一个选项,您的 fragment 知道父 Activity。因此,您可以直接对父 Activity 进行回调。
文档链接: https://developer.android.com/reference/androidx/fragment/app/FragmentManager#registerFragmentLifecycleCallbacks(androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks,%20boolean)

关于android - 如何将 FragmentFactory 与 FragmentStatePagerAdapter 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62060834/

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