📜  android kotlin 不能在 MainActivity 中 @+id - Kotlin (1)

📅  最后修改于: 2023-12-03 15:13:20.415000             🧑  作者: Mango

Android Kotlin 中不能在 MainActivity 中 @+id

在使用 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,会导致编译错误。需要注意这一点,以免浪费时间去查找错误。