android - 实时数据观察对象单一属性变化

标签 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 ...

最佳答案

为此,您可以使用 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 添加到您需要的任何其他属性更改。

关于android - 实时数据观察对象单一属性变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47378448/

相关文章:

c# - 为不同的 ViewModel 但相同的属性动态显示不同的 View

android - 如何为 android 架构组件生命周期事件添加单元测试?

android - 如何在 Jetpack 中使用导航启动第二个 Activity

Android List View 填充高度到内容

android - 在 Jetpack Compose 中使图像超出边界

android - Android 中 Toast、数据库和其他实用程序的单例模式

android - 无法在 Selenium 中使用移动模拟 chromedriver 中的 click()

c# - 如何提示一个新窗口显示所选项目的模型数据?

c# - MVVM 模式、IDataErrorInfo 和绑定(bind)显示错误?

android - MVVM Dagger2 组件中存在具有匹配键的绑定(bind)