我正在努力寻找一个解决方案,在一个活动中多次调用一个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,所以我无法删除观察者。
您应该可以执行以下操作(在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()
。