Android databinding的接入使用與詳解(一)
一、介紹
DataBinding 是Google Android組件框架,管理view和data之間進行綁定。DataBinding主要管理數(shù)個布局文件,這樣我們就不用去實例化layout的view。直接通過DataBindingUitl來完成初始化。
這樣可以精簡代碼,也減少工作量,避免view的空指針等。大量減少Activity/fragment模塊內(nèi)的代碼,DataBinding 將數(shù)據(jù)實現(xiàn)單向或雙向綁定到 layout 文件中,有助于防止內(nèi)存泄漏,而且能自動進行空檢測以避免空指針。
二、如何使用
1、引入DataBinding的庫
只要在模塊的build文件下,android{}節(jié)點內(nèi),新增如下
dataBinding {
enabled = true
}
這樣就開啟了dataBinding庫,同步一下項目,將庫同步到本地
2、布局的創(chuàng)建與布局文件生成
1.新建一個布局文件叫:layout_databinding_simple
關(guān)于DataBinding綁定layout的有兩種方式
第一種:IDE自動完成
將鼠標(biāo)移到布局代碼上,會有黃色燈提示,然后選擇Convert to data binding layout
IDE工具將會把layout的布局自動完成轉(zhuǎn)碼


第二種:手動完成
把根布局換成layout,然后原來的root布局不變,在布局頂部新增data節(jié)點
3、布局文件生成對應(yīng)的代碼文件
布局設(shè)置好后,IDE會自動生成對應(yīng)的文件
layout name:layout_databinding_simple
生成文件名:LayoutDatabindingSimpleBinding,格式就是布局文件名后綴接Binding
注意:關(guān)于這個文件生成,好多技術(shù)博客并沒有介紹,只是簡單的說了一句,導(dǎo)致好多新手找不到后綴為Binding的文件。

手動設(shè)置data生成的文件名
只要在data節(jié)點下,設(shè)置class的name,data會生成用戶自定義的文件,否則會采用系統(tǒng)默認(rèn)方法。
lateinit var data:MyTestData;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
data=DataBindingUtil.setContentView(this, R.layout.layout_databind_data)
}
4、加載布局文件,生成對應(yīng)的控制器
通過DataBindingUtil工具類完成view的設(shè)置與加載
var databinding = DataBindingUtil.setContentView(
this,
R.layout.layout_databinding_simple
)
1.setContentView
T:泛型直接傳布局layout生成的對應(yīng)類LayoutDatabindingSimpleBinding,
加載完后,view 已完成了初始化,包括內(nèi)部,直接通過databinding管理view和data
5、ViewDataBinding介紹
ViewDataBinding是view和data的管理類,如果你在
如果你在layout中有一個TextView id為 textname,那么直接就可以databinding.textname獲取對象
如果你在layout data數(shù)據(jù)節(jié)點下有一個name 為name的節(jié)點,可以通過databinding.setName()設(shè)置數(shù)據(jù)源
在layout中綁定的數(shù)據(jù),都是通過ViewDataBinding來設(shè)置與更新的
1.更新數(shù)據(jù)
2.獲取view
獲取的view,直接關(guān)聯(lián)到對應(yīng)的id,如果沒有申明id,那么將不會出現(xiàn)在binding中
5、數(shù)據(jù)綁定
數(shù)據(jù)源的綁定至關(guān)重要,離開數(shù)據(jù)源,view也沒有什么實際價值。
如何簡單的綁定數(shù)據(jù)源呢?
1.設(shè)置數(shù)據(jù)源
簡單類型,復(fù)雜類型,用戶自定義,簡單類型,在Java.lang包下,無須導(dǎo)入,可以直接使用,非簡單內(nèi)容,在使用時都需要導(dǎo)入對應(yīng)的包,如下:
data節(jié)點下有兩個
1.import :導(dǎo)入變量的解決路徑,和包中引入是一個概念
import是導(dǎo)致類,提供給variable使用,但是import也可以給導(dǎo)入的類提供自定義變量名:alias
alias:是解決import自定義變量名。我們知道,相同包名下,不可以出現(xiàn)同一文件名,如果我們在不同的包名下都有Data類,通過import導(dǎo)入到xml布局,發(fā)現(xiàn)類名已存在,這時我們通過alias自定義一個變量名即可解決。
2.variable:變量的申明,name=定義名稱,type:類型
2.view數(shù)據(jù)綁定
如果view的數(shù)據(jù)需要綁定,那么數(shù)據(jù)源來源于data節(jié)點下的設(shè)置。
綁定數(shù)據(jù)的格式:@{變量}
1.綁定復(fù)雜數(shù)據(jù) :@{person.name}
2.簡單直接引用data name即可
三、錯誤處理
如果出現(xiàn)以下錯誤,在生成的文本中

這是因為layout的布局生成對應(yīng)的java或者kt文件失敗。因為layout的data節(jié)點或者view在引用時出現(xiàn)錯誤,
排查
1、刪除view中數(shù)據(jù)的引用@{}
刪除數(shù)據(jù)關(guān)聯(lián),然后同步數(shù)據(jù),看是否排查完
2、data節(jié)點數(shù)據(jù)引用出錯
第一步排查完還沒有解除,開始排查data節(jié)點,注銷復(fù)雜的數(shù)據(jù)類型,查看variable 節(jié)點下的type是否可以關(guān)聯(lián)到代碼,如果關(guān)聯(lián)不到,說明type類型有誤
第二看import是否正確,直接通過ide關(guān)聯(lián)代碼,如果能正常跳轉(zhuǎn)說明關(guān)聯(lián)正常。
以上排查完后,再同步一下ide工具,重新生成對應(yīng)的文件即可。
本文僅代表作者觀點,版權(quán)歸原創(chuàng)者所有,如需轉(zhuǎn)載請在文中注明來源及作者名字。
免責(zé)聲明:本文系轉(zhuǎn)載編輯文章,僅作分享之用。如分享內(nèi)容、圖片侵犯到您的版權(quán)或非授權(quán)發(fā)布,請及時與我們聯(lián)系進行審核處理或刪除,您可以發(fā)送材料至郵箱:service@tojoy.com






