Android Studio中R.layout与R.id引用未解析问题求助
解决方案:RecyclerView Adapter中R.layout/R.id引用报错
问题1:R.layout.game中layout提示Unresolved reference
按以下步骤排查解决:
- 检查R类导入:确认代码顶部导入的是你项目的R类(比如
import com.yourapppackage.R),而非系统的android.R。如果导入了android.R,删除它并替换为项目包名对应的R类。 - 清理重建项目:
- 点击顶部菜单栏
Build > Clean Project - 完成后点击
Build > Rebuild Project - 若仍有问题,点击
File > Invalidate Caches...,勾选Clear file system cache and local history后重启Android Studio
- 点击顶部菜单栏
- 检查布局文件合法性:打开
game.xml,确保文件没有语法错误(比如标签未闭合、属性拼写错误、资源命名违规——只能用小写字母+下划线),修复所有红标错误后再重建项目。 - 重新同步Gradle:点击顶部工具栏的
Sync Project with Gradle Files按钮,确保Gradle配置无异常,同步完成后再检查代码。
问题2:Build.VERSION_CODES.R.id.winner_textview中id提示Unresolved reference
这是用法错误,Build.VERSION_CODES.R是API 30的版本标识常量,不能用来引用布局ID。正确写法如下:
inner class GameViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { val gameWinner: TextView = itemView.findViewById(R.id.winner_textview) val highscore: TextView = itemView.findViewById(R.id.highscore) }
如果你的项目支持View Binding,更推荐用View Binding简化代码(无需手动findViewById):
- 在app模块的
build.gradle中启用View Binding:
android { ... buildFeatures { viewBinding true } }
- 然后在Adapter中使用:
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GameViewHolder { val binding = GameBinding.inflate(LayoutInflater.from(parent.context), parent, false) return GameViewHolder(binding) } inner class GameViewHolder(private val binding: GameBinding) : RecyclerView.ViewHolder(binding.root) { val gameWinner: TextView = binding.winnerTextview val highscore: TextView = binding.highscore }
内容的提问来源于stack exchange,提问作者Striving Programmer
相关产品推荐
相关产品推荐

