LiveData,具有异构回收者视图的视图模型

问题描述 投票:0回答:1

我正在使用具有多种视图类型的回收站视图的android应用程序。它最初是基于MVP的应用程序,我正尝试使用LiveData和ViewModels将其转换为基于MVVM的体系结构。我有一个主屏幕,其中列出了回收者视图中不同类型的视图。每个视图都有自己的ViewModel和相应的Model,从而在主屏幕上显示了回收者视图,作为不同视图模型的集合。

这是我的LiveData的第一个实现,因此面临一些设计问题。我在这里看到一些选项-

  1. 我为我的家庭活动创建一个父级HomeViewModel,该活动包含一个LiveData对象,该对象由一系列不同的子ViewModel(代表不同的视图类型)组成,从而对其生命周期所有者进行了活动。然后,我将一个观察者的每个视图(回收器视图的元素)更新为该LiveData对象。

  2. [我为每个子视图/视图模型创建单独的LiveData对象,并使家庭活动成为每个模型/实时数据的生命周期所有者,并独立于活动与各自的观察者来更新其视图。

  3. 我为每个子视图/视图模型创建单独的LiveData对象,并将各自的视图持有者类作为其生命周期所有者,并在各自的持有者类中更新单个视图。

[请帮助我建议解决此问题的更好方法,或者是否有除指定方法之外的其他方法。

谢谢

android mvvm android-recyclerview viewmodel android-livedata
1个回答
0
投票

我同意创建父视图模型,例如“ HomeViewModel”,但是我认为为每种视图类型创建视图模型似乎有点工程化,因为每次需要创建新视图类型时,都需要创建一个新的ViewModel,我看不到recyclerview中的视图具有专用ViewModel的任何要求。在我看来,最好的方法是只有1个视图模型。然后,我建议您像本文https://proandroiddev.com/writing-better-adapters-1b09758407d2那样为您的recyclerview实现适配器工厂模式。如果您具有这样的适配器工厂模式,则可以概括您的recyclerview数据,例如,可以像上面的帖子一样将其称为“ Visitable”。然后,您的视图模型只能保存1个可访问列表的实时数据,该数据通过片段/活动观察到。

© www.soinside.com 2019 - 2024. All rights reserved.