Znerual:
私は何をしたいです
私は月からすべてのデータを選択するクエリで埋めます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);
}
});
}
コード全体を見ることができ、ここで
ピエルルイジ:
あなたのコードでは、あなたはLiveDataあなたがonNextMonth関数を呼び出すたびに必要としますが、決して古いLiveDataを抜いていません。だから、もっとして1人のオブザーバー更新RecyclerViewを持っています。あなたは現在LiveDataを保存する必要がありますし、onNextMonth機能では、最初にあなたは、そのオブザーバを削除する必要があります。コード
adapter.setEntries(mDiaryViewModel.getmEntriesMonth((month)).getValue());
LiveDataの値が非同期で更新されるため、動作しない可能性があり、このコード行を削除します。最後の提案は、あなたがフラグメントである場合は、LifecycleOwnerとしてviewLifecycleの終わりではない、これを使用する必要があるということです。
mDiaryViewModel.getmEntriesMonth(month).observe(getViewLifecycle(), new
Observer<List<Diary>>() {
@Override
public void onChanged(List<Diary> diaries) {
adapter.setEntries(diaries);
}
});