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'
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值