DataBinding的双向绑定

本文深入探讨了Android DataBinding的双向绑定机制,从回顾、源码解析到潜在问题的揭示,详细阐述了双向绑定的工作原理。通过分析源码,解释了`@={}`的含义,以及`{}`和`{}Observer`的作用,指出防止无限循环调用的解决方案,并提醒开发者在自定义双向绑定时需要注意的问题。
摘要由CSDN通过智能技术生成

这篇之前在简书上面发布的blog,由于不打算在简书上面写东西了,就搬过来这里。

之前曾经发布过一篇blog来记录之前使用DataBinding的一些心得体会,当时对于DataBinding的双向绑定简单提了一下。现在对这个双向绑定有了进一步的了解,于是继续分享。

回顾

我们先来回顾一下之前双向绑定的做法:

<EditText
android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_marginBottom="5dp"
  android:text="@={item.price}"/>

  <Button
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:text="@{item.price}"/>

这里就只是通过使用* “@={}”*就完成了EditTextButton的文本属性的双向绑定。这里面隐藏了什么秘密呢?直接打开源码来看下吧;

隐藏起来的秘密

EditTextButton继承TextView,我们可以在TextViewBindingAdapter里面看到Goolge工程师对android:text这个属性做了什么处理。打开源码,首先就被下面这段代码吸引了目光(反正我就被吸引了):

   @InverseBindingAdapter(attribute = "android:text", event = "android:textAttrChanged")
    public static String getTextString(TextView view) {
        return view.getText().toString();
    }

虽然很疑惑这个@InverseBindingAdapter注解的作用,不过还是先把相关源码的逻辑找出来吧:

   @BindingAdapter(value = {
  "android:beforeTextChanged", "android:onTextChanged",
            "android:afterTextChanged", "android:textAttrChanged"}, requireAll = false)
    public 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值