android data binding jetpack II 动态数据更新
android data binding jetpack VIII BindingConversion
android data binding jetpack VII @BindingAdapter
android data binding jetpack V 实现recyclerview 绑定
android data binding jetpack IV 绑定一个方法另一种写法和参数传递
android data binding jetpack III 绑定一个方法
android data binding jetpack II 动态数据更新
android data binding jetpack I 环境配置 model-view 简单绑定
继续记录。
第一个实例绑定了数据和UI。
按自己的思路来继续学习。
绑定后更新数据怎么办?
来学习
动态数据更新notifyPropertyChanged
来实现最简单的更新。
第一步:给原来的USER类加上观察者接口。
第二步:变化时通知更新。notify一下。
同时给属性虽上注解,这是规则,先这么做。
具体代码如下:
package com.ht.jetpack; import android.databinding.BaseObservable; import android.databinding.Bindable; import com.ht.jetpack.BR; /** * User */ public class User extends BaseObservable { public User(String name, int age) { this.age = age; this.name = name; } String name = ""; int age = 0; @Bindable public int getAge() { return age; } public void setAge(int age) { this.age = age; notifyPropertyChanged(BR.age); } @Bindable public String getName() { return name; } public void setName(String name) { this.name = name; notifyPropertyChanged(BR.name); } }
运行起来以后,只要user对象的值发生了变化,那么TextView 的显示会跟着变化。
补充更新方法:
更加简单的方法
上一部分中,仅仅为了让user在自己的name属性发生变化时通知DataBinding框架,我们要做许多工作,又是继承,又是加注解的,确实有点麻烦!
为此,DataBinding框架给我们提供一个简便方法,那就是使用ObservableField。使用它,我们的User类将变成这样:
public class User{
public final ObservableField<String> name = new ObservableField<>();
public User(String name) {
this.name.set(name);
}
}
然后,将按钮的点击监听器中的代码变成这样:
user.name.set("Not milter");
这就可以了,效果和之前是一样一样的。
更进一步,如果属性是基本数据类型,DataBinding框架还提供了专门的属性类:
ObservableBoolean,
ObservableByte,
ObservableChar,
ObservableShort,
ObservableInt,
ObservableLong,
ObservableFloat,
ObservableDouble,
ObservableParcelable
再进一步,如果属性是集合,DataBinding框架也提供了专门的类:
ObservableArrayMap
ObservableArrayList
使用ObservableField 等ObservableXXX类,可以让我们省去继承BaseObservable、添加注解,通知DataBinding框架等麻烦,但天下没有免费的午餐,代价就是性能会降低,所以只能在少量属性上这样用,如果大量使用,用户体验可能不太好。
好了,关于Observable的部分就到这里了,突然发现文章已经不短了。只好下一节再讲BindingAdapter。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2017-12-07 synchronized与Lock区别简单总结