Android?JetPack組件的支持庫Databinding詳解
簡介
DataBinding 是 Google 在 Jetpack 中推出的一款數(shù)據(jù)綁定的支持庫,利用該庫可以實現(xiàn)在頁面組件中直接綁定應(yīng)用程序的數(shù)據(jù)源。使其維護起來更加方便,架構(gòu)更明確簡介。
DataBinding 唯一的作用,也是他的使命,就是綁定數(shù)據(jù),以及所有的支持庫,本質(zhì)上都是為了支持這個功能。綁定一詞有兩種解釋,第一是將數(shù)據(jù)綁定在 UI 元素;第二是將 UI 上的數(shù)據(jù)綁定到對應(yīng)的數(shù)據(jù)模型,還支持對數(shù)據(jù)及 UI 的變動觀察,其中一個發(fā)生變動就需要同步到另一個上去。
啟用databinding
首先設(shè)置使用 Databinding,在 app module 的 build.gradle 中添加如下代碼即可:
android {
...
dataBinding {
enabled = true
}
}
布局xml
根結(jié)點必須為<layout>,只能存在一個<data>和一個直接子View結(jié)點。
variable (變量標簽)
變量的屬性名name不能包含_下劃線,否則再kt文件里會找不到變量,有時可能需要指定自定義類型,可以使用 import 語法來導入類,以及使用 alias 設(shè)置別名
<data>
<import type="com.example.databinding.Entity.User"/>
<import type="com.example.databinding.Entity.user.User" alias="member"/>
<variable
name="user"
type="User" />
<variable
name="member"
type="member" />
</data>當需要使用兩個同名但不同包名的類,可以使用alias別名屬性
data (數(shù)據(jù)標簽)
它有個屬性class,可以自定義DataBinding生成的類名及路徑
<data class="ObservableDataBinding"> </data>
@{}表達式
運算符
| 運算類型 | 運算符 |
|---|---|
| 算術(shù)運算符 | + - / * % |
| 字符串連接運算符 | + |
| 邏輯運算符 | && |
| 二元運算符 | & |
| 一元運算符 | + - ! ~ |
| 移位運算符 | >> >>> << |
| 三元運算符 | == > < >= <= |
| 分組運算符 | () |
關(guān)鍵字
instanceof
字符、字符串、數(shù)字、null
類型轉(zhuǎn)換
方法調(diào)用
字段訪問
數(shù)組訪問 []
綁定普通數(shù)據(jù)
DataBinding 可以綁定普通數(shù)據(jù)對象(非 Observable/LiveData)
<data>
<import type="java.lang.String"/>
<variable name="content" type="String" />
</data>
綁定可觀察數(shù)據(jù)
綁定可觀察數(shù)據(jù)意味著當數(shù)據(jù)變化時 UI 會跟著一起變化,綁定可觀察數(shù)據(jù)有三種方式:objects、fields 和 collections.
對單個變量的綁定-fields
對于一些數(shù)據(jù)類只需要其中幾個字段支持可觀察,那么可以使用這種方式來創(chuàng)建可觀察數(shù)據(jù)
data class User(
val name: ObservableField<String>,
val likes: ObservableInt
)
基本數(shù)據(jù)類型直接使用對應(yīng)的包裝類
| 基本數(shù)據(jù)類型 | 包裝類 |
|---|---|
| boolean | ObservableBoolean |
| byte | ObservableByte |
| char | ObservableChar |
| short | ObservableShort |
| int | ObservableInt |
| long | ObservableLong |
| float | ObservableFloat |
| double | ObservableDouble |
引用類型使用帶有泛型參數(shù)的 ObservableField 類來創(chuàng)建
val name: ObservableField<String>
對集合的綁定-collections
<data>
<import type="android.databinding.ObservableList"/>
<variable name="user" type="ObservableList<Object>"/>
</data>
<TextView android:text="@{user[index]}" ... />
可以直接使用 [] 運算符( list[0] )獲取對應(yīng)位置的元素
綁定對象-objects
需要綁定的數(shù)據(jù)實體類繼承 BaseObservable
class Person : BaseObservable() {
@get:Bindable
var country: String = ""
set(value) {
field = value
notifyPropertyChanged(BR.country)
}
@get:Bindable
var sex: String = ""
set(value) {
field = value
notifyPropertyChanged(BR.sex)
}
}需要支持可觀察的數(shù)據(jù)上添加 @get:Bindable 注解,然后重寫 set 方法,在其中調(diào)用 notifyPropertyChanged 方法表示更新該數(shù)據(jù),BR 是自動生成的,包名跟當前包名一致,會根據(jù) Bindable 注解的變量生成對應(yīng)的值;也可以調(diào)用 notifyChange() 方法更新所有數(shù)據(jù)
綁定LiveData
LiveData也支持數(shù)據(jù)綁定
<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
<variable name="desc"
type="androidx.lifecycle.MutableLiveData<String>" />
</data>
...
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@{desc}" />
</layout>我們可以直接將 LiveData 賦值給 text,然后綁定數(shù)據(jù)
val desc = MutableLiveData<String>() binding.desc = desc
雙向綁定
單向綁定是指數(shù)據(jù)變化后更新 UI,而雙向綁定是指其中任意一個變化后都會同步更新到另一個。
雙向綁定使用 @={} 表達式來實現(xiàn):
<data>
...
<variable
name="input"
type="androidx.databinding.ObservableField<String>" />
</data>
...
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@={input}"/>到此這篇關(guān)于Android JetPack組件的支持庫Databinding詳解的文章就介紹到這了,更多相關(guān)Android JetPack組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android 高仿微信轉(zhuǎn)賬金錢輸入框規(guī)則
這篇文章主要介紹了Android 高仿微信金錢輸入框規(guī)則的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-12-12
Android PopupWindow實現(xiàn)遮罩層效果
這篇文章主要為大家詳細介紹了Android PopupWindow實現(xiàn)遮罩層效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-10-10
Android 使用VideoView播放MP4的簡單實現(xiàn)
這篇文章主要介紹了Android 使用VideoView播放MP4的簡單實現(xiàn),實現(xiàn)簡單的播放功能,播放手機本地的MP4文件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05
Android Camera2 實現(xiàn)預(yù)覽功能
最近在做一些關(guān)于人臉識別的項目,需要用到 Android 相機的預(yù)覽功能。今天小編通過本文給大家分享Android Camera2 實現(xiàn)預(yù)覽功能,感興趣的朋友跟隨小編一起看看吧2018-11-11
解析Android開發(fā)中多點觸摸的實現(xiàn)方法
多點觸摸(MultiTouch),指的是允許計算機用戶同時通過多個手指來控制圖形界面的一種技術(shù)。與多點觸摸技術(shù)相對應(yīng)的就是單點觸摸,單點觸摸的設(shè)備已經(jīng)有很多年了,小尺寸的有觸摸式的手機,大尺寸的最常見的就是銀行里的ATM機和排隊查詢機等等2013-05-05
Android內(nèi)核源碼 在Ubuntu上下載,編譯,安裝
本文主要介紹Android內(nèi)核源碼,想學習深入研究Android的朋友肯定要看看Android內(nèi)核知識的,這里對下載Android內(nèi)核源代碼的下載,安裝,編譯做了詳細的介紹,有興趣的小伙伴可以參考下2016-08-08

