Я изучаю Android для школьного проекта, мы должны использовать Java, и мы не можем использовать какие-либо внешние библиотеки. Я создаю приложение отслеживания загрузки курса студента колледжа. В настоящее время я работаю над действием, которое будет детализировать информацию для Course
, выбранного пользователем. Мне нужно иметь возможность извлекать несколько результатов из базы данных, когда пользователь выбирает Course
: Mentor
(Инструктор), LiveData
List
из Assessment
с и LiveData
List
из Note
s. В настоящее время у меня есть Transformations.switchMap
, настроенный и работающий, чтобы получить Course
Mentor
. Однако, похоже, что LiveData
может иметь только одного из наблюдателей этого преобразования. Вот мой код:
CourseDetailViewModel
LiveData<Course> currentCourse;
LiveData<Mentor> courseMentor;
LiveData<List<Assessment>> courseAssessments;
LiveData<List<Note>> courseNotes;
final CourseDetailRepository REPO;
public CourseDetailViewModel(@NonNull Application application) {
REPO = new CourseDetailRepository(application);
}
public LiveData<Course> getCurrentCourse(long id) {
if (currentCourse == null) {
currentCourse = REPO.getCourseById(id);
}
// I'm dong the Transformations here because I tried in the Constructor but because currentCourse
// was null, the transformation wasn't kicking off.
// the courseMentor Transformation works, the others don't seem to fire.
courseMentor = Transformations.switchMap(curentCourse, course ->
REPO.getMentorById(course.getMentorId()));
courseAssessments = Transformations.switchMap(currentCourse, course ->
REPO.getAssessmentsByCourse(course.getCourseId()));
courseNotes = Transformations.switchMap(currentCourse, course ->
REPO.getNotesByCourse(course.getCourseId())));
return this.currentCourse;
}
public LiveData<Mentor> getCourseMentor() { return this.courseMentor }
public LiveData<List<Assessment>> getCourseAssessments() { return this.courseAssessments }
public LiveData<List<Note>> getCourseNotes() { return this.courseNotes }
Затем я наблюдаю эти LiveData
объекты в моем CourseDetailActivity
, чтобы заполнить пользовательский интерфейс: Mentor
заполняет наборы выбора Spinner
, List<Assessment>
и List<Note>
передаются в соответствующие им RecyclerView
Adapter
s.
У меня такое чувство, что я могу использовать что-то вроде MediatorLiveData
, но я действительно не совсем понимаю, как чтобы правильно использовать его, даже после просмотра многих ресурсов в Интернете. Я новичок в Android, это мой самый первый Android проект, поэтому я знаю, что мне есть чему поучиться, и я полностью открыт для критики в отношении дизайнерских решений.
Большое спасибо за ваша помощь!