Android,不同片段的同一视图模型类的不同实例

问题描述 投票:0回答:1

我目前正在学习 Android ViewModel,但我不完全确定使用它们的正确方法。

据我所知,ViewModel 旨在将逻辑与视图隔离。因此,我将逻辑分离到 ViewModel 中,并将其连接到使用 LiveData 实时更新的视图。 在我的项目中,我使用 ViewModel 来管理 PIN,这涉及验证它并将其发送到父组件。为此,我实现了两种视图:一种用于手动输入 PIN,另一种用于使用 QR 码扫描 PIN。

我的目标是在父视图的选项卡布局中显示两种输入法。

这是我想要实现的简化代码。我目前不确定将 ViewModel 绑定到视图的正确方法,并且在网上找不到合适的参考。我有一个特别的问题是我是否应该创建 ViewModel 的两个单独的实例。我担心的是,我不希望 view1 中采取的操作影响 view2,反之亦然。

class ParentFragment: Fragment(){
    private lateinit var child1ViewModel: AbstractViewModel
    private lateinit var child2ViewModel: AbstractViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // Initialisez les ViewModels avec les données initiales si nécessaire.
        child1ViewModel = ViewModelProvider(this).get(AbstractViewModel::class.java)
        child2ViewModel = ViewModelProvider(this).get(AbstractViewModel::class.java)

        val child1Fragment = Child1Fragment.newInstance(child1ViewModel)
        val child2Fragment = Child2Fragment.newInstance(child2ViewModel)

        childFragmentManager.beginTransaction()
            .replace(
                R.id.fragment_container_1,
                child1Fragment,
                Child1Fragment::class.java.simpleName
            )
            .replace(
                R.id.fragment_container_2,
                child2Fragment,
                Child2Fragment::class.java.simpleName
            )
            .commit()
    }
}

任何见解或指导将不胜感激。 提前谢谢你:)

编辑:我刚刚发现这篇文章:与多个片段共享一个视图模型

建议1个视图保留1个视图模型。还建议:

如果您有通用代码,则可以拥有多个从包含共享代码的 baseViewModel 继承的 viewModel。

你的意见是什么?

android kotlin android-viewmodel
1个回答
0
投票

如果需要,您可以在不同视图之间共享相同的 ViewModel。

我强烈鼓励您在项目中实现 Hilt 来处理 ViewModel 实例。

您只需使用

Application
注释您的
@HiltAndroidApp
类,然后使用
@AndroidEntryPoint
注释您的视图,并使用
@HiltViewModel
注释您的 ViewModel,如文档中所示。

然后你可以使用以下方法获取 ViewModel 实例:

private val viewModel: YourViewModel by viewModels()
© www.soinside.com 2019 - 2024. All rights reserved.