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的方式也不错:

但更新一个对象的单个和多个字段的情况很少,且需要继承BaseObservable。所以我个人真没觉得这个东西BaseObservable有什么大用,反而觉得麻烦。只是感觉数据绑定监听刷新听起来很NB,所以勉强用用这个吧~!

上一篇下一篇

猜你喜欢

热点阅读