Livedata观察者的多个实例

问题描述 投票:2回答:1

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

视图模型

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,所以我无法删除观察者。

android reactive-programming android-architecture-components android-livedata
1个回答
0
投票

您应该可以执行以下操作(在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
}

你可以在你的activity / fragment中调用observe中的onCreate(),然后在该值发生变化时调用setDate()

© www.soinside.com 2019 - 2024. All rights reserved.