android - 片段之间共享视图模型,而不限定活动范围?
问题描述
使用新的导航架构组件,我将单个活动作为导航主机,并为我的屏幕提供多个片段。现在我有一个 EditProfileFragment,用户可以在其中单击一个按钮并打开另一个片段,其中包含一个可供选择的国家/地区列表。假设我想将该国家/地区选择的结果分享回 EditProfileFragment。一般的想法是,我将为所有“编辑配置文件”操作提供一个 EditProfileViewModel。
如何在这些片段之间共享所选国家/地区?我正在考虑使用共享视图模型,但我很犹豫将其范围限定为活动,因为我不希望它在用户完成“编辑配置文件”流程时持续存在。
还有其他我应该考虑的干净/推荐的方法吗?也许是一个暂时持有该值的单身人士?
解决方案
使用共享视图模型确实更容易,但正如您所说,它带来了其他问题,例如将视图模型范围限定为更高的上下文以进行简单的信息交换。
恕我直言,共享视图模型在某些情况下并不是一个坏方法。我正在开发一个有 5 个选项卡的应用程序,第一个选项卡就像第二个和第三个选项卡的摘要。使用共享视图模型是一个不错的选择,因为我只是重用了数据,只是改变了适配器在相应视图中显示的项目数,逻辑被重用了。
听起来您的个人资料和个人资料编辑页面中有共同的逻辑/项目。我不知道有多少,但是如果您觉得在这两者之间共享视图模型还不够,请记住,仅仅因为您正在使用视图模型并不意味着您必须使用它们来共享/存储/传递一些数据。例如 :
- 使用获取的数据导航到上一个片段。
- 您可以将“配置文件”保存到持久性并更改存储的内容。当您的配置文件视图模型(重新)创建时,它会从持久性中获取最新值。
- 您可以直接在服务器中更新您的个人资料,并在个人资料上再次获取它。
- 你可以把上面这两个混合起来。
推荐阅读
- javascript - Reactive form Email Validation Issue with gmail (+) addresses in Angular 7
- php - Class Bundle not found in symfony
- xml - 添加 forloop 时,Odoo 12 qweb 报告变为空白
- html - Postman 中辣椒使用 unicode 时出现非法字符错误
- java - 白标错误页面/出现意外错误(类型=内部服务器错误,状态=500)
- wpf - 无法更改 ItemsControl WPF 中的 z 索引
- javascript - 将变量插入导入的字符串
- javascript - 是否可以在网页中截取 iframe 的屏幕截图?
- php - 无法使用级联 xpath 查询访问指定节点
- cart - Hybris,如何使用 cartId 加载购物车