Вместо создания списка observable
создайте myDate переменную observable
.Потому что это дата, которая меняется, а не список.Вы можете достичь этого:
Сделайте ваш myDate
как MutabeLiveData
в viewModel.Затем вы можете изменить его значение, когда дата выбрана из CalenderView
, используя setValue(newDate)
.
Теперь, наблюдайте за этим myDate
, и при изменении значения извлекайте список со значением даты обновления и обновляйте RecyclerView
.
Также используйте TimeStamp вместо сохранения даты в виде yyyy-mm-dd
String.
*********** UPDATE *************
Пример для дальнейшего уточнения
В ViewModel
классе сделать это
MutableLiveData<String>() myDate=new MutableLiveData<String>();
В Activity
сделайте это:
calendarView.setOnDateChangeListener( new CalendarView.OnDateChangeListener() {
public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
myViewModel.myDate.setValue(""+year+"-"+month+"-"+dayOfMonth);//This will invoke the observer
}});
myViewModel.myDate.observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String newDate) {
//do this on dedicated thread
List<MYOBJECT> myObjects=myViewModel.getMealsOnDate(newDate)
adapter.setItems(myObjects); // adapter from RecyclerView
}
});
Примечание : 1. Не нужно указывать getMealsOnDate()
как LiveData.Метод в Dao
может возвращать List<MYOBJECT>
вместо LiveData<List<MYOBJECT>>
. Так что вам не нужно его соблюдать.
2. Не запускайте запросы db в основном потоке, а вызывайте notifyDataSetChanged
в setItems()
адаптера для обновления Recyclerview.