【发布时间】:2019-02-21 04:01:00
【问题描述】:
我正在努力寻找在一个活动中多次调用 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 所以我无法删除观察者。
【问题讨论】:
-
我不明白的事情,你为什么要观察一个方法并通过日期?。在您的视图模型中创建一个设置器并在那里传递日期,然后数据库给出您可以在活动的 OnCreate() 中观察到的结果
-
@PrashanthVerma 当用户点击显示这些数据的日期时,日期是动态的,因此您必须使用新日期拨打电话。我不明白你在 viewmodel 中使用 setter 的解决方案。
-
见
android.arch.lifecycle.Transformations实用程序类 -
让我直说。有用户选择的日期,您需要获取该日期并在 DB 中搜索并将其显示在屏幕上,这是正确的。!?
-
仔细阅读Transform LiveData部分-特别注意
"Similar to map(), applies a function to the value stored in the LiveData object and unwraps and dispatches the result downstream"
标签: android reactive-programming android-architecture-components android-livedata