每个视图都应该有一个 ViewModel 吗?

Should every view have a ViewModel?

几个月前我一直在 Android 进行开发,目前我正在学习和实现 MVVM 架构,但是 Internet 上的相关信息让我有点困惑。

Google 建议每个视图只有一个 viewModel,其他资源说这不一定适用于所有视图....

在我当前的项目中,我有一个视图,我不知道是否需要,main activity 有一个带有可点击项目的 RecyclerView(这个 activity 有他的 viewModel)以及什么时候用户单击一个项目,它会将他带到使用 Bundle 填充的详细信息页面(我认为直到此时不需要视图模型,或者它是?),但作为更新,我想在 main [=21= 中实现一个 BarcodeScanner 按钮],结果它将对 API 进行 GET 并填充相同的视图(带有调用结果的详细信息)。

在这种情况下,我的详细信息视图是否需要 viewModel?

如有任何信息,我们将不胜感激。

这是一种设计选择。任何视图都不需要视图模型来运行。但是,Google 推荐该模式,因为它会带来良好的设计。

如果你想说你的应用程序是 MVVM,那么你需要将视图与驱动它的数据分开。这通常需要转换层来查询模型数据并将其转换为视图可以使用的数据。

这篇文章我没有读透,但它有一张图说明了模型、视图模型和视图之间的关系:

https://www.journaldev.com/20292/android-mvvm-design-pattern

在您的条形码扫描器按钮示例中,API 服务器可被视为模型。您的视图模型应该与 API(进行 GET 调用)交互,以便它可以 post 更新视图(通常使用 LiveData)。通过观察 API 结果,视图保持最新。

我建议在它自己的 class 或服务中隔离与 API 的接口。然后在单击条形码扫描器按钮时视图调用视图模型,视图模型调用 API class.

关于您的包填充详细信息页面问题:如果不查看您的代码很难知道,但大概您的主要 activity 是从数据库中的数据填充的(无论是本地的,还是通过 API).您的回收商视图包含一个项目列表,选择一个项目后,它的详细信息将显示在新视图中。如果我正在实现它,我将只将项目的 ID 传递给详细视图,并使用相同的 ID 初始化视图模型。然后视图模型将查找与项目关联的所有数据并显示它。

据推测,详细信息视图中显示的数据比 RecyclerView 中显示的数据更多。主要 activity 不需要访问项目详细信息或将它们保存在 ViewAdapter 中(也不应该)。

但是,这些都是设计选择。没有任何内容表明您的应用程序必须以特定方式编写或遵循特定模式。它可以正常工作。我的建议是,即使您认为不需要,也要遵循该模式,直到您了解为什么需要!