



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】AndroidStudio3.6中使用視圖綁定替代findViewById的方法
從AndroidStudio3.6開始,視圖綁定能夠通過生成綁定對象來替代findViewById,從而可以幫您簡化代碼、移除bug,并且從findViewById的模版代碼中解脫出來。本文梗概騰訊視頻鏈接/x/page/h0931mdo8ly.htmlBilibili視頻鏈接/video/av95393509/在build.gradle中開啟視圖綁定開啟視圖綁定無須引入額外依賴,從AndroidStudio3.6開始,視圖綁定將會(huì)內(nèi)建于AndroidGradle插件中。需要打開視圖綁定的話,只需要在build.gradle文件中配置viewBinding選項(xiàng):在AndroidStudio4.0中,viewBinding變成屬性被整合到了buildFeatures選項(xiàng)中,所以配置要改成:配置完成后,視圖綁定就會(huì)為所有布局文件自動(dòng)生成對應(yīng)的綁定類。無須修改原有布局的XML文件,視圖綁定將根據(jù)您現(xiàn)有的布局自動(dòng)完成所有工作。視圖綁定將會(huì)根據(jù)現(xiàn)有的XML文件,為Module內(nèi)所有的布局文件生成綁定對象。您可以在任何需要填充布局的地方使用綁定對象,比如Fragment、Activity、甚至是RecyclerViewAdapter(或者說是ViewHolder中)。在Activity中使用視圖綁定假如您有一個(gè)布局文件名叫activity_awesome.xml,其中包含了一個(gè)按鈕和兩個(gè)文本視圖。視圖綁定會(huì)為這個(gè)布局生成一個(gè)名叫ActivityAwesomeBinding的類,布局文件中所有擁有id的視圖,都會(huì)在這個(gè)類中有一個(gè)對應(yīng)的屬性:△在Activity中使用視圖綁定使用視圖綁定時(shí),無須再調(diào)用findViewById方法,只要直接調(diào)用綁定對象中的對應(yīng)屬性即可。布局的根視圖(無論有沒有id)都會(huì)自動(dòng)生成一個(gè)名為root的屬性。在Activity的onCreate方法中,要將root傳入setContentView方法,從而讓Activity可以使用綁定對象中的布局。一個(gè)常見的錯(cuò)誤用法是:在開啟了視圖綁定的同時(shí),依然在setContentView(...)
中傳入布局的id而不是綁定對象。這將造成同一布局被填充兩次,同時(shí)監(jiān)聽器也會(huì)被添加到錯(cuò)誤的布局對象中。解決方案:在Activity中使用視圖綁定時(shí),一定要將綁定對象的root屬性傳入setContentView()方法中。使用綁定對象編寫安全性更佳的代碼findViewById是許多用戶可見bug的來源:我們很容易傳入一個(gè)布局中根本不存在的id,從而導(dǎo)致空指針異常而崩潰;由于此方法類型不安全,也很容易使人寫出像findViewById<TextView>(R.id.image)這樣的,導(dǎo)致類型轉(zhuǎn)換錯(cuò)誤的代碼。為了解決這些問題,視圖綁定把findViewById替換成了更加簡潔和安全的實(shí)現(xiàn)。視圖綁定有下面兩個(gè)特性:
由于生成的綁定類是普通的Java類,并且其中添加了Kotlin友好的注解,所以Java和Kotlin都可以使用視圖綁定。視圖綁定生成的代碼是怎樣的如前文所說,視圖綁定會(huì)生成一個(gè)包含替代findViewById功能的Java類。它會(huì)為Module下的每一個(gè)布局的XML文件生成一個(gè)對應(yīng)的綁定對象,并根據(jù)源文件為其命名,比如activity_awesome.xml對應(yīng)的綁定對象為ActivityAwesomeBinding.java。生成代碼的邏輯被優(yōu)化為,當(dāng)您在AndroidStudio中編輯XML布局文件時(shí),只會(huì)更新所修改布局對應(yīng)的綁定對象。同時(shí)這些工作會(huì)在內(nèi)存中運(yùn)行,從而使這個(gè)過程可以迅速完成。這意味著您的修改會(huì)立即反映在綁定對象中,而無須等待或者重新構(gòu)建工程。AndroidStudio被優(yōu)化為可以在您編輯過XML布局文件后立即更新綁定對象。讓我們通過一個(gè)示例XML布局所生成的代碼,來了解一下視圖綁定究竟生成了什么?!饕晥D綁定生成的屬性??梢钥吹剿鼈兌际穷愋桶踩约翱瞻踩囊晥D綁定會(huì)根據(jù)每個(gè)擁有id的視圖生成類型正確的屬性。他也會(huì)為根布局生成rootView屬性并通過getRoot暴露給您。視圖綁定沒有添加任何額外的邏輯,他只是把視圖屬性暴露給您,從而幫您在不使用findViewById的情況下也能調(diào)用它們。這樣一來便保證了生成文件簡潔性(當(dāng)然也避免了拖慢構(gòu)建速度)。如果您正在使用Kotlin,視圖綁定的生成類也已經(jīng)對互操作進(jìn)行了優(yōu)化。通過@Nullable和@NonNull注解的使用,Kolin可以正確的將屬性暴露為空安全類型。如果想要了解更多關(guān)于兩種語言的互操作問題,請查閱文檔:在Kotlin中調(diào)用Java。視圖綁定會(huì)生成inflate方法作為生成一個(gè)綁定對象實(shí)例的主要方式。在ActivityAwesomeBinding.java中,視圖綁定生成了一個(gè)只有一個(gè)參數(shù)的inflate方法,該方法通過將parent設(shè)定為空值來指定當(dāng)前視圖不會(huì)綁定到父視圖中;視圖綁定也暴露了一個(gè)有三個(gè)參數(shù)的inflate方法,來讓您在需要的時(shí)候傳入parent和attachToParent參數(shù)。真正神奇的地方是bind方法的調(diào)用。這里會(huì)填充視圖并綁定所有的屬性,同時(shí)做一些錯(cuò)誤檢測并生成清晰的錯(cuò)誤提示。△自動(dòng)生成的bind方法的簡化版本bind是綁定對象中最復(fù)雜的一個(gè)方法,它通過調(diào)用findViewById來綁定每個(gè)視圖。既然編譯器可以通過XML布局文件知道每個(gè)屬性的類型和為空的可能性,那他就可以安全的調(diào)用findViewById。請注意,視圖綁定生成的真正的bind方法要來的更長,并且其中使用了一個(gè)標(biāo)記break語句來優(yōu)化字節(jié)碼,您可以查看JakeWharton撰寫的這篇文章來了解更多優(yōu)化有關(guān)的內(nèi)容。在每個(gè)綁定對象中,都會(huì)暴露三個(gè)靜態(tài)方法來創(chuàng)建綁定對象實(shí)例,下面是每個(gè)方法使用場景的簡要說明:示例XML布局
/objcode/3ee41edae40ba13f13da569b8f27333a
在Kotlin中調(diào)用Java
/docs/reference/java-interop.html#null-safety-and-platform-types
JakeWharton撰寫的這篇文章
/optimizing-bytecode-by-manipulating-source-code/對使用<include>標(biāo)簽引入的布局會(huì)發(fā)生什么影響前面已經(jīng)講過,視圖綁定會(huì)為Module下的每一個(gè)布局文件生成一個(gè)綁定對象,這個(gè)說法在布局文件被另一個(gè)布局文件使用<include>引入時(shí)依然適用?!饕晥D綁定中使用include標(biāo)簽的示例注意:include標(biāo)簽下有一個(gè)id。在使用引入布局的時(shí)候,視圖綁定會(huì)創(chuàng)建一個(gè)被引入布局綁定對象的引用。注意<include>標(biāo)簽有一個(gè)id:android:id="@+id/includes"。這里的邏輯跟使用普通視圖一樣,<include>標(biāo)簽也需要有一個(gè)id才能在綁定對象中生成對應(yīng)的屬性。include標(biāo)簽必須有一個(gè)id,才能生成對應(yīng)的屬性。視圖綁定會(huì)在ActivityAwesomeBinding中生成一個(gè)IncludedButtonsBinding的引用。結(jié)合數(shù)據(jù)綁定來使用視圖綁定視圖綁定只是findViewById的取代方案,如果您希望在XML中自動(dòng)綁定視圖,可以使用數(shù)據(jù)綁定庫。數(shù)據(jù)綁定和視圖綁定可以生成同樣的組件,它們可以同時(shí)工作。在兩者都被開啟時(shí),使用<layout>標(biāo)簽的布局會(huì)由數(shù)據(jù)綁定來生成綁定對象;而其余的布局則由視圖綁定生成綁定對象。您可以在同一Module中同時(shí)使用數(shù)據(jù)綁定和視圖綁定。我們之所以開發(fā)視圖綁定作為數(shù)據(jù)綁定的補(bǔ)充,是因?yàn)樵S多開發(fā)者反映說,希望有一個(gè)輕量的解決方案,能在數(shù)據(jù)綁定之外替代findViewById——視圖綁定提供的正是這一功能。數(shù)據(jù)綁定
/topic/libraries/data-binding視圖綁定對比Kotlin合成方法與ButterKnife關(guān)于視圖綁定,一個(gè)最常見的問題是:"我是否應(yīng)該用視圖綁定替代Kotlin合成方法或ButterKnife?"二者都是目前十分成功的組件庫,有許多應(yīng)用使用它們解決findViewById的問題。對于大多數(shù)應(yīng)用來說,我們推薦嘗試使用視圖綁定來替代這兩個(gè)庫,因
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度退股及員工持股計(jì)劃合同
- 個(gè)人股權(quán)轉(zhuǎn)讓合同2025年度含業(yè)績對賭條款
- 二零二五年度臨時(shí)項(xiàng)目經(jīng)理職務(wù)聘用與成果轉(zhuǎn)化合同
- 二零二五年度旅游團(tuán)隊(duì)保險(xiǎn)責(zé)任免除聲明
- 電線電纜購銷合同
- 管理層勞動(dòng)合同工資
- 個(gè)人數(shù)字資產(chǎn)管理協(xié)議
- 全新池塘出租協(xié)議
- 月餅產(chǎn)品代銷合同
- 鄉(xiāng)村旅游發(fā)展策略與實(shí)施方案
- 體育競賽的組織與編排
- 動(dòng)靜脈內(nèi)瘺的圍手術(shù)期護(hù)理-課件
- reaxys使用介紹課件
- 工程建設(shè)項(xiàng)目管理培訓(xùn)教材課件
- 11-化學(xué)動(dòng)力學(xué)基礎(chǔ)-2-考研試題資料系列
- 《簡愛》課本劇劇本
- 社區(qū)獲得性肺炎臨床路徑
- 產(chǎn)品品質(zhì)檢驗(yàn)流程標(biāo)準(zhǔn)規(guī)范模板()
- GB∕T 7260.40-2020 不間斷電源系統(tǒng) UPS 第4部分:環(huán)境 要求及報(bào)告
- 安全文明施工管理(EHS)方案(24頁)
- 水廠項(xiàng)目基于BIM技術(shù)全生命周期解決方案-城市智慧水務(wù)講座課件
評論
0/150
提交評論