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