Android:与 viewpager2 共享视图模型

时间:2021-03-16 23:38:02

标签: android-fragments dagger-2 android-viewmodel android-viewpager2 viewmodelproviders

我正在 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 组件。

0 个答案:

没有答案