DataBinding进行数据绑定的时候,更新数据以后,页面内容不刷新,八成是没有触发ui刷新

初入databinding时,遇到了这么一个问题,使用kotlin的data class写数据类,实现双向绑定的时候,发生了数据更新成功,但是页面的TextView没有刷新显示,研究了一下是页面没有更新,name更新有两种方案

方法一(不推荐):每次赋值新数据时执行一下invalidateAll(),这种方法不推荐,因为每次更新都调用太麻烦了吧,而且这个方法是对所有内容进行一个更新,不是很美妙。

binding.invalidateAll()

方法二(推荐): 定义数据类的时候,需要设置为可观察数据类,也就是继承BaseObervable,并且,在和ui绑定的属性上加上@Bindable注解,然后再set(value)方法中执行notifyPropertyChanged(BR.studyType)来刷新页面的数据,这里的BR类也是自动生成的,这种方法是观察修改的属性,进行单一属性的刷新,这种方法才是真的美妙。


class HomeData: BaseObservable() {
    @Bindable
    var studyType: StudyType = StudyType(1,"任务")
    set(value) {
        field = value
        notifyPropertyChanged(BR.studyType)
    }
    val studyTypeList: MutableList<StudyType> = mutableListOf(StudyType(1,"任务"),
        StudyType(2,"情绪"),StudyType(3,"经验"),StudyType(4,"目标"))
    data class StudyType(
        var id: Int,
        var name:String
    )
}

注:如果注解@Bindable报红,需要在app下的build.gradle中添加   id 'kotlin-kapt'

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'kotlin-kapt'
}

猜你喜欢

转载自blog.csdn.net/Spy003/article/details/128945879