📅  最后修改于: 2023-12-03 15:13:20.415000             🧑  作者: Mango
在使用 Android Kotlin 开发应用时,@+id 是定义 ViewGroup 内部的 View,而这个声明在 Kotlin 语法中不再需要。因此,在 Kotlin 中,可以直接使用 R.id.xxx 的形式来获取控件。如果在 MainActivity 中使用 @+id,会出现编译错误,提示无法找到符号的错误信息。
在 MainActivity 中使用如下代码:
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tv_message"
android:text="Hello World!" />
编译代码时,会出现以下错误信息:
Error:(12, 28) None of the following functions can be called with the arguments supplied:
public final fun <T : View!> findViewById(p0: Int): T! defined in android.app.Activity
public final fun <T : View!> findViewById(p0: Int): T! defined in android.view.View
这是因为在 Kotlin 中,不再需要使用 @+id 来声明变量,而是直接使用 R.id.xxx 的形式来获取控件。
将代码修改为以下形式:
val tvMessage = findViewById<TextView>(R.id.tv_message)
tvMessage.text = "Hello World!"
这种方式可以获取控件,并且在调用 setText 方法时,会自动识别 Java 的方法。
在 Android Kotlin 开发中,@+id 是不需要使用的语法,直接使用 R.id.xxx 的形式来获取控件。如果在 MainActivity 中使用 @+id,会导致编译错误。需要注意这一点,以免浪费时间去查找错误。