片段之间共享视图模型,但不限制活动范围?

时间:2018-11-19 22:45:53

标签: android android-fragments android-architecture-components android-viewmodel android-architecture-navigation

使用新的导航体系结构组件,我作为导航主机有一个活动,其中包含多个屏幕片段。现在,我有了一个EditProfileFragment,用户可以在其中单击一个按钮,然后打开另一个片段,其中包含可供选择的国家/地区列表。假设我想将所选国家/地区的结果分享回EditProfileFragment。一般的想法是,我将为所有“编辑配置文件”操作使用一个EditProfileViewModel。

  1. 如何在这些片段之间共享所选国家/地区?我正在考虑使用共享的视图模型,但我不愿意将其范围限定在活动中,因为我不希望在用户完成“编辑个人资料”流程时将其保留。

  2. 还有其他我应该考虑的干净/推荐方法吗?也许是一个暂时持有该价值的单身人士?

2 个答案:

答案 0 :(得分:2)

使用共享视图模型确实更容易,但是正如您所说的,它还伴随着其他一些问题,例如将视图模型限定在更高的上下文中以进行简单的信息交换。

IMHO共享视图模型在某些情况下不是一个坏方法。我当时正在开发一个有5个标签的应用,第一个标签就像是第二个和第三个标签的摘要。使用共享视图模型是一个很好的选择,因为我只是重用数据,只是更改适配器在相应视图中显示的项目数,所以逻辑被重用了。

听起来您在个人资料和个人资料编辑页面中具有共同的逻辑/项目。我不知道有多少,但是如果您觉得在这两个视图模型之间共享视图模型还不够,请记住仅仅因为您使用的是视图模型并不意味着您必须使用它们来共享/存储/传递一些模型数据。例如:

  • 使用获取的数据导航到先前的片段。
  • 您可以将“配置文件”保存为持久性并更改存储的内容。创建(重新)配置文件的视图模型时,它将从持久性中获取最新的价值。
  • 您可以直接在服务器中更新个人资料,然后在个人资料上再次获取。
  • 您可以在上面混合使用这两者。

答案 1 :(得分:0)

回答有关如何解决此问题的问题,以供将来参考:

因为我想保持ViewModel-View(controller)/ Fragment之间的1对1关系,所以我选择了UserRepository来容纳类似这种情况的“临时状态”对象。