DataBingding個人使用很久了,覺得很好用且方便,讓自己的代碼更加簡單且少,讀取來更有可讀性。建議還未入手的趕緊用起來,真的是方便快捷簡單。常規用法很簡單,我將使用中需要注意的地方進行一下總結和歸納。本篇文章適合DataBinding的進階和擴展學習。DataBinding的基礎學習地址爲:DataBinding中文官方文檔
使用注意細節
雖然DataBinding使用簡單,但是還有些需要注意的地方,我將在下面意義列舉出來。
目錄fa
背景和使用限制
早在2015谷歌 I/O大會上就已提出DataBinding。如下是2018年google I/O大會,發佈的AAC及其他的圖。在2019的I/O 大會中AAC 有了新的趨勢和改變CameraX、SavedState for ViewModel、Jetpack Compose。
數據綁定庫既具有靈活性又具有廣泛的兼容性—它是一個支持庫,因此您可以將其與所有Android平臺以及Android 2.1(API級別7+)一起使用。同時要滿足Android Gradle 1.5.0-alpha1或更高版本的插件。
DataBinDing的優點
1.再也不需要編寫findViewById了,比butterknife好用多了
2.實時監測數據,自動刷新控件顯示
dataBinding的本身是對View層狀態的一種觀察者模式的實現。DataBinding採用了觀察者模式,雙向binding的使用需要防止死循環造成ANR,解決方案是需要判斷前後兩次的值是否一樣。
針對每個Activity或者Fragment的佈局,在編譯階段,會自動生成一個ViewDataBinding類的對象,該對象持有Activity要展示的數據和佈局中的各個view的引用。同時還有如下優勢:將數據分解到各個view、在UI線程上更新數據、監控數據的變化,實時更新,這樣一來,你要展示的數據已經和展示它的佈局緊緊綁定在了一起。
如何配置
首先在module的build.gradle中配置如下
上面的配置滿足了Java形式的支持,如果你是需要支持在kotlin中使用Databinding,則需要在module的build.gradle中繼續配置
爲什麼配置了 dataBinding{enabled = true}之後就可以使用dataBinding方式進行開發了?
Android Studio中是依靠gradle來管理項目的,在創建一個項目時,從開始創建一直到創建完畢,整個過程是需要執行很多個gradle task的,這些task有很多是系統預先幫我們定義好的,比如build task,clean task等,DataBinding相關的task也是系統預先幫我們定義好的,但是默認情況下,DataBinding相關的task在task列表中是沒有的,因爲我們沒有開啓dataBinding,但是一旦我們通過 dataBinding{enabled = true}的方式開啓DataBinding之後,DataBinding相關的task就會出現在task列表中,每當我們執行編譯之類的操作時,就會執行這些dataBinding Task, 這些task的作用就是檢查並生成相關dataBinding代碼,比如dataBindingExportBuildInfoDebug這個task就是用來導出debug模式下的build信息的。
ActivityMainBinding這個類從哪來的?
通過第一個問題的解釋,我們也就知道了ActivityMainBinding這個類其實是系統幫我們自動生成的。
但是如果你在實際編寫代碼的過程中,你會發現並沒有執行編譯、運行之類等操作,ActivityMainBinding這個類就直接能用了,竟然還有這種操作?其實是Android Studio 這個IDE自動幫我們做了這一步,在默認情況下,系統會使用Android Studio爲我們自動生成databinding相關的代碼,但是這種方式生成的代碼不能調試,如果你想通過點擊ActivityMainBinding跳轉到它的源碼中,你會發現並不能如你所願,而是會跳轉到對應的佈局文件中。那麼如果我們確實要查看ActivityMainBinding的源碼並且還想調試,我們就需要通過另外一種方式:手動編譯代碼。這兩種方式可以通過Android Studio的設置面板修改。
符號轉義
在我們使用過程中,有些地方是需要使用轉義字符的,如:
這樣會報編譯錯誤,我們需要將<>進行轉義表示
顯示結果 | 描述 | 轉義字符 | 十進制 |
---|---|---|---|
空格 |  ; |  ; | |
< | 小於號 | <; | <; |
> | 大於號 | >; | >; |
& | 與號 | &; | &; |
" | 引號 | "; | "; |
‘ | 撇號 | &apos; | '; |
× | 乘號 | ×; | ×; |
÷ | 除號 | ÷; | ÷; |
與DataBinding技術類似的方法還有ViewBinding、Rxbinding。
`該篇博客純屬個人觀點和見解,如有錯誤懇請留言指正,萬分感激!`