@RichardLeMesurier Он становится недействительным, потому что в хранилище постоянно происходят изменения. Следовательно, теперь я добавил ссылку на мою суть, чтобы она не ломалась
ользуюTransformations.switchMap
в моей ViewModel, так что мойLiveData
Наблюдаемая в моем фрагменте коллекция реагирует на измененияcode
параметр.
Это прекрасно работает:
public class MyViewModel extends AndroidViewModel {
private final LiveData<DayPrices> dayPrices;
private final MutableLiveData<String> code = new MutableLiveData<>();
// private final MutableLiveData<Integer> nbDays = new MutableLiveData<>();
private final DBManager dbManager;
public MyViewModel(Application application) {
super(application);
dbManager = new DBManager(application.getApplicationContext());
dayPrices = Transformations.switchMap(
code,
value -> dbManager.getDayPriceData(value/*, nbDays*/)
);
}
public LiveData<DayPrices> getDayPrices() {
return dayPrices;
}
public void setCode(String code) {
this.code.setValue(code);
}
/*public void setNbDays(int nbDays) {
this.nbDays.setValue(nbDays);
}*/
}
public class MyFragment extends Fragment {
private MyViewModel myViewModel;
myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
myViewModel.setCode("SO");
//myViewModel.setNbDays(30);
myViewModel.getDayPrices().observe(MyFragment.this, dataList -> {
// update UI with data from dataList
});
}
проблема
Мне сейчас нужен другой параметр (nbDays
прокомментировал код выше), так что мойLiveData
объект реагирует на изменение обоих параметров (code
а такжеnbDays
).
Как я могу связать преобразования?
Некоторое чтение указало мне наMediatorLiveData, но это не решает мою проблему (все еще нужно вызвать одну функцию БД с 2 параметрами, мне не нужно объединять 2 liveDatas).
Так что я попробовал это вместоswitchMap
ноcode
а такжеnbDays
всегда нулевые.
dayPrices.addSource(
dbManager.getDayPriceData(code.getValue(), nbDays.getValue),
apiResponse -> dayPrices.setValue(apiResponse)
);
Одним из решений было бы передать объект как один параметр, я уверен, что есть простое решение для этого.