【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延遲初始化元件

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

class MainActivity : AppCompatActivity() {
    /// ④ 直接利用Kotlin Android Extensions來直接以id的名字來設定
    private fun initElementsForExtensions() {
        myButton.text = "@+id/myButton"
        myEditText.setText("@+id/myEditText")
    }
}

範例程式碼下載

後記

  • 看了一些舊的Android文章,通通都是使用findViewById(),後來想想,都換了一種語言了,每次都要寫一次初始化不是很麻煩嗎?所以就問了google大神一下,果然不只我這樣想,Kotlin官方早就準備好了。最後希望大家會喜歡這篇文章,身為初學者的我,會更加努力的。