我正在 dev-dagger 分支上复制 android 的架构示例。我正在使用 viewpager2 和匕首。 此外,我希望他们的孩子可以访问存储在容器片段中的视图模型。但似乎孩子们有自己的视图模型实例。 这是父片段:
class EditProductFragment : Fragment() {
private lateinit var binding: EditProductFragmentBinding
private lateinit var adapter: TabsAdapter
@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
private val viewModel: EditProductViewModel by viewModels(
ownerProducer = { this },
factoryProducer = { viewModelFactory }
)
...
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
adapter = TabsAdapter(this)
...
这是一个孩子:
class EditProductMainFragment : Fragment() {
lateinit var binding: EditProductMainFragmentBinding
@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
private val viewModel: EditProductViewModel by viewModels(
ownerProducer = { requireParentFragment() },
factoryProducer = { viewModelFactory }
)
...
这是页面适配器:
class TabsAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {
override fun getItemCount(): Int = 3
override fun createFragment(position: Int): Fragment {
return when (position) {
0 -> EditProductMainFragment()
1 -> EditProductSuppliersFragment()
2 -> EditProductVariantsFragment()
else -> throw IllegalArgumentException("position don't exists")
}
}
}
我必须指定我使用与架构示例相同的 ViewModelFactory.kt 和 dagger 组件。