【Kotlin 1.3】findViewById()的四種方式
在Android的一般教科書上,一定會說到findViewById()這個函式,但是到了kotlin成為官方語言之後,還多了其它幾個方式去做處理,讓程式越來越好維護,語意越來越清晰,現在我們就來看看有那些方式吧。
畫面
- 這裡就拉個Button跟EditView來做說明
findViewById()的四種方式
- 主程式
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
private var myButtonForID: Button? = null
private var myEditTextForID: EditText? = null
private lateinit var myButtoForLateInit: Button
private lateinit var myEditTextForLateInit: EditText
private val myButtonForLazy by bindView<Button>(R.id.myButton)
private val myEditTextForLazy by bindView<Button>(R.id.myEditText)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initElements()
initElementsForLateInit()
initElementsForExtensions()
}
}
利用findViewById()初始化元件
- 利用findViewById()初始化元件,這個就是最基本的方式,在使用java寫的時候也可以使用
class MainActivity : AppCompatActivity() {
/// ① 利用findViewById()初始化元件
private fun initElements() {
myButtonForID = findViewById<Button>(R.id.myButton)
myEditTextForID = findViewById<EditText>(R.id.myEditText)
}
}
利用lateinit延遲初始化元件
- 主要是利用「lateinit」這個修飾字來處理
class MainActivity : AppCompatActivity() {
/// ② 利用lateinit延遲初始化元件
private fun initElementsForLateInit() {
myButtoForLateInit = findViewById<Button>(R.id.myButton)
myEditTextForLateInit = findViewById<EditText>(R.id.myEditText)
}
}
利用lazy延遲初始化元件
- 主要是利用「lazy」這個修飾字來處理
class MainActivity : AppCompatActivity() {
/// ③ 利用lazy延遲初始化元件
private fun <T : View> Activity.bindView(@IdRes res: Int): Lazy<T> {
return lazy { findViewById<T>(res) }
}
}
直接利用Kotlin Android Extensions
- 主要是利用「Kotlin Android Extensions」這個library來處理
class MainActivity : AppCompatActivity() {
/// ④ 直接利用Kotlin Android Extensions來直接以id的名字來設定
private fun initElementsForExtensions() {
myButton.text = "@+id/myButton"
myEditText.setText("@+id/myEditText")
}
}
範例程式碼下載
後記
- 看了一些舊的Android文章,通通都是使用findViewById(),後來想想,都換了一種語言了,每次都要寫一次初始化不是很麻煩嗎?所以就問了google大神一下,果然不只我這樣想,Kotlin官方早就準備好了。最後希望大家會喜歡這篇文章,身為初學者的我,會更加努力的。