Я выбираю информацию из БД с помощью LiveData, передавая ее в свою активность (через DAO, Repository & Viewmodel) в зависимости от временного интервала дат. Когда я изменяю временной интервал, я хочу удалить старых наблюдателей из 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()
)
Любые советы?