【问题标题】:Kotlin error with importing variable 'button'导入变量“按钮”时出现 Kotlin 错误
【发布时间】:2021-04-06 12:13:31
【问题描述】:

这里是一个超级初学者的问题,但我很难过。

我正在关注 youtube (https://www.youtube.com/watch?v=uRyvNKRkwbs) 上由 tutorialsEU 提供的 Kotlin Android 教程视频,他已开始优化第一部分代码,我完全按照他所做的操作,但在他的工作中遇到了错误。

请查看此屏幕截图,了解我遇到的问题

当他突出显示红色“按钮”时,他可以选择“导入”(这适用于之前的一些示例,如您从第 3-7 行中看到的那样),但是当我这样做时,它只是说“创建局部变量”按钮' ' 是否有快速解决此问题的原因?

这里是 Activity_Main 屏幕的描述

感谢您的帮助

乔恩

【问题讨论】:

  • 您是否在build.gradle 文件中添加了apply plugin: 'kotlin-android-extensions'
  • 嗨,Gabriele 感谢您的快速回复。我不确定那是什么意思。我在这方面完全是初学者,我只是按照这个 youtube 教程来对 Android Studio 应用程序和 Kotlin 有一个基本的了解。在此之后,我可能会学习更深入的 Kotlin 课程。会在 activity_main 选项卡的某处输入吗?我不确定 build.gradle 文件是什么。
  • 在我链接的 youtube 视频中,他这样做而我出错的部分是 50:24。他将 btn_click_me 更改为按钮,然后当他将光标滚动到按钮上时可以选择“导入”,而我只能选择创建局部变量。视频中这个位的目的似乎是避免需要有这个函数的变量定义行
  • @JonnyD 在 app 文件夹中检查 build.gradle 文件是否包含上一条评论中报告的行。

标签: android kotlin variables


【解决方案1】:

它需要 Kotlin Android 扩展。在app/build.gradle文件中添加插件:

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

另外请注意,Kotlin Android 扩展现已弃用,这意味着不再支持使用 Kotlin 合成器进行视图绑定。你应该migrateView Binding 的新库。

在任何情况下,您都可以使用“旧”方法:

val button: Button = findViewById(R.id.button)
val textView: TextView = findViewById(R.id.textView)

【讨论】:

  • 已弃用 :)
【解决方案2】:

你不能只访问 kotlin 文件中的 id: 按钮。目前这样做的方式是声明

android {
   ...
   buildFeatures {
      viewBinding true
   }
}

在你的 gradle 文件中。现在重建你的项目。 之后,您可以在 Activity 文件中获得 Activity(your_name)Binding 类型的绑定: private lateinit var binding: ActivityMainBinding

在 onCreate 中:

super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)

所以 gradle 为每个布局 xml 创建一个绑定 Java 类。 您可以通过以下方式访问该按钮 binding.button

【讨论】:

  • 不准确。您可以使用 Kotlin Android Extensions(2017 年发布)来实现。它现在已弃用,但您可以使用它。
  • 不,KAE 在空项目中不可用。您可以使用 findViewById() 或通过 KAE 或 viewBinding 更新您的项目,其中 viewBinding 是最新的
  • 我没有看他关注的完整教程
【解决方案3】:

您应该应用插件 `apply plugin: 'kotlin-android-extensions' 将它放在 app.gradle 文件的顶部,或者有时看起来像这样:

并导入import kotlinx.android.synthetic.main.activity_main

但到目前为止,kotlinx.android 扩展已弃用,因此您可以迁移到视图绑定 read this

或者只使用旧的 findViewById 方法,例如:

val button: Button = findViewById(R.id.button)
val textView: TextView = findViewById(R.id.textView)

【讨论】:

  • 感谢大家的回复,我会尝试测试所有的建议,尽管很多建议对我来说毫无意义,因为我今天开始使用 Kotlin 并且之前从未使用过 Kotlin :)跨度>
  • viewbinding是一个android组件,顺便说一句,jetpackCompose是最新最新鲜的视图构建组件之一,阅读developer.android.com/jetpack/…
猜你喜欢
  • 1970-01-01
  • 2016-11-04
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多