为什么即使我在 xml 中有按钮 ID,它仍然显示 "Unresolved reference: button"?

Why does it still say "Unresolved reference: button" even when I have button id in xml?

我有一个简单的 android 应用程序,我想单击按钮传递其他 activity。但是它说

Unresolved reference: button

甚至我在 xml 中给出了 id。我不知道我错在哪里。

截图:

activity_main.xml:

   <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/button"
    android:text="Click"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

main_activity:

class MainActivity : AppCompatActivity() {

companion object {
const val USER = "user"
 }

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

    val user = User( "mayk",   "qqqq", PersonalInfo("mayk", "james"))


    button.setOnClickListener{
        val intent = Intent (this, Activity2::class.java)
        intent.putExtra(USER, user)
        startActivity(intent)
    }
   }
   }
val button = findViewById<View>(R.id.button)

why still say “Unresolved reference: button” even I have button id in xml?

您的 xml 布局文件中的 ID 不是 Kotlin 变量。您需要声明一个变量 val button 才能使用它。您还需要初始化变量以引用 Button 对象。一种方法是使用

val button = findViewById<View>(R.id.button)

我建议您阅读 https://d.android.com 上的初学者指南,以了解 Android 编程的基础知识。

无需使用 findViewById()

转到您的Build.Gradle(模块:应用程序) 添加以下行

apply plugin: 'kotlin-android-extensions'

id 'kotlin-android-extensions'

然后它会要求你同步 然后按同步 之后它会要求您仅使用 ALT+ENTER

导入

更新:此解决方案已弃用

现在您必须使用视图绑定

在模块级别 build.gradle 文件中将 viewBinding 构建选项设置为 true

android {
...
buildFeatures {
    viewBinding true
    }
}

要设置绑定 class 的实例以与 activity 一起使用,请在 activity 的 onCreate() 方法中执行以下步骤:

private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ResultProfileBinding.inflate(layoutInflater)
    val view = binding.root
    setContentView(view)
}

您现在可以使用绑定实例 class 来引用任何视图:

binding.name.text = viewModel.name
binding.button.setOnClickListener { viewModel.userClicked() }

有关更多信息,您可以查看 https://developer.android.com/topic/libraries/view-binding