Я хочу:
Получить данные для моей ViewModel.
Разделить их на объекты LiveData.
Сделайте что-нибудь с этим, и только потом передайте это на мой взгляд.
Некоторые параметры пользователя зависят друг от друга.Например, изменение mGender должно измениться mAge Итак, вот что я сделал
DAO
@Query("SELECT * FROM users WHERE _id = :id")
LiveData<User> getUserById(int id);
ViewModel
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
Итак, это работает.Но, я действительно запутался в наблюденииForever () внутри ViewModel.Я знаю, что это не рекомендуется Google.
Я хочу более чистый подход.
Заранее спасибо!