我有一个Room数据库连接到RecyclingView,该数据库由一个查询填充,该查询从一个月中选择所有数据。用户可以更改月份,并且我希望RecyclingView每次用户更改月份时都刷新数据。
RecyclingView获取开始月份的正确数据(在用户更改值之前)。但是,在用户调用onNextMonthClick函数之后,RecyclingView为空(下个月可以),但即使我们回到了原月份,它仍然保持为空。
使用我的日志,我发现onNextMonthClicked()中的onChange()方法永远不会在当月有数据时触发,但会在该月中没有数据时触发。
如何重新加载我的数据?
month = Dates.getMonth();
mDiaryViewModel = new ViewModelProvider(this).get(DiaryViewModel.class);
mDiaryViewModel.getmEntriesMonth(month).observe(this, new Observer<List<Diary>>() {
@Override
public void onChanged(List<Diary> diaries) {
adapter.setEntries(diaries);
}
});
}
public void onNextMonthClick(View view) {
if (month < 12) {
month += 1;
} else {
month = 1;
}
adapter.setEntries(mDiaryViewModel.getmEntriesMonth((month)).getValue());
mDiaryViewModel.getmEntriesMonth(month).observe(this, new Observer<List<Diary>>() {
@Override
public void onChanged(List<Diary> diaries) {
adapter.setEntries(diaries);
}
});
}
可以找到整个代码here
在您的代码中,每次调用onNextMonth函数时都需要一个LiveData,但是您绝不会拔掉旧的LiveData。因此,您只有一个观察者来更新RecyclerView。您应该保存当前的LiveData,并在onNextMonth函数中,首先应删除其观察者。代码