【发布时间】:2018-12-26 15:03:37
【问题描述】:
我有一个AndroidViewModel 用于两个fragments 并包含一个LiveData 对象,如下所示
public class CartViewModel<v extends CartCallback> extends BaseViewViewModel<v> {
private RoomDb roomDb;
private BaseApi api;
private AppExecutors executors;
private PrefsManger prefsManger;
private LiveData<List<LineEntity>> lines;
private LiveData<List<ImageEntity>> images;
private MutableLiveData<CartInfo> cartInfo;
private LiveData<Long> linesCount;
public CartViewModel(Application application, RoomDb roomDb, BaseApi api, AppExecutors executors, PrefsManger prefsManger) {
super(application);
this.roomDb = roomDb;
this.api = api;
this.executors = executors;
this.prefsManger = prefsManger;
lines = roomDb.lineDao().getAllLines();
}
public LiveData<List<LineEntity>> getLines() {
return lines;
}
public void saveOfflineLine(LineEntity entity) {
executors.diskIO().execute(() -> roomDb.lineDao().save(entity));
}
}
在两个片段中我都像这样启动视图模型
CartViewModel cartViewModel = ViewModelProviders.of(this, cartFactory).get(CartViewModel.class);
cartViewModel.attachView(this);
当我观察到来自一个片段的 liveData 和来自另一个片段的用户 saveOfflineLine(entity) 时 onChange 不会触发
但是如果从同一个片段观察和保存(意味着来自视图模型的同一个实例)onChange触发成功
【问题讨论】:
标签: android mvvm android-room android-architecture-components android-livedata