JetPack学习笔记之DataBinding

概念

DataBinding是Google为了Android能够更好地实现MVVM架构而设计的,可以减轻页面(Activity/Fragment)的工作量,让布局承担一部分原本属于页面的工作。有如下特点:

  • 项目更简洁,可读性更高
  • 不再需要findViewById
  • UI控件能直接与数据模型中的字段绑定,甚至能响应用户的交互

基本使用

  • 在app的build.gradle中启用数据绑定
android {
   ......
    dataBinding{
        enabled = true
    }
}
  • 修改布局文件
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>
 
        <variable
            name="personInfo"
            type="com.json.jetpack.databinding.Person" />
     
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/tv_name"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:text="@{personInfo.name}"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/tv_age"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:layout_marginTop="60dp"
            android:text="@{String.valueOf(personInfo.age)}"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/tv_name" />

        <TextView
            android:id="@+id/tv_address"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:layout_marginTop="60dp"
            android:text="@{personInfo.address}"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/tv_age" />
  
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

撇开布局文件中的@{}语法,可以看到这个与普通的布局文件的区别是在布局文件外层加入了layout标签 - 可以手动修改布局文件,为其添加<layout>标签,也可以将鼠标移动至布局文件根目录位置,单击浮现出来的菜单,选择“convert to data binding layout”选项,AS会自动添加layout/data标签。

添加layout标签的目的是告诉DataBinding库,我们希望对该布局文件实行绑定。此时rebuild项目,DataBinding库会自动生成绑定该布局文件所需要的类 - 生成的类名规则是:布局文件名 + Binding,比如activiy_base_info,则DataBinding库生成的类是ActivityBaseInfoBinding。

  • 实例化布局文件

有了DataBinding组件库之后,就可以告别findViewById了,为啥?Data直接绑定到布局了。以前我们通过setContentView来实例化布局文件,现在我们需要通过DataBindingUtil.setContentView方法来实例化布局文件。该方法返回实例化后的布局文件对象。该布局文件对象即是上面提到的DataBindng库自动生成的类。

        ActivityBaseInfoBinding activityBaseInfoBinding = DataBindingUtil.setContentView(this, R.layout.activity_base_info);
  • 将数据传递到布局文件
<layout>   

 <data>
 
        <variable
            name="personInfo"
            type="com.json.jetpack.databinding.Person" />
     
    </data>


        <TextView
            android:id="@+id/tv_name"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:text="@{personInfo.name}"
            app:layout_constraintLeft_toLeftOf="parent"
       
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值