DataBind第六篇:数据绑定刷新BaseObservable
2019-07-24 本文已影响0人
Small_Cake
有的时候我们更新了一个对象的一个字段,这个时候,我们一般是这样的:
String price = goods.getPrice();
mBinding.tvPrice.setText(price);
但如果要更新多个字段:
String name = goods.getName();
String price = goods.getPrice();
String oldPrice = goods.getOldPrice();
...
mBinding.tvName.setText(name);
mBinding.tvPrice.setText(price);
mBinding.tvOldPrice.setText(oldPrice);
...
这样就可能并不美观,你可能想到了下面这样来刷新数据:
goods.setPrice(price);
mBinding.setItem(goods);
但我想能不能通过一行代码就行了,如下面这样
goods.setPrice(price);
使用BaseObservable
就可以实现
1.首先继承BaseObservable
public class GoodsInfo extends BaseObservable{
....
}
2.对要单独更新的字段添加注释,并设置为public
@Bindable
public String price;
3.在此字段的的set方法中调用notifyPropertyChanged(BR.price);
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price= price;
notifyPropertyChanged(BR.price);
}
为了让Fragment代码中的两行变成一行,我居然多写了三步操作,呃呃,没错,我就是要让页面代码看上去少,同时让别人无法理解为什么一个 goods.setPrice(price);
就可以真的改变值(它不点进去看这个方法就不会知道)。
其实还有一种方法就是使用ObservableField
,但这种方式转换的是一个对象,在xml中和DataBindAdapter配合并不友好,而且他们的获取值和设置值的方式是:
goods.price.set(price);
goods.price.get();
我也觉得很奇怪,所有就没用用ObservableField
了,当然对一个单独的值且不需要配合DataBindAdapter使用的值,用ObservableField
的方式也不错:
- a.可以不用写
@Bindable
注释, - b.且不用写get和set方法。
但更新一个对象的单个和多个字段的情况很少,且需要继承BaseObservable。所以我个人真没觉得这个东西BaseObservable有什么大用,反而觉得麻烦。只是感觉
数据绑定监听刷新
听起来很NB,所以勉强用用这个吧~!