android - 在我的 ViewModel 中观察(并处理)LiveData。然后才通过 if 来查看,通过拆分为更小的 LaveData 对象
问题描述
我想要:
将数据提取到我的 ViewModel。
在 LiveData 对象上拆分它。
用它做一些事情,然后才将它传递给我的视图。
一些用户选项相互依赖。例如,更改mGender必须更改mage 所以,这就是我所做的
道
@Query("SELECT * FROM users WHERE _id = :id")
LiveData<User> getUserById(int id);
视图模型
private MediatorLiveData<Integer> mUnitSystem = new MediatorLiveData<>();
private MediatorLiveData<Integer> mAge = new MediatorLiveData<>();
private MediatorLiveData<Integer> mGender = new MediatorLiveData<>();
private MediatorLiveData<Double> mHeight = new MediatorLiveData<>();
public UserSettingsViewModel(@NonNull Application application) {
super(application);
mData = Injector.getDataReporitory(application);
MediatorLiveData<User> userMediatorLiveData = new MediatorLiveData<>();
userMediatorLiveData.addSource(mData.getUser(1), new Observer<User>() {
@Override
public void onChanged(@Nullable User user) {
mUnitSystem.postValue(user.getUnitSystem());
mAge.postValue(user.getAge());
mGender.postValue(user.getGender());
mHeight.postValue(user.getHeight());
}
});
userMediatorLiveData.observeForever(new Observer<User>() {
@Override
public void onChanged(@Nullable User user) {
}
});
mGender.addSource(mUnitSystem, new Observer<Integer>() {
@Override
public void onChanged(@Nullable Integer integer) {
mAge.postValue(integer + 10);
}
});
}
public LiveData<Integer> getGender() {
return mGender;
}
public LiveData<Integer> getAge() {
return mAge;
}
public LiveData<Integer> getUnitSystem() {
return mUnitSystem;
}
// setter to them
所以,它的工作。但是,我真的对 ViewModel 中的 observeForever() 感到困惑。我知道谷歌不建议这样做。
我想要更干净的方法。
先感谢您!
解决方案
推荐阅读
- r - 当此值等于 1 时,将下 n 个值设置为零
- python - pyinstaller错误,exe编译错误?
- java - java.lang.NoSuchMethodError:org.springframework.scheduling.annotation.AnnotationAsyncExecutionInterceptor.configure
- python - 根据现有列与 pyspark 的交互,将新列添加到数据框
- java - 如何从 FIREBASE 数据库中调用我的项目?请
- swagger - Grape Swagger 不显示示例参数
- python-3.x - 有没有一种 Pythonic 方法可以将一个字典映射到另一个字典?
- javascript - 用于生成树的 Javascript 递归函数 async-await
- python-3.x - Autopep8 可以在语法中支持 `source python django` 吗?
- opencv - 将turtle和opencv视频窗口拼接在一起