Kotlin的android擴充:對findViewById說再見(KAD 04),kotlinfindviewbyid
作者:Antonio Leiva
時間:Dec 12, 2016
原文連結:http://antonioleiva.com/kotlin-android-extensions/
你也許已厭倦日複一日使用findViewById編寫Android視圖。或是你可能放棄它轉而使用著名的Butterknife庫。那麼你將會喜愛Kotlin的Android擴充。
Kotlin的Android擴充
Kotlin的Android擴充是Kotlin外掛程式的正規外掛程式之一,它無縫覆蓋Activities的視圖,Fragments y視圖。
讓我們看看它是怎樣簡單。
在我們代碼中整合Kotlin的Android擴充
雖然你要使用一外掛程式時可以將其整合到代碼中,但是你還是需要在Android模組中填加額外的apply:
1 apply plugin: 'com.android.application'2 apply plugin: 'kotlin-android'3 apply plugin: 'kotlin-android-extensions'
這些都是你需要添加的。這樣你就準備好使用它。
在Activity或Fragment中覆蓋視圖
此時,在你的Activity或Fragment中覆蓋視圖與直接在XML中用視圖id定義一樣方便。
想象你有這樣的XML:
1 <?xml version="1.0" encoding="utf-8"?> 2 <FrameLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent"> 6 7 <TextView 8 android:id="@+id/welcomeMessage" 9 android:layout_width="wrap_content"10 android:layout_height="wrap_content"11 android:layout_gravity="center"12 android:text="Hello World!"/>13 14 </FrameLayout>
如你所見,TestView有welcomeMessage id。
只需在你的MainActivity這樣編寫:
1 override fun onCreate(savedInstanceState: Bundle?) {2 super.onCreate(savedInstanceState)3 setContentView(R.layout.activity_main)4 5 welcomeMessage.text = "Hello Kotlin!"6 }
為了能夠使用它,你需要專門import(這句我寫在下面),而且IDE能夠自動添加引入(import)它。這不是很容易嗎!
import kotlinx.android.synthetic.main.activity_main.*
外掛程式產生代碼能夠儲存視圖緩衝(cache),這樣你再次訪問視圖時,就不需要另一個findViewById。
由一個視圖覆蓋其它視圖
我們有這樣的視圖:
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 android:orientation="vertical" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent"> 5 6 <ImageView 7 android:id="@+id/itemImage" 8 android:layout_width="match_parent" 9 android:layout_height="200dp"/>10 11 <TextView12 android:id="@+id/itemTitle"13 android:layout_width="match_parent"14 android:layout_height="wrap_content"/>15 16 </LinearLayout>
如你在其內添加adapter。
你只需用這個外掛程式,就可直接存取子視圖:
1 val itemView = ...2 itemView.itemImage.setImageResource(R.mipmap.ic_launcher)3 itemView.itemTitle.text = "My Text"
儘管外掛程式也協助你填寫了import,不過這類有一點點不同:
import kotlinx.android.synthetic.main.view_item.view.*
對此有一些事情你需要知道:
但是,你只要仔細利用它,它還是非常有用的工具。
結論
你已經知道怎樣在Kotlin中方便的處理Android視圖。用一個簡單的外掛程式,我們就可以在擴充後忽略所有那些涉及視圖恢複的糟糕代碼。這外掛程式將按照我們的要求特性產生沒有任何問題的正確的類型。