实时数据观察对象单个属性更改

时间:2017-11-19 15:18:18

标签: android mvvm android-architecture-components

在Android项目中,根据开发人员指南成功实施了Android架构组件,但问题是我们可以使用LiveData观察完整的对象更改

  mQueViewModel.getLiveQuestion().observe(this, new Observer<Question>() {
        @Override
        public void onChanged(@Nullable Question question) {
            Log.i(TAG, "onChanged: ");
            setQuestionDetails();
        }
    });

任何单个对象属性都会更改OnChanged这会导致再次将所有数据设置为UI所以有没有办法实现属性更改,如onDescriptionChangeonImageChange ...

2 个答案:

答案 0 :(得分:0)

为此,您可以使用ViewModel将数据分成更小的部分。这样的事情应该有效:

private LiveData<Question> questions;
private MediatorLiveData<String> description;

public MQueViewModel() {

    description = new MediatorLiveData<>();
    description.addSource(questions, new Observer<Question>() {
        @Override
        public void onChanged(@Nullable Question question) {
            if (question == null) return;
            if (!question.description.equals(description.getValue())) {
                description.setValue(question.description);
            }
        }
    });

}

并且您的UI订阅了description。将类似的MediatorLiveData添加到您需要的任何其他属性更改中。

答案 1 :(得分:0)

可能为时已晚,但您可以有两种选择


1-按照here

实现属性“ Aware” MutableLiveData

2-每当属性更改时,将值设置为自身

indY <- rep(NA, nrow(dat)) # making an empty vector
# use for loop to fill each entry with either 0 or 1
for (i in 1:length(y)) {
  if newy[i] == TRUE:
    indY[i] == 1
  else:
    indY[i] == 0
}