我正在努力寻找一种解决方案,用于在一个 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()

10-08 15:34