一起Talk Android吧(第三百八十五回:数据绑定-DataBinding总结)

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第三百八十五回:数据绑定-DataBinding总结)相关的知识,希望对你有一定的参考价值。

文章目录

各位看官们,大家好,上一回中咱们说的是数据绑定-DataBinding的例子,这一回中咱们继承介绍该例子。闲话休提,言归正转,让我们一起Talk android吧!

数据绑定使用方法

7.单向数据绑

单向数据绑定表示数据模型中的数据发生变化时与该数据绑定的UI控件自动更新控件中显示的数据。

这个功能需要数据模型类继承BaseObservable类,并且在数据模型类的公有属性上使用@Bindable注解,如果属性是私有权限,那么把注解写到属性的getter方法上;最后是在属性的setter方法中使用notifyChange()方法或者notifyPropertyChanged(BR.strValue)方法通知视图:与视图绑定的数据发生了变化,请修改视图中显示的数据;

这两个方法中不带参数的方法用来通知视图中与数据绑定的所有控件,带参数的方法用来通知视图中与参数匹配的控件,这个参数使用了一个断BR的类,它是系统自动生成的,它的成员包含数据绑定类的属性和视图中的数据变量,我们在示例代码中使用BR.strValue当作参数,它是数据绑定类的属性,绑定了视图中的TextView控件,当它的数据发生变化后,视图中TextView显示的内容会自动更新,这就是数据绑定的魅力所在。关于BR类的示例如下,大家可以参考:

//这个类是系统编译生成的,不需要手动去修改
public class BR 
  public static final int _all = 0;
  public static final int strValue = 1;
  public static final int testdata = 2;

8.双向数据绑定

双向数据绑定表示视图中的UI控件发生变化时自动通知与当前控件绑定的数据,并且更新数据,反之亦然。

双向数据绑定是在单向数据绑定的基础上实现的,在视图中UI控件绑定数据的地方添加等号就可以:android:text="@=testdata.strValue",大家可以参考步骤4中的代码,我们给EditText控件实现了双向数据绑定功能,当数据模型中的数据更新时EditText会自动更新显示的内容,当EditText控件更新时(用户在EditText中输入数据)数据模型中的数据会自动更新。

9.绑定事件

在官方文档中叫绑定表达式,就是给视图中的UI控件绑定一个事件监听器,常用的是onClick,比如我们在步骤4中的代码里给Buttton绑定了事件

android:onClick="@()->testdata.buttonClicked()"

当该Button被点击时会自动调用数据模型类中的buttonClicked()方法,该方法的实现如下:

    public void buttonClicked() 
        strValue += strValue;
        setStrValue(strValue);
    

我们主动调用了属性的setter方法,这样启动单向数据绑定功能通知与属性绑定的UI控件更新控件中的数据。

演示结果

下面的动画是本程序的演示,程序界面一共三个控件(也可以从xml布局文件中看到):

  • 用来显示数据的TextView
  • 用来接收数据的EditText
  • 用来绑定事件的Button.

我们创建数据模型对象时初始化方法中的数值是"hello",这个值用来初始化类中的属性,因为类中的属性单向绑定到TextView控件,所以TextView显示"hello",当按下Button时,修改属性的值,属性值发生变化后自动通知TextView更新数据,这个在动画中可以看到,进而验证了单向数据绑定功能正常。

EditText使用了双向数据绑定功能,它的初始值是数据模型类的属性值"hello",按下Button后属性值发生变化,受双向绑定功能的影响,它显示的数据也自动进行更新,当我们在控件上输入"good"后导致控件发生了更新,受双向绑定功能的影响,数据模型中的数据会自动更新,更新后的值通过TextView显示出来。

使用总结

  • 数据绑定可以在Activity中使用,也可以在Fragment中使用;
  • 在绑定过程中还支持各种运算和运算符,大家可以参考官方文档的介绍;
  • 数据绑定具有视图绑定的功能,在此功能上还可以自动更新数据和UI控件,而且还可以给控件绑定事件监听器;

数据绑定主要包含三个要素:Activity,xml布局(视图),数据模型类.

数据封装在数据模型中,视图中的控件和数据模型中的数据做了绑定,Activity只需要把视图和数据模型类关联起来就可以,这就典型的MVVM模型,数据绑定在其中担当VM角色。

使用数据绑定主要有两个优势:

  • 控件和数据可以自动更新
  • view和model可以分开降低了程序的耦合

关于数据绑定的用法还比较多,我们在这里只介绍了一些常用的功能,感兴趣的看官可以去看官方文档。此外,我觉得在Compose推出后数据绑定功能已经无用武之地,因为没有View用来绑定数据。

看官们,关于Android中数据绑定-DataBinding的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

以上是关于一起Talk Android吧(第三百八十五回:数据绑定-DataBinding总结)的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第三百八十八回:lifecycle)

一起Talk Android吧(第三百八十八回:lifecycle)

一起Talk Android吧(第三百八十七回:LiveData)

一起Talk Android吧(第三百八十六回:ViewModel)

一起Talk Android吧(第三百八十七回:LiveData)

一起Talk Android吧(第三百八十三回:视图绑定-ViewBinding)