所以我有 3 個片段fragmentA,fragmentB和fragmentC
在 fragmentA 中,我創建了一個帶有 2 個選項卡(fragmentB和fragmentC)的 viewpager
片段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 個片段之間共享相同的視圖模型
謝謝
uj5u.com熱心網友回復:
所以在 fragmentA 中它應該是
private val viewModel: MyViewModel by viewModels {
createVMFactory {
MyViewModel(
MyRepo()
)
}
}
在其他片段中(標簽片段)
private val viewModel: MyViewModel by viewModels(ownerProducer = { requireParentFragment() }) {
createVMFactory {
MyViewModel(
MyRepo()
)
}
}
因為我們使用 ownerProducer 作為這個(父片段)創建了第一個視圖模型,它的孩子們將獲取父片段并獲取存盤在這個所有者上的視圖模型實體
uj5u.com熱心網友回復:
您可以使用 activityViewModel 在一個活動中的片段之間共享資料。也許這個代碼實驗室會幫助你
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/345957.html
標籤:安卓 科特林 android-fragments android-架构-组件 android-viewmodel
