获取LiveData值以与其他LiveData值一起使用

时间:2019-07-08 12:53:31

标签: java android android-livedata

(Android编程新手) 我有RecyclerView个子类别及其相应的关键字。

像这样: https://imgur.com/a/bEFS6cm

通过观察获取子类别

subcategoryViewModel.getAllSubcategoriesForCategory(id).observe... 

(我正在使用Room),这里有可用的ID(知道在创建子类别片段时选择了哪个类别)。

但是,我在计算相应的关键字时遇到了麻烦。关键字是每个子类别中包含的文章的名称。

在我的ArticleDao中,我有一个函数

LiveData<List<String>> getAllArticleNamesById(int subId);

从逻辑上讲,我只需要获取当前子类别列表并在for循环中获取其相应的关键字。 但是,如果子类别列表和关键字列表都为LiveData,而我无法访问它们的值,那么只有它们的观察者可以怎么办?

我尝试将观察者放在观察者之内,但我认为这不是最好的主意。

subcategoryViewModel.getAllSubcategoriesForCategory(id).observe(getViewLifecycleOwner(),
                new Observer<List<Subcategory>>() {
                    @Override
                    public void onChanged(List<Subcategory> subcategories) {
                        recyclerAdapter.setSubcategories(subcategories);

                        for (Subcategory sub : subcategories) {
                            articleViewModel.getAllArticleNamesById(sub.getId()).observe(getViewLifecycleOwner(),
                                    new Observer<List<String>>() {
                                        @Override
                                        public void onChanged(List<String> strings) {
                                            recyclerAdapter.addToKeywordsList(keywordsIntoString(strings));
                                        }
                                    });
                        }
        });

我发现了有关LiveData转换的一些信息(地图,开关图),但这并不适用于我的问题,因为当其他LiveData发生变化时,它应该在LiveData上应用功能。 (至少据我了解)。我只需要访问当前子类别列表并使用值即可观察文章名称。

理想情况下,我需要这样的东西:

for (Subcategory sub : subcategoryList) {
      articleViewModel.getAllArticleNamesById(sub.getId()).observe...
}

所以我的问题是,如何访问已经观察到的子类别?我想念什么吗?

0 个答案:

没有答案