不从数据库的LiveData观察器获取数据

问题描述 投票:0回答:1

我想要的

我有一个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

java android database observable android-room
1个回答
0
投票

在您的代码中,每次调用onNextMonth函数时都需要一个LiveData,但是您绝不会拔掉旧的LiveData。因此,您只有一个观察者来更新RecyclerView。您应该保存当前的LiveData,并在onNextMonth函数中,首先应删除其观察者。代码

© www.soinside.com 2019 - 2024. All rights reserved.