Spinner自定义布局引用失败:R.layout.my_selected_item未解析
问题场景
为Spinner选中项添加自定义布局修改文本样式时,在ArrayAdapter中引用R.layout.my_selected_item出现"Unresolved reference: my_selected_item"错误。已尝试清理/重建项目、失效缓存重启Android Studio、手动导入布局文件均无效,相同布局在新项目可正常使用。
相关代码
ArrayAdapter初始化代码:
val sortedCurrencySymbolsList = listOf("BTC", "ETH", "XRP", "USDC", "BNB", "DOGE", "LTC", "MATIC", "DYDX", "ADA").sorted() ArrayAdapter( requireContext(), R.layout.my_selected_item, sortedCurrencySymbolsList ) .also { it.setDropDownViewResource(R.layout.simple_spinner_dropdown_item) binding.spinnerCrypto.adapter = it }
自定义布局my_selected_item.xml代码:
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" style="?android:attr/spinnerItemStyle" android:singleLine="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="marquee" android:textAlignment="inherit"/>
解决方案
检查布局文件路径与命名
确认my_selected_item.xml存放在res/layout根目录下,若放在子目录需按路径引用(如R.layout.subfolder.my_selected_item);同时确保文件名与代码中的引用完全一致(包括大小写,避免Windows下不区分大小写但编译时出错的情况)。修正R类导入
删除手动导入的com.menesdurak.virtualcrypto.R.layout.my_selected_item,改为导入完整的R类:import com.menesdurak.virtualcrypto.R,之后直接使用R.layout.my_selected_item。同时检查是否误导入了android.R,这会导致无法识别自定义布局。排查多模块问题
若为多模块项目,确认布局文件位于当前业务模块的res/layout下,而非其他依赖模块。如果是依赖模块的布局,需导入对应模块的R类(如import com.othermodule.R)。强制重新生成R类
- 执行
File > Invalidate Caches... > Invalidate and Restart,等待项目重启并重新构建 - 手动删除项目根目录及模块目录下的
build文件夹,再执行Build > Rebuild Project
- 执行
检查Gradle配置与同步
确认模块的build.gradle.kts(或build.gradle)中sourceSets配置正确识别res目录:android { sourceSets { main { res.srcDirs = listOf("src/main/res") } } }执行
File > Sync Project with Gradle Files确保配置同步完成。
内容的提问来源于stack exchange,提问作者menesdurak

