【JetPack】数据绑定 DataBinding 简介 ( 使用要求 | Gradle 版本 | 定义数据类 | 定义数据绑定布局 | Activity 数据绑定 | 绑定类生成规则 )(二)

简介: 【JetPack】数据绑定 DataBinding 简介 ( 使用要求 | Gradle 版本 | 定义数据类 | 定义数据绑定布局 | Activity 数据绑定 | 绑定类生成规则 )(二)

3 . 定义实际的布局 : 定义与 <data> 标签平级的布局组件根标签 , 这个布局组件就是原来的根视图 ; 之后的内容就一样了 , 在根视图中 , 定义各种用于 UI 交互的组件 ;


<?xml version="1.0" encoding="utf-8"?>
<!-- 根标签是 layout, 将根布局的命名空间都拷贝到根标签中 -->
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <!-- data 标签中设置要绑定的对象名称 和 对应的类名 -->
    <data>
        <variable name="student" type="kim.hsl.db.Student"/>
    </data>
    <!-- 实际的布局, 被改造前是根标签 -->
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>



4 . 调用变量值 : 在 @{} 中使用布局绑定表达式调用 student 变量的值 , 表达式语法操作与代码基本一致 , 如方位 student 对象的 name 属性 , 使用 @{student.name} 即可 ;


该布局是最终的完全体 , 显示内容是 “姓名 : Tom 年龄 : 18” ;
<?xml version="1.0" encoding="utf-8"?>
<!-- 根标签是 layout, 将根布局的命名空间都拷贝到根标签中 -->
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <!-- data 标签中设置要绑定的对象名称 和 对应的类名 -->
    <data>
        <variable name="student" type="kim.hsl.db.Student"/>
    </data>
    <!-- 实际的布局, 被改造前是根标签 -->
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/hello"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text='@{"姓名 : " + student.name + " 年龄 : " + student.age}'
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>




VI . 数据绑定 使用流程 四 : Activity 数据绑定


1 . 声明 数据绑定类 对象 : 在成员变量中 , 声明数据绑定类对象 ;


/** 数据绑定类 */
    lateinit var binding : ActivityMainBinding



2 . 声明 数据类 对象 : 在成员变量中 , 声明被绑定的数据对象 ;


/** 要绑定的数据类对象 */
lateinit var student : Student



3 . 绑定视图 : 使用 DataBindingUtil 的 setContentView 方法 , 绑定视图 , 获取数据绑定类 对象 ;


/** 绑定视图, 并获取数据绑定类 */
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)


4 . 绑定数据 : 创建 Student 对象 , 设置给 数据绑定类 对象 ;


/** 创建要绑定的数据对象 */
student = Student("Tom", 18)
/** 将要绑定的数据对象设置到数据绑定类中 */
binding.student = student



5 . Activity 完整代码实现 :


package kim.hsl.db
import android.app.Activity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import kim.hsl.db.databinding.ActivityMainBinding
class MainActivity : Activity() {
    /** 要绑定的数据类对象 */
    lateinit var student : Student
    /** 数据绑定类 */
    lateinit var binding : ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        /** 绑定视图, 并获取数据绑定类 */
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        /** 创建要绑定的数据对象 */
        student = Student("Tom", 18)
        /** 将要绑定的数据对象设置到数据绑定类中 */
        binding.student = student
    }
}



VII . 数据绑定类 生成规则


1 . 绑定类 : 数据绑定 与 视图绑定 生成的绑定类是相同的 , 数据绑定类比视图绑定类中多一个被绑定数据变量 ;



2 . 绑定类组件成员名称生成规则 : 组件中的字段也是按照驼峰式命名生成 , 首字母小节 , 中间的字母首字母大写 , 如 id 是 text_view , 生成的成员变量名称是 textView ;


3 . 生成组件字段规则 : 只要在布局文件中定义了 id 属性的组件 , 绑定类中就会为该组件生成相应的字段 ;



① 绑定类字段对应布局 ID : activity_main.xml 布局文件中 , 第一个和第二个 TextView 都定义了 id 分别是 text_view 和 text_view2 ;


② 绑定类生成的字段 : 那么系统会在 ActivityMainBinding 中生成 TextView textView 和 TextView textView2 两个字段 ;


③ 绑定类组件字段访问 : 通过 ActivityMainBinding 对象可以直接访问这两个组件 ;


④ 不生成字段 : 第三个 TextView 没有定义 id 属性 , ActivityMainBinding 中不会生成该组件对应的字段 ;



4 . 生成绑定数据字段规则 : 在 <data> 标签中定义的数据类对象 , 会在绑定类中生成 ;




GitHub 代码示例 : Data_Binding_Demo



目录
相关文章
|
XML 安全 Java
【Jetpack】学穿:DataBinding → 数据绑定 (使用篇)(下)
前面的章节 《【Jetpack】学穿:ViewBinding → 视图绑定》 剥源码的时候就有看到 DataBinding 相关的代码。 ViewBinding(视图绑定) 的作用和原理一言以蔽之: 作用 → 代替findViewById 的同时,还能保证 空安全 和 类型安全,且 支持Java; 原理 → AGP为模块中的每个XML生成绑定类,本质上还是findViewByid,只是自动生成控件实例,并一一对应;
572 0
|
XML 安全 Java
【Jetpack】学穿:DataBinding → 数据绑定 (使用篇)(中)
前面的章节 《【Jetpack】学穿:ViewBinding → 视图绑定》 剥源码的时候就有看到 DataBinding 相关的代码。 ViewBinding(视图绑定) 的作用和原理一言以蔽之: 作用 → 代替findViewById 的同时,还能保证 空安全 和 类型安全,且 支持Java; 原理 → AGP为模块中的每个XML生成绑定类,本质上还是findViewByid,只是自动生成控件实例,并一一对应;
362 0
|
XML 存储 安全
【Jetpack】学穿:DataBinding → 数据绑定 (使用篇)(上)
前面的章节 《【Jetpack】学穿:ViewBinding → 视图绑定》 剥源码的时候就有看到 DataBinding 相关的代码。 ViewBinding(视图绑定) 的作用和原理一言以蔽之: 作用 → 代替findViewById 的同时,还能保证 空安全 和 类型安全,且 支持Java; 原理 → AGP为模块中的每个XML生成绑定类,本质上还是findViewByid,只是自动生成控件实例,并一一对应;
383 0
【JetPack】数据绑定 DataBinding 简介 ( 使用要求 | Gradle 版本 | 定义数据类 | 定义数据绑定布局 | Activity 数据绑定 | 绑定类生成规则 )(二)
【JetPack】数据绑定 DataBinding 简介 ( 使用要求 | Gradle 版本 | 定义数据类 | 定义数据绑定布局 | Activity 数据绑定 | 绑定类生成规则 )(二)
90 0
|
Java API Android开发
【JetPack】数据绑定 DataBinding 简介 ( 使用要求 | Gradle 版本 | 定义数据类 | 定义数据绑定布局 | Activity 数据绑定 | 绑定类生成规则 )(一)
【JetPack】数据绑定 DataBinding 简介 ( 使用要求 | Gradle 版本 | 定义数据类 | 定义数据绑定布局 | Activity 数据绑定 | 绑定类生成规则 )(一)
263 0
【JetPack】数据绑定 DataBinding 简介 ( 使用要求 | Gradle 版本 | 定义数据类 | 定义数据绑定布局 | Activity 数据绑定 | 绑定类生成规则 )(一)
|
Java Android开发
Gradle排除依赖模块的某个类
比如你的老大写了个BaseModule,里面有很多东西,你就没必要造轮子了,但是其实你这个项目中用不到这么多,那就没必要在打包的时候也把多余的代码打进去,但是你又不能删掉,因为很多个模块都依赖这个Base模块,所以你只能用“排除”的方法来去掉多余的代码。
5338 0
|
Java API Android开发
Gradle 1.12用户指南翻译——第五十七章. 编写自定义任务类
其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上的地址:https://github.com/msdx/gradledoc本文翻译所在分支:https://github.com/msdx/gradledoc/tree/1.12。
1047 0
|
Android开发 开发工具 git
在AndroidStudio中配置Gradle进行 “动态编译期间,根据远程服务器地址 ,生成多类安装包”
原文地址:http://www.cnblogs.com/vir56k/p/4763810.html 需求:   在产品开发中,经常需要发布各个版本,每个版本的服务器地址有不同的服务器地址。
1537 0
|
3月前
|
Android开发 开发者
什么是Android Jetpack,它包括哪些组件?
什么是Android Jetpack,它包括哪些组件?
42 0