Her*_*t74 0 android android-fragments android-viewpager android-viewmodel dagger-hilt
我在 ViewPager 中有一个片段,其创建如下:
companion object {
fun newInstance(someData: SomeData): ViewPagerFragment {
val f = ViewPagerFragment()
val args = Bundle()
args.putParcelable("someData", someData)
f.arguments = args
return f
}
}
Run Code Online (Sandbox Code Playgroud)
它也是一个 Hilt 入口点,它创建自己的 ViewModel,但也需要父 Fragments ViewModel,因此该类的顶部如下所示:
@AndroidEntryPoint
class ViewPagerFragment : Fragment() {
private val parentViewModel: ParentViewModel by viewModels(
ownerProducer = { requireParentFragment() }
)
private val viewPagerViewModel: ViewPagerViewModel by viewModels()
Run Code Online (Sandbox Code Playgroud)
但是,找不到父 Fragment:
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
Run Code Online (Sandbox Code Playgroud)
我认为发生这种情况是因为添加 viewPagerViewModel 后生成的 ViewPagerFragment 类不是 childFragment。是否有解决方法来获取父 Fragment 并最终获取父 ViewModel?后者是主要目标。
现在我使用 ViewPager,而不是 ViewPager2,因为它是遗留的无限包装器 ViewPager。
编辑:
ViewPagerAdapter 是这样创建的:
val pagerAdapter = VpPagerAdapter(
requireActivity().supportFragmentManager,
someData,
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1549 次 |
| 最近记录: |