Android DataBinding 从入门到进阶,移动APP开发框架盘点

BaseObservable

一个纯净的 ViewModel 类被更新后,并不会让 UI 自动更新。而数据绑定后,我们自然会希望数据变更后 UI 会即时刷新,Observable 就是为此而生的概念

BaseObservable 提供了 notifyChange()notifyPropertyChanged() 两个方法,前者会刷新所有的值域,后者则只更新对应 BRflag,该 BR 的生成通过注释 @Bindable 生成,可以通过 BR notify 特定属性关联的视图

/**

  • 作者:叶应是叶
  • 时间:2018/5/16 20:54
  • 描述:
    */
    public class Goods extends BaseObservable {

//如果是 public 修饰符,则可以直接在成员变量上方加上 @Bindable 注解
@Bindable
public String name;

//如果是 private 修饰符,则在成员变量的 get 方法上添加 @Bindable 注解
private String details;

private float price;

public Goods(String name, String details, float price) {
this.name = name;
this.details = details;
this.price = price;
}

public void setName(String name) {
this.name = name;
//只更新本字段
notifyPropertyChanged(com.leavesc.databinding_demo.BR.name);
}

@Bindable
public String getDetails() {
return details;
}

public void setDetails(String details) {
this.details = details;
//更新所有字段
notifyChange();
}

public float getPrice() {
return price;
}

public void setPrice(float price) {
this.price = price;
}

}

setName() 方法中更新的只是本字段,而 setDetails() 方法中更新的是所有字段

添加两个按钮用于改变 goods 变量的三个属性值,由此可以看出两个 notify 方法的区别。当中涉及的按钮点击事件绑定,在下面也会讲到

<?xml version="1.0" encoding="utf-8"?>

<TextView
···
android:text="@{goods.name}" />

<TextView
···
android:text="@{goods.details}" />

<TextView
···
android:text="@{String.valueOf(goods.price)}" />

<Button
···
android:onClick="@{()->goodsHandler.changeGoodsName()}"
android:text=“改变属性 name 和 price”
android:textAllCaps=“false” />

<Button
···
android:onClick="@{()->goodsHandler.changeGoodsDetails()}"
android:text=“改变属性 details 和 price”
android:textAllCaps=“false” />

/**

  • 作者:叶应是叶
  • 时间:2018/5/16 21:07
  • 描述:
    */
    public class Main3Activity extends AppCompatActivity {

private Goods goods;

private ActivityMain3Binding activityMain3Binding;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
activityMain3Binding = DataBindingUtil.setContentView(this, R.layout.activity_main3);
goods = new Goods(“code”, “hi”, 24);<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值