我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 个参数调用单个 DB 函数,我不需要合并 2 个 liveDatas)。
所以我尝试了这个而不是switchMap
butcode
并且nbDays
总是为空。
dayPrices.addSource(
dbManager.getDayPriceData(code.getValue(), nbDays.getValue),
apiResponse -> dayPrices.setValue(apiResponse)
);
一种解决方案是将对象作为单个参数传递,我很确定有一个简单的解决方案。