У меня проблемы: Я начинаю использовать mvvm и LiveData, и хочу сделать это лучше. Я попытаюсь объяснить вам свое сомнение на простом примере:
У меня есть фрагмент контейнера «Exams», содержащий ViewPager2, который содержит некоторые фрагменты «Question». Есть также ExamsViewModel и QuestionViewModel. Нет db и мой единственный источник данных - MyExamDataSource, что-то вроде этого:
class MyExamDataSource {
val questions:ArrayList<Question> = ArrayList()
fun saveQuestionResult(){
...
}
fun getQuestion():Question{
...
}
...
...
}
data class Question(val correct:Boolean, val selectedAnswers:ArrayList<Int>)
class ExamViewModel(myExamsDataSource: MyExamsDataSource): ViewModel() {
val correctAnswer:LiveData<Int> = MutableLiveData<Int>(0)
...
...
}
Каждый QuestionViewModel проверяет свой собственный вопрос, но в то же время правильный ответ LiveData должен увеличиваться каждый раз, когда появляется новый правильный ответ. Источник MyExamData передается через фабрику моделей в ExamsViewModel и QuestionViewModel.
Но теперь у меня есть некоторые сомнения:
- Как я могу обновить правильный ответ LiveData?
- Если я преобразовать поле вопросов в LiveData> и ExamsModelView наблюдать за ним, метод onChanged не вызывается, если я редактирую только элемент списка, или я ошибаюсь?
- Лучше сделать прямое общение между вид модели?