【JetPack】数据绑定 DataBinding 简介 ( 使用要求 | Gradle 版本 | 定义数据类 | 定义数据绑定布局 | Activity 数据绑定 | 绑定类生成规则 )
文章目錄
- I . 數(shù)據(jù)綁定 簡介
- II . 數(shù)據(jù)綁定 使用前提 ( 環(huán)境支持 )
- III . 數(shù)據(jù)綁定 使用流程 一 : 啟用數(shù)據(jù)綁定
- IV . 數(shù)據(jù)綁定 使用流程 二 : 定義數(shù)據(jù)類
- V . 數(shù)據(jù)綁定 使用流程 三 : 定義數(shù)據(jù)綁定布局
- VI . 數(shù)據(jù)綁定 使用流程 四 : Activity 數(shù)據(jù)綁定
- VII . 數(shù)據(jù)綁定類 生成規(guī)則
GitHub 代碼示例 : Data_Binding_Demo
I . 數(shù)據(jù)綁定 簡介
1 . 數(shù)據(jù)綁定作用 : 不使用 Java 代碼 , 直接在 layout 布局文件 中完成組件的 文本 , 圖片 等數(shù)據(jù) 的設(shè)置 ;
2 . 數(shù)據(jù)綁定 與 視圖綁定 : 視圖綁定僅僅是替代了 Java 代碼中的 findViewById ( ) 操作 , 比視圖綁定更進一步 , 在替代上述操作的基礎(chǔ)上 , 還為其設(shè)置了具體的值 ; 數(shù)據(jù)綁定比視圖綁定功能更強大 ;
II . 數(shù)據(jù)綁定 使用前提 ( 環(huán)境支持 )
1 . 數(shù)據(jù)綁定 ( DataBinding ) 使用前提 :
① 數(shù)據(jù)綁定最小兼容版本 : Android 4.0 , API 版本 14 ;
② Gradle 插件版本 : 1.5.0 以上的版本 ;
2 . Gradle 插件版本 與 Gradle 版本 對應(yīng)關(guān)系 : 推薦使用當前最新配置 ( 2020/04/15 ) , 最新 Gradle 插件版本是 3.6.1 , 最新 Gradle 版本是 5.6.4 ;
① Gradle 插件版本 : 在 Project 下的 build.gradle 中配置 , 如下配置的是 3.6.1 版本的 Gradle 插件 ;
② Gradle 版本 : 在 Project 下的 gradle/wrapper/gradle-wrapper.properties 文件中配置 , 如下配置的是 5.6.4 版本的 Gradle ;
3 . Gradle 插件版本 與 Gradle 版本對應(yīng) 關(guān)系 : 如果對應(yīng)錯了 , Android 應(yīng)用無法編譯 ;
| 1.0.0 - 1.1.3 | 2.2.1 - 2.3 |
| 1.2.0 - 1.3.1 | 2.2.1 - 2.9 |
| 1.5.0 | 2.2.1 - 2.13 |
| 2.0.0 - 2.1.2 | 2.10 - 2.13 |
| 2.1.3 - 2.2.3 | 2.14.1+ |
| 2.3.0+ | 3.3+ |
| 3.0.0+ | 4.1+ |
| 3.1.0+ | 4.4+ |
| 3.2.0 - 3.2.1 | 4.6+ |
| 3.3.0 - 3.3.2 | 4.10.1+ |
| 3.4.0 - 3.4.1 | 5.1.1+ |
| 3.5.0+ | 5.4.1-5.6.4 |
III . 數(shù)據(jù)綁定 使用流程 一 : 啟用數(shù)據(jù)綁定
啟用數(shù)據(jù)綁定 : 在 Module 的 build.gradle 構(gòu)建腳本中 的 android 中配置如下代碼 :
/** 啟用數(shù)據(jù)綁定 */ dataBinding {enabled = true }IV . 數(shù)據(jù)綁定 使用流程 二 : 定義數(shù)據(jù)類
定義數(shù)據(jù)類 :
package kim.hsl.db/** 視圖綁定數(shù)據(jù)類 */ data class Student (var name:String, var age:Int)V . 數(shù)據(jù)綁定 使用流程 三 : 定義數(shù)據(jù)綁定布局
1 . 定義根標簽及命名空間 : 定義 <layout> 根標簽 , 并且將布局文件的命名空間定義在該標簽中 ;
<?xml version="1.0" encoding="utf-8"?><!-- 根標簽是 layout, 將根布局的命名空間都拷貝到根標簽中 --> <layoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"> </layout>2 . 定義對象數(shù)據(jù)標簽 : 使用 <data> 標簽 , 在標簽中定義 <variable> 字標簽 , 在 <variable> 標簽中使用 name 屬性定義變量名 , type 屬性定義類的 包名.類名 全路徑類型名稱 ;
如下 : 定義 kim.hsl.db.Student 類的對象 student , 之后就使用 student 變量名來調(diào)用類中的字段 , 如 student.name 獲取對象的 name 屬性 ;
<?xml version="1.0" encoding="utf-8"?><!-- 根標簽是 layout, 將根布局的命名空間都拷貝到根標簽中 --> <layoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><!-- data 標簽中設(shè)置要綁定的對象名稱 和 對應(yīng)的類名 --><data><variable name="student" type="kim.hsl.db.Student"/></data> </layout>3 . 定義實際的布局 : 定義與 <data> 標簽平級的布局組件根標簽 , 這個布局組件就是原來的根視圖 ; 之后的內(nèi)容就一樣了 , 在根視圖中 , 定義各種用于 UI 交互的組件 ;
<?xml version="1.0" encoding="utf-8"?><!-- 根標簽是 layout, 將根布局的命名空間都拷貝到根標簽中 --> <layoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><!-- data 標簽中設(shè)置要綁定的對象名稱 和 對應(yīng)的類名 --><data><variable name="student" type="kim.hsl.db.Student"/></data><!-- 實際的布局, 被改造前是根標簽 --><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"></androidx.constraintlayout.widget.ConstraintLayout> </layout>4 . 調(diào)用變量值 : 在 @{} 中使用布局綁定表達式調(diào)用 student 變量的值 , 表達式語法操作與代碼基本一致 , 如方位 student 對象的 name 屬性 , 使用 @{student.name} 即可 ;
該布局是最終的完全體 , 顯示內(nèi)容是 “姓名 : Tom 年齡 : 18” ;
<?xml version="1.0" encoding="utf-8"?><!-- 根標簽是 layout, 將根布局的命名空間都拷貝到根標簽中 --> <layoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><!-- data 標簽中設(shè)置要綁定的對象名稱 和 對應(yīng)的類名 --><data><variable name="student" type="kim.hsl.db.Student"/></data><!-- 實際的布局, 被改造前是根標簽 --><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid: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 . 數(shù)據(jù)綁定 使用流程 四 : Activity 數(shù)據(jù)綁定
1 . 聲明 數(shù)據(jù)綁定類 對象 : 在成員變量中 , 聲明數(shù)據(jù)綁定類對象 ;
/** 數(shù)據(jù)綁定類 */lateinit var binding : ActivityMainBinding2 . 聲明 數(shù)據(jù)類 對象 : 在成員變量中 , 聲明被綁定的數(shù)據(jù)對象 ;
/** 要綁定的數(shù)據(jù)類對象 */ lateinit var student : Student3 . 綁定視圖 : 使用 DataBindingUtil 的 setContentView 方法 , 綁定視圖 , 獲取數(shù)據(jù)綁定類 對象 ;
/** 綁定視圖, 并獲取數(shù)據(jù)綁定類 */ binding = DataBindingUtil.setContentView(this, R.layout.activity_main)4 . 綁定數(shù)據(jù) : 創(chuàng)建 Student 對象 , 設(shè)置給 數(shù)據(jù)綁定類 對象 ;
/** 創(chuàng)建要綁定的數(shù)據(jù)對象 */ student = Student("Tom", 18) /** 將要綁定的數(shù)據(jù)對象設(shè)置到數(shù)據(jù)綁定類中 */ binding.student = student5 . Activity 完整代碼實現(xiàn) :
package kim.hsl.dbimport android.app.Activity import android.os.Bundle import androidx.databinding.DataBindingUtil import kim.hsl.db.databinding.ActivityMainBindingclass MainActivity : Activity() {/** 要綁定的數(shù)據(jù)類對象 */lateinit var student : Student/** 數(shù)據(jù)綁定類 */lateinit var binding : ActivityMainBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)/** 綁定視圖, 并獲取數(shù)據(jù)綁定類 */binding = DataBindingUtil.setContentView(this, R.layout.activity_main)/** 創(chuàng)建要綁定的數(shù)據(jù)對象 */student = Student("Tom", 18)/** 將要綁定的數(shù)據(jù)對象設(shè)置到數(shù)據(jù)綁定類中 */binding.student = student} }VII . 數(shù)據(jù)綁定類 生成規(guī)則
1 . 綁定類 : 數(shù)據(jù)綁定 與 視圖綁定 生成的綁定類是相同的 , 數(shù)據(jù)綁定類比視圖綁定類中多一個被綁定數(shù)據(jù)變量 ;
2 . 綁定類組件成員名稱生成規(guī)則 : 組件中的字段也是按照駝峰式命名生成 , 首字母小節(jié) , 中間的字母首字母大寫 , 如 id 是 text_view , 生成的成員變量名稱是 textView ;
3 . 生成組件字段規(guī)則 : 只要在布局文件中定義了 id 屬性的組件 , 綁定類中就會為該組件生成相應(yīng)的字段 ;
① 綁定類字段對應(yīng)布局 ID : activity_main.xml 布局文件中 , 第一個和第二個 TextView 都定義了 id 分別是 text_view 和 text_view2 ;
② 綁定類生成的字段 : 那么系統(tǒng)會在 ActivityMainBinding 中生成 TextView textView 和 TextView textView2 兩個字段 ;
③ 綁定類組件字段訪問 : 通過 ActivityMainBinding 對象可以直接訪問這兩個組件 ;
④ 不生成字段 : 第三個 TextView 沒有定義 id 屬性 , ActivityMainBinding 中不會生成該組件對應(yīng)的字段 ;
4 . 生成綁定數(shù)據(jù)字段規(guī)則 : 在 <data> 標簽中定義的數(shù)據(jù)類對象 , 會在綁定類中生成 ;
GitHub 代碼示例 : Data_Binding_Demo
總結(jié)
以上是生活随笔為你收集整理的【JetPack】数据绑定 DataBinding 简介 ( 使用要求 | Gradle 版本 | 定义数据类 | 定义数据绑定布局 | Activity 数据绑定 | 绑定类生成规则 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【数据挖掘】分类任务简介 ( 分类概念
- 下一篇: 【数据挖掘】决策树算法简介 ( 决策树模