Получение значений LiveData для использования с другими значениями LiveData - PullRequest
1 голос
/ 08 июля 2019

(новичок в программировании на Android) У меня есть RecyclerView подкатегорий и соответствующих им ключевых слов.

вот так: https://imgur.com/a/bEFS6cm

Подкатегории выбираются путем наблюдения

subcategoryViewModel.getAllSubcategoriesForCategory(id).observe... 

(я использую Room), здесь у меня есть идентификатор (известно, какая категория выбрана во время создания фрагмента подкатегории).

Однако у меня проблемы с вычислением соответствующих ключевых слов. Ключевые слова - это названия статей, содержащихся в каждой подкатегории.

В моем 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 Преобразованиях (map, switchmap), но на самом деле это не относится к моей проблеме, так как предполагалось применить функцию к LiveData при изменении других LiveData. (по крайней мере из того, что я понимаю). Мне просто нужно получить доступ к текущему списку подкатегорий и работать со значениями, чтобы я мог наблюдать за названиями статей.

В идеале мне нужно что-то вроде этого:

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

Итак, мой вопрос: как мне получить доступ к подкатегориям, которые я уже наблюдаю? Я что-то упустил?

...