Android Studio报错Unresolved reference: box_three_text问题排查求助
解决Android Kotlin中「Unresolved reference: box_three_text」的问题
嘿,这个问题我熟!你遇到的是Kotlin代码没法直接识别XML里定义的视图ID的情况,为啥讲师的代码能跑?大概率是你们用的视图引用方式不一样,下面给你拆解原因和解决办法:
问题根源
你代码里直接写box_three_text这种变量名,是旧版Kotlin Android Extensions插件的功能——它会自动把XML里的视图ID转换成对应的Kotlin变量。但这个插件已经被Google官方废弃了,而讲师的项目可能还在沿用这个插件,或者你没启用现在推荐的视图绑定(View Binding)。
两种解决办法
办法一:用官方推荐的视图绑定(强烈推荐)
这是现在Google主推的方式,比旧插件更安全也更规范:
- 打开你项目里的
app/build.gradle(模块级的那个,不是根目录的),在android块里添加视图绑定的配置:
android { ... buildFeatures { viewBinding true } }
- 点击Android Studio右上角的「Sync Now」同步项目,然后修改
MainActivity.kt的代码:
import android.graphics.Color import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View // 这里替换成你自己的包名,比如你的应用包是com.example.layoutpractice,就写com.example.layoutpractice.databinding.ActivityMainBinding import com.your.package.name.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { // 声明视图绑定对象 private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 初始化绑定对象 binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) setListeners() } private fun setListeners(){ // 用binding.驼峰式命名来获取视图,比如box_three_text变成boxThreeText val clickableViews: List<View> = listOf( binding.boxOneText, binding.boxTwoText, binding.boxThreeText, binding.boxFourText, binding.boxFiveText ) for (item in clickableViews){ item.setOnClickListener{makeColored(it)} } } fun makeColored(view: View) { when (view.id) { R.id.box_one_text -> view.setBackgroundColor(Color.DKGRAY) R.id.box_two_text -> view.setBackgroundColor(Color.GRAY) R.id.box_three_text -> view.setBackgroundResource(android.R.color.holo_green_light) R.id.box_four_text -> view.setBackgroundResource(android.R.color.holo_green_dark) R.id.box_five_text -> view.setBackgroundResource(android.R.color.holo_green_light) else -> view.setBackgroundColor(Color.LTGRAY) } } }
办法二:临时启用旧插件(不推荐,已废弃)
如果你想暂时和讲师的代码完全对齐,可以临时启用已经被废弃的Kotlin Android Extensions:
- 同样打开
app/build.gradle,在plugins块里添加:
plugins { ... id 'kotlin-android-extensions' }
- 同步项目后,在
MainActivity.kt的顶部添加导入:
import kotlinx.android.synthetic.main.activity_main.*
这样你就能直接用box_three_text这类变量了,但记住这个插件已经被淘汰,后续项目尽量别用。
最后再检查下这两点
- 确认你的
activity_main.xml里确实有android:id="@+id/box_three_text"的TextView(看你贴的代码是有的,没问题) - 清理下项目缓存:点击顶部菜单栏的「Build」→「Clean Project」,然后「Rebuild Project」,有时候缓存会搞出这种奇怪的引用错误
内容的提问来源于stack exchange,提问作者user15820896
相关产品推荐
相关产品推荐

