最佳实践 MVVM 将数据从一个 Activity 传递到另一个

Best practice MVVM pass Data from one Activity to another

将数据从一个activity(主)传递到另一个(详细)的当前最佳实践是什么。

  1. 一种可能的方法是拥有一个在主视图和细节视图之间共享的视图模型class。当点击 master activity 中的一个项目时,所选条目将被设置为视图模型。详细信息activity,因此可以读取所选条目,因为它使用相同的视图模型。

  2. 将所选对象的行 ID 作为附加包从主 activity 传递到详细信息 activity。细节 activity 使用 ViewModelProviders 加载它的视图模型,然后将 row-id 传递给加载实际记录的视图模型。

  3. 在启动细节activity之前初始化视图模型,并将所选对象直接设置为细节activity的初始化视图模型。

非常感谢您的意见!

您的详细信息 activity 应该能够从保存的状态重建自身。例如,当您的细节在前台并关闭屏幕时,您的整个应用程序可能会从内存中删除。当屏幕重新打开时,Android 只会启动您的详细信息 activity 并期望它从保存的状态中获得所需的内容。

因此,任何依赖主设置数据到单例/全局某处的设计都不会很好。我不清楚,但似乎这就是你在 (1) 和 (3) 中提出的建议。

恕我直言,将行 ID 设置到传递给详细信息 activity 的附加项中。使用详细保存状态保存/恢复该行 ID。让细节 activity 基于行 ID 构建自己的模型。它使细节独立,因为它不会依赖于其他东西在它开始之前初始化一些复杂的模型。这也使它更加模块化和可测试。

我也有同样的疑问,Lyla Fujiwara的文章ViewModels: Persistence, onSaveInstanceState(), Restoring UI State and Loaders完美解答了这个问题。本文讨论了持久化数据的不同方式以及最适合给定场合的方式。

Do ViewModels persist my data? TL;DR No. Persist as normal!

Are ViewModels a replacement for onSaveInstanceState? TL;DR No, but they are related so keep reading.

How do I use ViewModels to save and restore UI state efficiently? TL;DR You use a combination of ViewModels, onSaveInstanceState() and local persistence.

Are ViewModels a replacement for Loaders? TL;DR. Yes, ViewModels used in conjunction with a few other classes can replace Loaders.

这些是对与您的问题无关的问题的简洁回答。如果您阅读了实际的文章,她会为每篇文章提供解释。

我有两种方法可以解决这个问题 你可以使用

1.a 用于在两个 activity 之间共享数据的静态对象

  1. 和共享偏好或房间...领域

否则,您的 activity 必须触发视图模型和存储库