Android 避免胖视图模型策略
假设我有一个活动管理一个由7个片段组成的长过程。每个片段都有自己的视图逻辑,当用户在活动所代表的流程中移动时,会传递到下一个片段 我可以创建一个共享视图模型,它将保存所有片段中需要显示的所有数据,但我希望避免使用它 因此,我想为每个片段创建一个不同的视图模型,并为活动创建一个视图模型,以管理流 我的问题是,这是正确的方法吗?因为在android架构蓝图中,没有合适的例子来说明这种情况Android 避免胖视图模型策略,android,android-fragments,Android,Android Fragments,假设我有一个活动管理一个由7个片段组成的长过程。每个片段都有自己的视图逻辑,当用户在活动所代表的流程中移动时,会传递到下一个片段 我可以创建一个共享视图模型,它将保存所有片段中需要显示的所有数据,但我希望避免使用它 因此,我想为每个片段创建一个不同的视图模型,并为活动创建一个视图模型,以管理流 我的问题是,这是正确的方法吗?因为在android架构蓝图中,没有合适的例子来说明这种情况 好吧,片段视图模型应该如何与活动视图模型通信?在他们之间共享数据(使用实时数据)的服务层是否足够好?考虑到单一责
好吧,片段视图模型应该如何与活动视图模型通信?在他们之间共享数据(使用实时数据)的服务层是否足够好?考虑到单一责任,仅在需要时使用共享视图模型,目标是为一个视图提供一个视图模型 如果一个片段的ViewModel越来越胖,那么是时候绕道将职责粒化为更小的ViewModel了。例如片段的特定UI部分(列表、卡片)的ViewModel,它将免除片段的初始fat ViewModel、一些属性和逻辑 我的问题是,这是正确的方法吗 我可以这么说,是的。我认为应该在视图模型中模拟视图结构。因此,每个子片段将有一个ActivityViewModel和一个FragmentViewModel。然后,ActivityViewModel拥有每个片段视图模型,以便在片段之间进行必要的协调 好吧,片段视图模型应该如何与活动视图模型通信?在它们之间共享数据(使用实时数据)的服务层是否足够好 对。观察每个视图模型的相关状态,然后向应该更新的视图模型发送消息 简单的例子:
class ActivityViewModel() {
private val fragViewModel1: FragmentViewModel1
private val fragViewModel2: FragmentViewModel2
init {
fragViewModel1.someLiveData.observe {
fragViewModel2.updateViewStateBasedOnFragment1(it)
}
}
}
显然,如何初始化和设置所有这些视图模型是另一个问题,但希望这能帮助您开始
希望有帮助 我认为活动应该只处理片段,然后片段应该处理它们自己的视图models@SarthakMittal是的,这可能是一个好主意,直接前进过程。。如果下一个片段的决定取决于当前片段的viewmodel的状态,该怎么办?@HBB20对延迟的回复表示歉意,您可以使用nav-graph来实现这一点,单活动架构或拥有子图都可以做到这一点