我正在努力寻找一种解决方案,用于在一个 Activity 中多次调用 livedata 观察者而不是创建它的多个实例,这会导致在数据库更改时出现问题,我从所有实例都收到了回调。
View 模型
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 所以我无法删除观察者。
最佳答案
您应该能够执行以下操作(在 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()
。