当前将数据从一个活动(主)传递到另一个(详细)的最佳实践是什么。
一种可能的方法是拥有一个在主视图和细节视图之间共享的视图模型类。单击主活动中的某个项目时,所选条目将设置为视图模型。详细活动因此可以读取所选条目,因为它使用相同的视图模型。
将所选对象的 row-id 从 master-activity 作为附加包传递到详细活动。详细信息活动使用
ViewModelProviders
加载其视图模型,然后将 row-id 传递到加载实际记录的视图模型。 在启动详细信息活动之前初始化视图模型,并将所选对象直接设置为详细信息活动的初始化视图模型。
非常感谢您的意见!
您的详细活动应该能够从保存的状态重建自身。例如,当您的详细信息位于前台且屏幕关闭时,您的整个应用程序可能会从内存中删除。当屏幕重新打开时,Android 将仅启动您的详细活动并期望它从保存的状态中获取所需的内容。
因此,任何依赖于主设置数据到单例/全局某处的设计都不会很好。我不清楚,但这似乎就是您在 (1) 和 (3) 中所建议的。
恕我直言,将行 ID 设置为传递给详细活动的额外内容。保存/恢复该行 ID 以及详细保存状态。让详细信息活动根据行 ID 构建自己的模型。它使细节独立,因为它不会依赖于在启动之前初始化某些复杂模型的其他东西。这也使其更加模块化和可测试。
我也有同样的问题,Lyla Fujiwara 的文章 ViewModels: Persistence, onSaveInstanceState(), Restoring UI State and Loaders 完美地回答了这个问题。本文讨论了保存数据的不同方法以及最适合特定场合的方法。
ViewModel 会保留我的数据吗? TL;DR 否。照常坚持!
ViewModel 是 onSaveInstanceState 的替代品吗? TL;DR 不,但它们是相关的,所以请继续阅读。
如何使用 ViewModel 有效地保存和恢复 UI 状态? TL;DR 您可以结合使用 ViewModel、onSaveInstanceState() 和本地持久性。
ViewModel 是 Loaders 的替代品吗? TL;博士。是的,ViewModel 与其他一些类结合使用可以取代 Loaders。
这些是对与您所问问题无关的问题的简洁回答。如果您阅读实际的文章,她会对每一篇文章给出解释。
我有两种方法来解决这个问题 你可以使用
1.用于在两个 Activity 之间共享数据的静态对象
否则,您的活动必须触发视图模型和存储库