gpt4 book ai didi

android - 来自 viewpager2 和我的父 fragment 的 SharedViewModel

转载 作者:行者123 更新时间:2023-12-02 13:01:49 26 4
gpt4 key购买 nike

所以,我有一个 fragment ,我们称之为 fragment A,我需要它作为我的 sharedviewmodel 的主要宿主。

所以我有这样的

class FragmentA:Fragment() {

private val model: SharedViewModel by viewModels()

}

现在,在 fragment A 中,我设置了 viewpager2 适配器
private fun setupViewPagerWithTabLayout(
productList: MutableList<Producto>,
drinkList: MutableList<Producto>
) {
val fragmentList = listOf(
FragmentProducts.newInstance(productList),
FragmentProducts.newInstance(drinkList))

viewPager2.adapter = MyViewPageAdapter(requireActivity(),fragmentList)
val tabLayoutMediator = TabLayoutMediator(tabLayout, viewPager2,
TabLayoutMediator.TabConfigurationStrategy { tab, position ->

when (position) {
0 -> {
tab.text = "Option1"
}
1 -> {
tab.text = "Option2"
}
}

})
tabLayoutMediator.attach()
}

在这里,我在 viewpager 的 Fragment A 中实例化了我的 FragmentProduct,但我的适配器需要一个 FragmentActivity
class MyViewPageAdapter(fragmentActivity: FragmentActivity,private val fragmentList: List<FragmentProducts>) :
FragmentStateAdapter(fragmentActivity) {

override fun getItemCount(): Int {
return fragmentList.size
}

override fun createFragment(position: Int): Fragment {
return fragmentList[position]
}
}

所以,从 FragmentA 中包含的 FragmentProducts,我需要与这个 View 模型共享数据,但是当我这样做是为了从这个 fragment 共享数据到 FragmentA
class FragmentProducts:Fragment(){

private val model: SharedViewModel by viewModels ({requireParentFragment()})

}

我收到以下错误

java.lang.IllegalStateException: Fragment FragmentProducts{6953da8} (3a2f5cbb-113d-4ed2-8f85-56e04fcea356) f0} is not a child Fragment, it is directly attached to com.example.MainActivity@dcc2679



所以,这告诉我 FragmentProducts 引用了我的 MainActivity,这就是逻辑,因为适配器的实例在 FragmentActivity 需要 requireActivity()
viewPager2.adapter = MyViewPageAdapter(requireActivity(),fragmentList)

所以,我需要传递我的 FragmentA 而不是 requireActivity() 作为这个 viewpager fragment 的主机,但是在我的 ViewPagerAdapter 上,我不能传递 FragmentStatePagerAdapter 或其他东西来传递我的 FragmentA 作为该 viewpager 的上下文

由于我使用 viewpager2,有没有办法让 FragmentA 托管 FragmentProducts viewpager,所以我可以像这样在我的 FragmentProducts 中获取它
private val model: SharedViewModel by viewModels ({requireParentFragment()})

谢谢

最佳答案

您正在使用 FragmentStateAdapter(fragmentActivity) .不要那样做。将您的父 fragment 传递给 MyViewPageAdapter并通过 FragmentStateAdapter .

class MyViewPageAdapter(
parentFragment: Fragment,
private val fragmentList: List<FragmentProducts>
) : FragmentStateAdapter(parentFragment) {

关于android - 来自 viewpager2 和我的父 fragment 的 SharedViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60698699/

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