📜  在 kotlin 中使用惰性方法的 findviewbyid (1)

📅  最后修改于: 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在代码中大大减少了重复代码,使我们的代码更加清晰简洁。