【发布时间】:2021-12-17 08:39:44
【问题描述】:
所以我有 3 个片段,fragmentA、fragmentB 和 fragmentC
在 FragmentA 中,我创建了一个带有 2 个选项卡(fragmentB 和 fragmentC)的浏览器
片段A
private fun setupTabLayoutWithViewPager() {
binding.viewPager.disableUserSwipeLeftRight()
binding.viewPager.adapter = MyCustomStateAdapter(this, this)
val tabLayout = binding.tabLayout
TabLayoutMediator(tabLayout, binding.viewPager) { tab, position ->
tab.text = when (position) {
0 -> ResourceUtils.getString(R.string.firstTab)
1 -> ResourceUtils.getString(R.string.secondTab)
else -> emptyString()
}
}.attach()
tabLayout.allowEachTabWithEqualWidth()
}
现在,从fragmentB 和fragmentC 用这个MyCustomStateAdapter 创建我想在它们之间共享视图模型,所以在我的fragmentA 中,因为它是这两个片段的父级,所以我为视图模型
片段A
private val viewModel: MyViewModel by viewModels(ownerProducer = { requireParentFragment() }) {
createVMFactory {
MyViewModel(
MyRepo()
)
}
}
现在,我是否需要在 fragmentB 和 fragmentC 中粘贴相同的代码才能访问由 fragmentA 创建的视图模型实例?因为我想在这 3 个片段之间共享相同的视图模型
谢谢
【问题讨论】:
-
@Tenfour04 如果要将 ViewModel 范围限定为父片段,则无需使用
activityViewModels。你给出了不好的建议。 -
@EpicPandaForce 谢谢,我看错了问题。
标签: android kotlin android-fragments android-architecture-components android-viewmodel