如何在ViewModel中对MutableLiveData ArrayList进行排序



我有一个Android应用程序(Java(,它为节目调用api。在节目返回后,我需要按季节过滤节目列表&然后按集。我目前正在对片段中的列表进行排序,因为我还没有在视图模型中找到一个好的解决方案。

这是我在vm中的调用:

public MutableLiveData<ArrayList<Titles>> getTitlesListLiveData(){
return repository.getTitlesLiveData();
} 

这就是我在片段中对其进行排序的方式:

titlesViewModel.titlesListLiveData.observe(getViewLifecycleOwner(), titles -> {
for (Titles title : titles) {
titlesList.add(title);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
titlesList.sort(Comparator.comparing(Titles::getSeasonNumber).thenComparing(Titles::getEpisodeNumber));
}
binding.rvTitles.setAdapter(ShowTitlesAdapter);            
ShowTitlesAdapter.setShowTitlesList(titlesList);
});
titlesViewModel.getAllTitles(ShowTag);

我发现了这一点,但我不明白如何在Java或我的视图模型中做到这一点。有人能帮忙吗?

更新:我试着在我的ViewModel&它不起作用:

public LiveData<List<String>> seasonsListLiveData;
seasonsListLiveData = Transformations.switchMap(titlesListLiveData, titles-> titles.sort(Comparator.comparing(Titles::getSeasonNumber).thenComparing(Titles::getEpisodeNumber));

我得到的错误:必需类型:LiveData<列表>提供:LiveData不存在类型变量Y的实例,因此void符合LiveData

还尝试使用Transformations.map((&收到了相同的错误。

只需使用LiveData转换。在你的情况下,它可能是这样的:

public LiveData<List<Titles>> getTitlesListLiveData()
{
return Transformations.map( repository.getTitlesLiveData(), titles ->
titles.sort(Comparator.comparing(Titles::getSeasonNumber).thenComparing(Titles::getEpisodeNumber))
);
}

此外,您不必每次数据更改时都设置适配器:

binding.rvTitles.setAdapter(ShowTitlesAdapter);

您可以设置一次,例如在onCreate(在活动中时(或onCreateView(在片段中时(中。然后,当数据发生变化时,只需调用setShowTitlesList即可更改适配器中的数据

最新更新