首页 > 解决方案 > 片段之间共享视图模型,而不限定活动范围?

问题描述

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

  1. 如何在这些片段之间共享所选国家/地区?我正在考虑使用共享视图模型,但我很犹豫将其范围限定为活动,因为我不希望它在用户完成“编辑配置文件”流程时持续存在。

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

标签: androidandroid-fragmentsandroid-architecture-componentsandroid-viewmodelandroid-architecture-navigation

解决方案


使用共享视图模型确实更容易,但正如您所说,它带来了其他问题,例如将视图模型范围限定为更高的上下文以进行简单的信息交换。

恕我直言,共享视图模型在某些情况下并不是一个坏方法。我正在开发一个有 5 个选项卡的应用程序,第一个选项卡就像第二个和第三个选项卡的摘要。使用共享视图模型是一个不错的选择,因为我只是重用了数据,只是改变了适配器在相应视图中显示的项目数,逻辑被重用了。

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

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

推荐阅读