(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...
}
所以我的问题是,如何访问已经观察到的子类别?我想念什么吗?