【问题标题】:LiveData, View Models with Heterogeneous Recycler ViewLiveData,具有异构回收器视图的视图模型
【发布时间】:2019-10-03 16:18:03
【问题描述】:

我正在开发一个具有多种视图类型的回收器视图的 android 应用程序。它最初是一个基于 MVP 的应用程序,我正在尝试使用 LiveData 和 ViewModels 将其转换为基于 MVVM 的架构。我有一个主屏幕,其中列出了回收站视图中不同类型的视图。每个视图都有自己的 ViewModel 和相应的模型,因此它的主屏幕具有回收器视图作为不同视图模型的集合。

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

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

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

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

请帮助我提出更好的方法来处理这个问题,或者除了指定的方法之外还有其他方法。

谢谢

【问题讨论】:

    标签: android mvvm android-recyclerview viewmodel android-livedata


    【解决方案1】:

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

    【讨论】:

    • 很抱歉回复晚了,感谢您的建议,我接受了它,因为我在阅读您的评论之前就遵循了类似的方法.. :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 2017-09-25
    • 1970-01-01
    相关资源
    最近更新 更多