[英]Unresolved reference in kotlin with id and activity_main
我实际上是在 kotlin 中创建一个新应用程序,以在带有格式化信息的框中显示 xml 文件
问题是当我构建应用程序时,有一个 activity_main,返回“未解决的引用”的 id
Unresolved reference: id
Unresolved reference: id
这里是 MainActivity.kt
package com.example.instantsystem
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.ListView
import java.io.IOException
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val listView = findViewById<ListView>(id.listView)
var employees: List<Employee>? = null
try {
val parser = XmlPullParserHandler()
val istream = assets.open("employees.xml")
employees = parser.parse(istream)
val adapter = ArrayAdapter(this, R.layout.simple_list_item_1, employees)
listView.adapter = adapter
} catch (e: IOException) {
e.printStackTrace()
}
}
}
这里是 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="com.example.instantsystem.MainActivity">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</android.support.constraint.ConstraintLayout>
我不明白错误,我导入了package并在xml中定义了它。我的代码有什么问题?
在我的情况下,删除import android.R
解决了这个问题。
从可能自动导入的导入中删除import android.R
。
在build.gradle
(Module..) 内需要应用最新版本kotlin-android-extensions
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-android-extensions'
}
与@SkorpEN 提到的相同,对我来说,还删除了import android.R解决了这个问题。
The reason why import android.R added from nowhere is, if you paste a java code into Kotlin it will convert to Kotlin automatically and some times this import android.R will also be added automatically.
就我而言,我不小心删除了 package 声明,因此添加package your.package.name
为我修复了它。
使用 Kotlin Android 扩展,您不再需要调用findViewById()
。 就像这样:
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var employees: List<Employee>? = null
try {
val parser = XmlPullParserHandler()
val istream = assets.open("employees.xml")
employees = parser.parse(istream)
val adapter = ArrayAdapter(this, R.layout.simple_list_item_1, employees)
listView.adapter = adapter // here, the listView variable name refers to the id given in the xml file
} catch (e: IOException) {
e.printStackTrace()
}
}
}
如SkorpEN 所述,在大多数情况下,删除导入 Android.R 将起作用。
如果找不到该导入,请尝试检查 Activity 顶部的 package 名称。 如果没有 package 名称,请添加 package 名称,或者如果名称已经存在,请尝试删除该行并重写名称。
更改此行
val listView = findViewById<ListView>(id.listView)
对此
val listView = findViewById<ListView>(R.id.listView)
您缺少 R 参考。
在尝试重命名我的应用程序名称以及包和文件夹后,它发生在我身上。 确保在代码中搜索所有旧名称并将其替换为新名称。
就我而言; 我在自动导入中编辑了MainActivity.kt
代码,所以我必须添加:
import com.package.name.R
我的代码中没有要删除的import android.R
,我已经在 MainActivity.kt 中声明了我的 package
更新 Android Gradle 插件对我有用
在 Rebuild Project 和 Make Project 失败后,最后 Clean Project 为我工作。 (记得事先添加插件, kotlin-android-extensions
。)
如果 AndroidManifest.xml 的 package 名称错误,就会发生这种情况。
由于上述答案均不适合我,因此我找到了另一个有效的解决方案:将 package 名称添加到R
。
例如,从此更改:
onView(withId(R.id.llDirectionsButtonImageView)).perform(click())
对此:
onView(withId(com.myco.appsdk.R.id.llDirectionsButtonImageView)).perform(click())
就我而言,问题发生在多模块项目的 Espresso 测试代码中。 一个模块,appsdk,包含所有的 UI 代码和资源文件。 另一个模块 app 基于 appsdk 创建一个Application
并在该应用程序上运行 Espresso 测试。 出于这个原因,我认为app模块中的Espresso测试代码需要引用appsdk中的资源ID,并具有完全限定的名称。 多年来,我不需要添加前缀。 我认为最近的依赖项升级可能要求添加前缀。
以下是我正在使用的依赖项/环境的一些相关版本号:
我知道这是较旧的帖子,但就我而言,解决方案是导入:
*导入 kotlinx.android.synthetic.main.your_activity。 **
如果您从 android 工作室显示的列表中写入 textview 和 select 的部分 ID,它将自动导入
确保你有上面提到的这个插件
插件 { id 'com.android.application' id 'kotlin-android' id 'kotlin-android-extensions' }
插入后,进行同步操作。
在尝试了这篇文章中的所有答案之后,没有一个对我有用,但我能够修复它并且非常容易。
首先我使缓存无效,然后我添加了这一行
导入 com.your.package.R;
在我的情况下,我没有任何导入 R,所以我不得不添加它,有一段时间我认为这不是一个好的解决方案,但经过审查和测试没有问题,我希望你能解决你的问题。
电鳗工作室Android版本
macOS 文图拉 13.2
Gradle 7.2.2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.