美文网首页
DataBind第六篇:数据绑定刷新BaseObservable

DataBind第六篇:数据绑定刷新BaseObservable

作者: Small_Cake | 来源:发表于2019-07-24 11:53 被阅读0次

有的时候我们更新了一个对象的一个字段,这个时候,我们一般是这样的:

 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,所以勉强用用这个吧~!

相关文章

网友评论

      本文标题:DataBind第六篇:数据绑定刷新BaseObservable

      本文链接:https://www.haomeiwen.com/subject/egytrctx.html