Я использую данные в реальном времени, чтобы обновить вид деятельности.представление содержит номера вопросов, как общее количество вопросов, так и число отвеченных вопросов, например: 2/10 (ответы / всего), вопросы могут быть отфильтрованы с использованием акторов; если актер не выбран, он перечислит все вопросы (рассмотрим общее количество вопросов как 100) затем, если я выбираю какого-либо актера (например, разработчика, HR), общее количество вопросов уменьшается до другого значения, которое меньше 100 (например, 20), общее количество возвращается с использованием метода дао
@Query("SELECT COUNT(actor) FROM questions WHERE actor IN (:actors)")
LiveData<Integer> getNumberOfQuestions(String[] actors);
here String [] актеры - список выбранных актеров
Использование наблюдателя
questionsViewModel.getTotalQuestionCount(mCheckedActorList).observe(this, new Observer<Integer>() {
@Override
public void onChanged(@Nullable Integer countTotal) {
if (countTotal != null)
mTotalCount = String.valueOf(countTotal);
if (mAnswerCount != null && mTotalCount != null)
mAllQuestionAnswered.setText(mAnswerCount.concat("/").concat(mTotalCount));
}
});
Я наблюдаю за счетом, но рассмотрим сценарий
- без фильтраприменено (актер не выбран, число = 100)
- выбран разработчик актера (число = 20)
в первом случае возвращается 100, а во втором возвращается 100 и 20 Iхотите только текущее значение, т.е. 20, как можно решить это?что я делаю не так?
в представлении модель
public LiveData<Integer> getTotalQuestionCount(List<String> actorsList) {
if (actorsList != null && actorsList.size() > 0) {
String[] actorArray = new String[actorsList.size()];
actorArray = actorsList.toArray(actorArray);
return questionsRepository.getTotalCount(actorArray);
} else {
return questionsRepository.getTotalCount();
}
}