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

时间:2018-01-30 22:23:23

标签: android mvvm android-architecture-components

将数据从一个活动(主)传递到另一个活动(详细信息)的当前最佳做法是什么。

  1. 一种可能的方法是在主服务器和详细信息之间共享一个视图模型类。单击主活动中的项目时,所选条目将设置为视图模型。因此,详细活动可以读取所选条目,因为它使用相同的视图模型。

  2. 将master-activity中所选对象的row-id作为bundle-extra传递给detail活动。详细活动使用ViewModelProviders加载它的视图模型,然后将row-id传递给加载实际记录的视图模型。

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

  4. 非常感谢输入!

3 个答案:

答案 0 :(得分:2)

您的详细活动应该能够从已保存的状态重建自己。例如,通过前景中的细节和屏幕关闭,您的整个应用程序可以从内存中清除。当屏幕重新开启时,Android将仅启动您的详细活动,并期望它从保存状态获得所需内容。

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

恕我直言,将行ID设置为传递给详细活动的附加内容。使用详细信息保存状态保存/恢复该行ID。让详细活动根据行ID构建自己的模型。它使细节独立,因为它不依赖于在启动之前初始化某些复杂模型的其他东西。这使它更加模块化和可测试。

答案 1 :(得分:1)

我有同样的问题,Lyla Fujiwara的文章ViewModels: Persistence, onSaveInstanceState(), Restoring UI State and Loaders完全回答了这个问题。本文讨论了保存数据的不同方法,以及最适合特定场合的方法。

  

ViewModels是否会保留我的数据? TL; DR No.保持正常!

     

ViewModels是onSaveInstanceState的替代品吗? TL; DR否,但它们是相关的,所以继续阅读。

     

如何使用ViewModels有效地保存和恢复UI状态? TL; DR您可以使用ViewModels,onSaveInstanceState()和本地持久性的组合。

     

ViewModels是Loaders的替代品吗? TL; DR。是的,ViewModels与其他几个类一起使用可以替换Loaders。

这些问题简明扼要地回答了你所问的问题。如果您阅读实际文章,她会为每个文章做出解释。

答案 2 :(得分:0)

我有2种方法可以解决此问题 您可以使用

1。用于在两个活动之间共享数据的静态对象

  1. 以及共享的偏好或房间...境界

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