如何从 AndroidEntryPoint 的 ViewPager 片段中获取父片段?

How to get parent Fragment from ViewPager Fragment that is an AndroidEntryPoint?

我在 ViewPager 中有一个片段是这样创建的:

companion object {

    fun newInstance(someData: SomeData): ViewPagerFragment {
        val f = ViewPagerFragment()
        val args = Bundle()
        args.putParcelable("someData", someData)
        f.arguments = args
        return f
    }
}

它也是一个 Hilt 入口点,它创建自己的 ViewModel,但还需要父 Fragments ViewModel,所以 class 的顶部如下所示:

@AndroidEntryPoint
class ViewPagerFragment : Fragment() {

    private val parentViewModel: ParentViewModel by viewModels(
        ownerProducer = { requireParentFragment() }
    )
    private val viewPagerViewModel: ViewPagerViewModel by viewModels()

但是,找不到父片段:

java.lang.IllegalStateException: Fragment ViewPagerFragment{b6d6157} 
(e5f3fc7d-2ae4-4275-9763-22826a9be939) id=0x7f09017e} is not a child Fragment, it is 
directly attached to 
dagger.hilt.android.internal.managers.ViewComponentManager$FragmentContextWrapper@1852444

我认为这是因为添加 viewPagerViewModel 后生成的 ViewPagerFragment class 不是 childFragment。是否有解决方法来获取父 Fragment 并最终获取父 ViewModel?后者是主要目标。

现在我使用 ViewPager,而不是 ViewPager2,因为它是一个遗留的无限包装器 ViewPager。

编辑:

ViewPagerAdapter 是这样创建的:

val pagerAdapter = VpPagerAdapter(
                requireActivity().supportFragmentManager,
                someData,
        )

当您创建 ViewPager 适配器时,如果您希望 ViewPager 中的片段被视为子片段,则需要传入 childFragmentManager