📅  最后修改于: 2023-12-03 15:23:11.894000             🧑  作者: Mango
在Kotlin中,使用惰性方法的findViewById是一种更简单、更有效的方式来查找View,可以节省时间和代码量。
使用惰性方法的findViewById需要使用Kotlin中的lazy函数和扩展函数。首先,我们需要创建一个扩展函数来在Activity或Fragment中查找View:
fun <T : View> Activity.bindView(id: Int): Lazy<T> {
return lazy {
findViewById<T>(id)
}
}
fun <T : View> View.bindView(id: Int): Lazy<T> {
return lazy {
findViewById<T>(id)
}
}
fun <T : View> Dialog.bindView(id: Int): Lazy<T> {
return lazy {
findViewById<T>(id)
}
}
以上代码定义了三个扩展函数,分别用于Activity、View和Dialog中查找View。这些函数使用了泛型类型参数T,以确保返回的View与传入的id对应的View类型相同。
使用这些扩展函数时,我们可以在类中使用by lazy将View延迟初始化:
class MyActivity : Activity() {
private val myTextView by bindView<TextView>(R.id.my_text_view)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.my_activity)
// 可以直接使用myTextView而无需再次findViewById
}
}
以上代码中,我们使用了by lazy将myTextView声明为惰性初始化。所以,当我们第一次使用myTextView时,它将被初始化并查找R.id.my_text_view。
使用惰性方法的findViewById在代码中大大减少了重复代码,使我们的代码更加清晰简洁。