You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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主推的方式,比旧插件更安全也更规范:

  1. 打开你项目里的app/build.gradle(模块级的那个,不是根目录的),在android块里添加视图绑定的配置:
android {
    ...
    buildFeatures {
        viewBinding true
    }
}
  1. 点击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:

  1. 同样打开app/build.gradle,在plugins块里添加:
plugins {
    ...
    id 'kotlin-android-extensions'
}
  1. 同步项目后,在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 11:27:42