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。