網站首頁 編程語言 正文
簡介
DataBinding 是 Google 在 Jetpack 中推出的一款數據綁定的支持庫,利用該庫可以實現在頁面組件中直接綁定應用程序的數據源。使其維護起來更加方便,架構更明確簡介。
DataBinding 唯一的作用,也是他的使命,就是綁定數據,以及所有的支持庫,本質上都是為了支持這個功能。綁定一詞有兩種解釋,第一是將數據綁定在 UI 元素;第二是將 UI 上的數據綁定到對應的數據模型,還支持對數據及 UI 的變動觀察,其中一個發生變動就需要同步到另一個上去。
啟用databinding
首先設置使用 Databinding,在 app module 的 build.gradle 中添加如下代碼即可:
android {
? ? ...
? ? dataBinding {
? ? ? ? enabled = true
? ? }
}
布局xml
根結點必須為<layout>,只能存在一個<data>和一個直接子View結點。
variable (變量標簽)
變量的屬性名name不能包含_下劃線,否則再kt文件里會找不到變量,有時可能需要指定自定義類型,可以使用 import 語法來導入類,以及使用 alias 設置別名
<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 (數據標簽)
它有個屬性class,可以自定義DataBinding生成的類名及路徑
<data class="ObservableDataBinding"> </data>
@{}表達式
運算符
運算類型 | 運算符 |
---|---|
算術運算符 | + - / * % |
字符串連接運算符 | + |
邏輯運算符 | && |
二元運算符 | & |
一元運算符 | + - ! ~ |
移位運算符 | >> >>> << |
三元運算符 | == > < >= <= |
分組運算符 | () |
關鍵字
instanceof
字符、字符串、數字、null
類型轉換
方法調用
字段訪問
數組訪問 []
綁定普通數據
DataBinding 可以綁定普通數據對象(非 Observable/LiveData)
<data> <import type="java.lang.String"/> <variable name="content" type="String" /> </data>
綁定可觀察數據
綁定可觀察數據意味著當數據變化時 UI 會跟著一起變化,綁定可觀察數據有三種方式:objects
、fields
和 collections
.
對單個變量的綁定-fields
對于一些數據類只需要其中幾個字段支持可觀察,那么可以使用這種方式來創建可觀察數據
data class User( val name: ObservableField<String>, val likes: ObservableInt )
基本數據類型直接使用對應的包裝類
基本數據類型 | 包裝類 |
---|---|
boolean | ObservableBoolean |
byte | ObservableByte |
char | ObservableChar |
short | ObservableShort |
int | ObservableInt |
long | ObservableLong |
float | ObservableFloat |
double | ObservableDouble |
引用類型使用帶有泛型參數的 ObservableField 類來創建
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] )獲取對應位置的元素
綁定對象-objects
需要綁定的數據實體類繼承 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) } }
需要支持可觀察的數據上添加 @get:Bindable 注解,然后重寫 set 方法,在其中調用 notifyPropertyChanged 方法表示更新該數據,BR 是自動生成的,包名跟當前包名一致,會根據 Bindable 注解的變量生成對應的值;也可以調用 notifyChange() 方法更新所有數據
綁定LiveData
LiveData也支持數據綁定
<?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,然后綁定數據
val desc = MutableLiveData<String>() binding.desc = desc
雙向綁定
單向綁定是指數據變化后更新 UI,而雙向綁定是指其中任意一個變化后都會同步更新到另一個。
雙向綁定使用 @={} 表達式來實現:
<data> ... <variable name="input" type="androidx.databinding.ObservableField<String>" /> </data> ... <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@={input}"/>
原文鏈接:https://blog.csdn.net/qq_35892584/article/details/126012838
相關推薦
- 2022-03-09 C語言直接插入排序算法介紹_C 語言
- 2022-07-23 Go語言學習筆記之文件讀寫操作詳解_Golang
- 2022-05-22 jQuery常用事件方法mouseenter+mouseleave+hover_jquery
- 2022-08-10 Qt利用DOM類實現讀取xml文件_C 語言
- 2022-08-15 Python類的定義繼承調用比較方法技巧_python
- 2022-05-10 C++構造函數+復制構造函數+重載等號運算符調用_C 語言
- 2022-06-29 Oracle去除重復數據_oracle
- 2022-09-15 C/C++?左移<<,?右移>>的作用及說明_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支