美文网首页
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