美文网首页
DataBinding原理与编译时绑定布局与对象、双向绑定原理

DataBinding原理与编译时绑定布局与对象、双向绑定原理

作者: Lucky胡 | 来源:发表于2020-01-20 17:54 被阅读0次

编译时绑定布局与对象 -- APT预编译方式

引入databinding需要做以下配置(Kotlin项目)

apply plugin: 'kotlin-kapt'
android {
    dataBinding{
        enabled = true
    }
}

dependencies {    
kapt "com.android.databinding:compiler:3.5.3"
}


如下面的activity_main.xml布局文件,经过APT预编译后,会自动生成绑定的java代码,kotlin的在buid/generated/source/kapt/debug下,java的在buid/generated/source/apt/debug里。

<layout>
    <data>
        <variable
            name="loginviewmodel"
            type="com.hujun.mvvm.LoginViewModel" />
    </data>

    <LinearLayout>
    ...
    </LinearLayout>
</layout>

会自动生成ActivityMainBindingImpl,其父类是ActivityMainBinding。

除了自动生成java文件,还会生成activity_main-layout.xml文件。

DataBinding自动将xml生成两个xml

布局文件为activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 配置 -->
    <data>
        <variable
            name="userinfo"
            type="com.hujun.databinding.UserInfo" />
    </data>

    <!-- 布局 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <EditText
            android:hint="输入名字"
            android:text="@{userinfo.name}"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <EditText
            android:hint="输入年龄"
            android:text="@{userinfo.age}"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>


</layout>

在build的时候,会扫描项目的所有Module,然后生成java文件和xml文件。
xml文件在目录
/build/intermediates/data_binding_layout_info_type_merge/debug/mergeDebugResources/out

java文件在目录
build/generated/source/kapt/debug/com/hujun/databinding

相关文章

网友评论

      本文标题:DataBinding原理与编译时绑定布局与对象、双向绑定原理

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