美文网首页
DataBinding基本使用(1)

DataBinding基本使用(1)

作者: notrynobug | 来源:发表于2017-09-16 17:43 被阅读0次

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

    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>
    

    很直观,我们可以看到四个标签<layout><data><import><variable>


    • <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;
    }
    
    • <data>
      1.<data>这个标签,其实就是用来承载数据的,在其内部可以定义多个<import><variable>标签
      2.<data>标签,有且只能定义一个
      3.<data>有个class数据,就是用来定义,编译出的binding的类的位置
      下图就是我未定义class,默认的路径,可以看出有四个布局文件,使用了DataBinding


      深度截图20170916173117.png
    • <import>

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

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

    • <variable>
    <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>
    
    

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

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

    相关文章

      网友评论

          本文标题:DataBinding基本使用(1)

          本文链接:https://www.haomeiwen.com/subject/oxcusxtx.html