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)
我尝试使用 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)