在AminActivity.kt中无法识别Android Studio 4.1 Kotlin小部件ID



我试图用Kotlin在Android Studio(AS(4.1中创建一个新项目。我使用";空活动";并创建项目";MyTest"。

AS使用未命名的TextView创建activity_main.xml;你好世界";。我将id命名为myText。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/myText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

创建的MainActivity.kt是标准的,看起来像这个

package com.example.mytest
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}

所有这些都是正常的,但是

现在在MAinActivity.kt中,应该可以键入

myText=";任何字符串";

但此处myText无法识别。我不明白。

我有一些早期AS版本的小测试项目。它们看起来完全相同,并且可以输入myText,myText可以立即识别。

我的编码或项目创建有什么问题!我已经创建了几个项目,并与以前的项目进行了比较,我认为我的工作没有错。谁有主意?

您需要在项目中集成Kotlin Android扩展,以便您的视图得到这样的识别。只需在build.gradle:中添加以下行

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

本文中的更多信息:https://antonioleiva.com/kotlin-android-extensions/

但是

合成将在Kotlin 1.4.20中被弃用,https://youtrack.jetbrains.com/issue/KT-42121由于不是零安全的。如果你要维护你正在构建的项目一段时间,不使用Kotlin Android扩展会很糟糕。

上面链接中建议的替代方案是:

  • ViewBinding
  • FindViewById
  • Kotterknife(已弃用(
  • AndroidAnnotations

FindViewById是"官方"方法,它很容易使用,Kotlin建议ViewBinding在我阅读时有一些样板(我还没有使用它(。

只需在build.gradle (app)的顶部添加以下行:

plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-android-extensions' }

之后,在MainActivity.kt文件中包括以下导入语句:

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

欲了解更多清晰信息,请访问

`https://youtrack.jetbrains.com/issue/KT-42121`

之后别忘了同步你的渐变文件。。

As"kotlin android扩展";现在不推荐使用视图绑定。

为此,首先通过在android块下编写这行代码,在build.gradle文件中启用视图绑定。

buildFeatures {
viewBinding true
} 

然后在活动文件中使用视图绑定功能

首先将用于绑定的全局变量声明为

private lateinit var binding: ActivityHomeBinding

这里ActivityHomeBinding是一个自动生成的类

然后在OnCreate((方法中编写这些代码

binding = ActivityHomeBinding.inflate(layoutInflater)
setContentView(binding.root)

最新更新