具有多个ViewModel的活动

时间:2017-09-21 09:22:07

标签: android viewmodel android-architecture-components

我的Activity包含3个RecyclerViews。我需要使用来自远程存储库(3个不同请求)的数据填充RecyclerViews。我可以在ViewModels中使用多个Activity,还是有更好的解决方案(最佳做法)。

4 个答案:

答案 0 :(得分:17)

根据the open/closed principle,您应该创建三个不同的ViewModel。复杂性不会增加太多,并且您可以非常轻松地将一个ViewModel(或仅重复使用)与相应的RecyclerView移动到另一个Activity

当然,有时违反规则是有道理的 - 例如,如果您知道,没有机会,RecyclerView将被重用或移动到另一个屏幕,然后您可以使用一个{{更简单的解决方案1}}。

同样的情况如果ViewModel(即使有3个列表)可能总是非常简单(只有三个ViewModel字段,只需几行代码填充它们),你可以打破这个规则。

然而,违反O / CP不是一个好习惯 - 它只是意识到违反规则。

答案 1 :(得分:11)

在这种情况下,我建议使用一个填充三个不同LiveData对象的视图模型。这样,只要您的三个请求中的一个获得响应,UI就会得到更新。有关如何将RecyclerView与LiveData一起使用的详细信息,请查看Google Example

我认为每个活动有多个视图模型只会增加复杂性,我认为没有任何价值。

答案 2 :(得分:2)

我在一个片段中有两个recyclerview。我认为使用两个ViewModels会更好。导致不同的recyclerviews得到他们自己的数据请求,并且状态处理特别是连接错误。 在这种情况下,将其分成不同的ViewModels不会增加复杂性,但我认为它非常适合于数十个规则

答案 3 :(得分:0)

更简单的是,您可以使用一个ViewModel,它使用一个服务类,而后者又使用三个存储库来获取数据。例如:

XActivity - > XViewModel - > XService - > {Arepository, Brepository, Crepository}