[英]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.