我使用LiveData从数据库中选择信息,并将其传递给我的Activity(通过DAO,存储库和Viewmodel),具体取决于Date的时间跨度。更改时间跨度时,我想删除LiveData上的旧观察者,并为新的时间跨度创建新的观察者。
private void addStepsObserver(Date[] timeSpan) {
homeViewModel.getSteps(timeSpan[0], timeSpan[1]).observe(this, new Observer<Integer>() {
@Override
public void onChanged(Integer integer) {
if (integer == null) {
return;
}
Log.i(StepRepository.TAG, "onChanged for getSteps().observe called " + integer);
updateStepCounter(integer);
}
});
}
private void removeObservers() {
Date[] timeSpan = homeViewModel.getCurrentTimespan();
homeViewModel.getSteps(timeSpan[0], timeSpan[1]).removeObservers(this);
Log.i(TAG, "remove Observers " + timeSpan[0] + " " + timeSpan[1]);
}
但是,在我先后调用removeObservers()
和addStepsObservers(timespan)
并将时间跨度设为另一个时间戳后,两个观察者都调用了updateStepCounter()
方法,尽管旧的不再活动了(我使用.hasObservers()
和.hasActiveObservers()
进行了检查)
有什么建议吗?
答案 0 :(得分:0)
homeViewModel.getSteps()
-为每个呼叫返回一个新的LiveData
?因此,这意味着您从另一个新创建的LiveData
中删除了一个观察者。您必须保留对在LiveData
步骤中创建的addStepsObserver
对象的引用,并且应该在removeObservers
步骤中从其中删除观察者。