如何不使用findViewById?

时间:2018-09-08 07:45:15

标签: android kotlin

通常,我们不会在kotlin中使用findViewById(R.id.listView),因为Android Studio会自动为我们完成操作(我们不需要查找视图)。 但是this的示例表明,我们需要您(在此代码行中):

matplotlib

为什么在此示例中使用此行?如何不使用它?

3 个答案:

答案 0 :(得分:2)

如果您使用的是Kotlin的findViewById,则永远不需要强制转换(从API级别26开始)。您应该使用以下两种方式之一:

val myTV1 = findViewById<TextView>(R.id.myTextView)
val myTV2: TextView = findViewById(R.id.myTextView)

然后您可以通过以下变量访问其属性:

myTV1.text = "testing"

这是获取View引用并按原样在Kotlin中使用它们的一种完全有效的方法。


但是,如果您还在项目中启用了Kotlin Android Extensions(通过模块级别apply plugin: 'kotlin-android-extensions'文件中的build.gradle行),则还可以通过以下方式通过其ID引用视图它提供的合成属性,只需确保您具有正确的导入即可,例如:

import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        myTextView.text = "testing"
    }

}

请注意,Kotlin Android扩展程序是完全可选的,并且如果您确实使用它,findViewById当然仍然可用,无论出于何种原因,您都想将这两种方法混合使用。

答案 1 :(得分:0)

通常,当需要布局文件中的视图时,可以导入以下内容:

kotlinx.android.synthetic.main.<layout filename>.<id of view>

如果需要布局文件中的所有视图,则可以使用:

kotlinx.android.synthetic.main.<layout filename>.*

答案 2 :(得分:0)

仅适用于 Kotlin

第 1 步: 在我们的代码中添加这个 Kotlin Android 扩展

Gradle 脚本 -> build.gradle(Module)

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

注意:现在您可以直接访问视图ID,而无需使用findViewbyId,以防遇到任何红线按alt+enter,或将其导入到KT 文件中。

import kotlinx.android.synthetic.main.activity_your_layout.*