跳至主要內容

09.DatabindingUI绑定类


绑定类

同学们可以理解为每一个xml可以对应生成一个binding类。比如说你的Activity里的布局 ,比如说列表的item,这些都可以生成对应的binding类。

前面的话,我们的绑定类都是自动生成的,比如说activity_main.xml的对应绑定类是ActivityMainBinding,也就是默认情况下以布局的名称改成驼峰命名法+Binding

修改绑定类的的名称

这个难搞吗?

不难搞,在data标签上,修改class属性即可,比如说我们的main_activity.xml布局里

<data class="MainBinding">

    <import type="com.sunofbeaches.databindingdemo.domain.User" />

    <variable
              name="user"
              type="User" />
</data>

点击Build->Make Project一下,重新构建,就会生成MainBinding的类了

这个类生成在什么目录呢?

图片描述
图片描述

获取到绑定类

两种方式,一种是通过DataBindingUtil来绑定,一种是通过Binding类的静态方法来获取到绑定类实例

  • 手动方式来绑定

    val inflate = ActivityMainBinding.inflate(layoutInflater)
    setContentView(inflate.root)
    

    这样子,返回的是ActivityMainBinding,并且,可以拿到View,设置到Activity里去。

    当然啦,这个inflate也有重载的方法,其实跟我们以前使用的LayoutInflater差不多。

     val binding = ActivityMainBinding.inflate(getLayoutInflater(), viewGroup, false)
    

    最后一个参数true或者false的意思同学们应该知道的吧,不知道的话去看一下自定义控件的课程。

    Android开发自定义控件系列课程open in new window

    可以直接bind到View上

    val binding = ActivityMainBinding.bind(viewRoot)
    
  • 使用DataBindingUtil来绑定

    //把布局交给DataBindingUtil
    val activityMainBinding: ActivityMainBinding =
    DataBindingUtil.setContentView(this, R.layout.activity_main)
    

我们在Activity里两种方法都可以,我们在RecyclerView的适配器,或者其他条目类的布局,可以通过Binding类的静态方法来获取到实例对象。

绑定类的结构

前面我们已经告诉大家绑定类在哪个目录下了!

它继承自ViewDataBinding

并且是一个抽象类:public abstract class MainBinding extends ViewDataBinding

那么它的实现类是谁呢?

public class MainBindingImpl extends MainBinding

在哪个目录下呢?

图片描述
图片描述

路径,同学们就看看上面这个图吧。

具体的代码同学们可以去看看,不难。