欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DataBinding基本使用(1)

程序员文章站 2022-05-14 15:16:51
...

本文都是接合其他作者的总结,再加上自己实际操作中遇到的一些问题,来综合编写。

DataBinding的配置

因为网上一篓筐,就直接上代码

android {
   ...
    //核心配置代码在这里
    dataBinding {
        enabled = true
    }
}

就这样三行代码,DataBinding就配置好了。 真的是So easy 妈妈那什么~~~

四个标签的使用

<?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"
    xmlns:tools="http://schemas.android.com/tools">
    <data>
        <import type="android.view.View"></import>
        <variable
            name="tv1data"
            type="String"></variable>
    </data>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="com.example.scs.myapplication.MainActivity">
    </LinearLayout>
</layout>

很直观,我们可以看到四个标签



  • 1.其实在DataBinding中,它必须是最外层的标签,是根布局,里面有且只能包裹一个子View,就像Scrollview。
    2.xmlns:android=”http://schemas.android.com/apk/res/android”
    xmlns:app=”http://schemas.android.com/apk/res-auto”
    这两个命名控件一定要加上
    3.layout标签的直接子标签不能是merge,否则报错。
    4.fragment标签不支持dataBinding表达式,即在fragment标签中使用任何dataBinding表达式都会报错
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>
        <variable
            name="data"
            type="String"></variable>
    </data>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <fragment
            android:layout_width="match_parent"
            android:tag="@{data}"
            android:layout_height="match_parent"></fragment>
    </LinearLayout>
</layout>

查看源码就可知道原因

else if ("fragment".equals(nodeName)) {
    if (XmlEditor.hasExpressionAttributes(parent)) {
        L.e("fragments do not support data binding expressions.");
    }
    continue;
}

  • 1.这个标签,其实就是用来承载数据的,在其内部可以定义多个标签
    2.标签,有且只能定义一个
    3.有个class数据,就是用来定义,编译出的binding的类的位置
    下图就是我未定义class,默认的路径,可以看出有四个布局文件,使用了DataBinding
    DataBinding基本使用(1)

<import
            type="com.example.scs.myapplication.StudentBean"
            alias="student1">
</import>
<import
            type="com.example.scs.myapplication.StudentBean"
            alias="student2">
</import>

有两个属性,type就是要引用类的位置,alias就是别名。
别名的用途如上所示,当定义了多个同type的import的时候,就是要用别名去区分,不然就要出大事情
-

<variable
            name="data"
            type="String">
</variable>
<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <TextView
            android:layout_width="match_parent"
            android:text="@{data}"
            android:layout_height="match_parent" />
    </LinearLayout>

标签可谓是DataBinding机制的核心之一,是java代码和xml的枢纽。可以理解为要绑定的变量,name就是变量的名字,type就是变量的类型。
如上述代码所示,TextView就绑定了data数据。

好了 基本的概念的陈述完了,欲知详情请看DataBinding(2)

若某些地方写错,或者理解错,请大家指出,共同进步!