首页 > 解决方案 > Livedata 观察者的多个实例

问题描述

我正在努力寻找一种解决方案,在一个活动中多次调用 livedata 观察者而不创建它的多个实例,这会导致当数据库更改时出现问题,我从所有实例中得到回调。

视图模型

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;
}

活动

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

我尝试调用 hasObserver() 但它返回 false 所以我无法删除观察者。

标签: androidreactive-programmingandroid-architecture-componentsandroid-livedata

解决方案


您应该能够执行以下操作(在 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()


推荐阅读