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

Android Studio 4.1 Kotlin widget-ID not recognized in AminActivity.kt

我尝试使用 Kotlin 在 Android Studio (AS) 4.1 中创建一个新项目。我使用“empty activity”并创建项目“MyTest”。

AS 使用未命名的 TextView“Hello World”创建 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/

但是

synthetic 将在 Kotlin 1.4.20 中弃用,https://youtrack.jetbrains.com/issue/KT-42121 因为不是 null-safe。如果您要维护正在构建的项目一段时间,最好不要使用 Kotlin Android 扩展。

以上 link 中的建议替代方案是:

  • 视图绑定
  • 按 Id 查找视图
  • Kotterknife(已弃用)
  • Android注释

FindViewById 是 'official' 方法,它很容易使用,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`

之后不要忘记同步您的 gradle 文件..

由于“kotlin-android-extensions”已弃用,现在最好使用视图绑定。

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

buildFeatures {
    viewBinding true
} 

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

首先声明一个全局变量用于绑定

private lateinit var binding: ActivityHomeBinding

这里ActivityHomeBinding是自动生成的class

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

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