首页 > 解决方案 > 重用片段、主活动和导航菜单之间的共享 ViewModel 实例以显示不同的信息

问题描述

我正在按照 Single Activity Main Fragments 方法开发我的应用程序。我有两个片段,ShowProfileFragment并且EditProfileFragment,它们都共享一个ProfileViewModel来显示用户信息并对其进行编辑。EditProfileFragment只能通过 访问ShowProfileFragmentShowProfileFragment可从导航菜单访问。

我还有一个导航菜单,它显示用户的姓名和电子邮件,它通过观察ProfileViewModel. 假设用户已经通过身份验证,ProfileViewModel正在创建 ,MainActivity以便我可以在应用程序启动时从导航菜单中正确查看用户信息。

到目前为止,我的应用程序具有以下结构:

MainActivity (A)      uses ProfileViewModel

ShowProfileFragment   uses ProfileViewModel
  |-> EditProfileFragment   uses ProfileViewModel

NavigationDrawer      uses ProfileViewModel

假设我在UserListFragment. 现在应用程序结构将是这样的:

MainActivity (A)           uses ProfileViewModel

ShowProfileFragment        uses ProfileViewModel
  |-> EditProfileFragment  uses ProfileViewModel
UserListFragment           

NavigationDrawer           uses ProfileViewModel

问题是,我需要重用ShowProfileFragment来显示当前选定的用户详细信息。到目前为止,我实例化了一个ProfileViewModel具有相同生命周期的实例,MainActivity以便我可以从导航菜单中正确显示经过身份验证的用户信息。

我的想法是将ProfileViewModelonly 用于ShowProfileFragment(and EditProfileFragment) ,UserListFragment这样当我ShowProfileFragment从导航菜单访问时,我将作为参数传递一个布尔值,表示导航从导航菜单开始,显示完整的用户详细信息并启用导航EditProfileFragment. _ 当ShowProfileFragment从用户列表访问时,ShowProfileFragment将显示较少的信息并禁用EditProfileFragment导航路径。导航菜单中的用户详细信息将使用不同的代码进行管理,而不涉及ProfileViewModel.

我真的不知道这是否是一个好的解决方案,因为我对 Android 开发比较陌生。有什么我想念的吗?有更好的解决方案吗?

标签: androidmvvmnavigationfragmentandroid-viewmodel

解决方案


推荐阅读