可能的方法是使用单个共享于主活动和详细活动的视图模型类,当在主活动中点击一个项目时,所选条目将被设置为视图模型。因此详细活动可以读取所选条目,因为它正在使用相同的视图模型。
将所选对象的行ID作为bundle-extra从主活动传递到详细活动。详细活动通过使用
ViewModelProviders
加载其视图模型,然后将行ID传递给视图模型,该视图模型加载实际记录。在启动详细活动之前初始化视图模型,并直接将所选对象设置为详细活动的已初始化视图模型。
可能的方法是使用单个共享于主活动和详细活动的视图模型类,当在主活动中点击一个项目时,所选条目将被设置为视图模型。因此详细活动可以读取所选条目,因为它正在使用相同的视图模型。
将所选对象的行ID作为bundle-extra从主活动传递到详细活动。详细活动通过使用 ViewModelProviders
加载其视图模型,然后将行ID传递给视图模型,该视图模型加载实际记录。
在启动详细活动之前初始化视图模型,并直接将所选对象设置为详细活动的已初始化视图模型。
ViewModels会保存我的数据吗?简而言之,不会。请像往常一样进行持久化!
ViewModels是否可以替代onSaveInstanceState?简而言之,不能,但它们是相关的,请继续阅读。
我如何使用ViewModels有效地保存和还原UI状态?简而言之,您需要使用ViewModels、onSaveInstanceState()和本地持久化的组合。
ViewModels是否可以替代Loaders?简而言之,是的,ViewModels与其他几个类结合使用可以替代Loaders。
这些都是与您所问的问题有关的简明答案。如果您阅读实际文章,她会为每个问题提供解释。您的详细活动应该能够从保存的状态中重建自身。例如,当您的详细信息在前台而屏幕关闭时,您的整个应用程序可能会从内存中清除。当屏幕重新开启时,Android仅会启动您的详细活动,并期望它从已保存的状态中获取所需内容。
因此,任何依赖于主设置数据进入单例/全局位置的设计都不是很好。对我来说还不太清楚,但似乎这就是您在(1)和(3)中所建议的。
在传递到详细活动的额外内容中设置行ID。使用详细保存状态保存/恢复该行ID。让详细活动基于行ID构建自己的模型。这使得详细信息独立,因为它不会依赖于其他初始化某些复杂模型才能启动的东西。这也使其更具模块化和可测试性。
我有两种方法来解决这个问题:
1.使用静态对象在两个活动之间共享数据
否则,您的活动必须触发ViewModel和Repository。