Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 避免胖视图模型策略_Android_Android Fragments - Fatal编程技术网

Android 避免胖视图模型策略

Android 避免胖视图模型策略,android,android-fragments,Android,Android Fragments,假设我有一个活动管理一个由7个片段组成的长过程。每个片段都有自己的视图逻辑,当用户在活动所代表的流程中移动时,会传递到下一个片段 我可以创建一个共享视图模型,它将保存所有片段中需要显示的所有数据,但我希望避免使用它 因此,我想为每个片段创建一个不同的视图模型,并为活动创建一个视图模型,以管理流 我的问题是,这是正确的方法吗?因为在android架构蓝图中,没有合适的例子来说明这种情况 好吧,片段视图模型应该如何与活动视图模型通信?在他们之间共享数据(使用实时数据)的服务层是否足够好?考虑到单一责

假设我有一个活动管理一个由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来实现这一点,单活动架构或拥有子图都可以做到这一点