Несколько экземпляров наблюдателей Livedata - PullRequest
0 голосов
/ 17 сентября 2018

Я изо всех сил пытаюсь найти решение для вызова наблюдателя liveata несколько раз в одном действии, а не для создания нескольких его экземпляров, это приводит к проблеме, когда база данных изменяется, я получаю обратные вызовы из всех экземпляров.

ViewModel

public class RatingsViewModel extends AndroidViewModel {

private RatingsRepository ratingsRepository;
private LiveData<List<Rating>> ratingsList;

public RatingsViewModel(Application application) {
    super(application);
    ratingsRepository = new RatingsRepository(application);

}

public LiveData<List<Rating>> getRatingsByDate(LocalDate date) {
    ratingsList = ratingsRepository.getActivitiesByDate(date);
    return ratingsList;
}

Activity

private void getRatingsByDate(LocalDate date) {
    ratingsViewModel.getRatingsByDate(date).observe(this, activities -> {
        // list populating stuff
    });
}

Я пытался вызвать hasObserver (), но он возвращает false, поэтому я не могу удалить наблюдателей.

1 Ответ

0 голосов
/ 17 сентября 2018

Вы должны быть в состоянии сделать что-то вроде следующего (в Kotlin, но при необходимости его можно легко перевести на Java)

val dateLiveData: MutableLiveData<Date> = MutableLiveData()

val ratingsList = MediatorLiveData<List<Rating>>().apply {
    this.addSource(dateLiveData) {
        this.value = ratingsRepository.getActivitiesByDate(dateLiveData.value)
    }
}

fun setDate(date: Date) {
    dateLiveData.value = date
}

Вы бы позвонили observe из onCreate(), например, в вашемактивность / фрагмент, а затем вызвать setDate(), когда это значение изменится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...