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

Android Studio布局文件中的控件在代码中引用提示Unresolved reference错误

问题原因

你代码中直接使用dancerView、studentView、playbtn等布局ID作为变量调用,但Android原生Kotlin开发默认不支持该语法,该语法依赖已废弃的Kotlin Android Extensions插件,默认项目未开启该功能,因此编译器找不到对应变量引用。

解决方案

方案1:使用findViewById(无需额外配置,适合新手快速验证)

在setContentView(R.layout.activity_main)之后手动绑定控件,修改后的onCreate代码如下:

const val REQUEST_VIDEO_CAPTURE = 1

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 手动绑定控件
        val dancerView = findViewById<VideoView>(R.id.dancerView)
        val studentView = findViewById<VideoView>(R.id.studentView)
        val playbtn = findViewById<Button>(R.id.playbtn)

        // 原有逻辑补全
        var path_vid = "android.resource://${packageName}/${R.raw.test_720}"
        var mediaController = MediaController(this)
        mediaController.setAnchorView(dancerView)
        // 补充缺失的播放配置
        dancerView.setMediaController(mediaController)
        dancerView.setVideoPath(path_vid)
        // 点击按钮播放
        playbtn.setOnClickListener {
            dancerView.start()
        }
    }
}

方案2:使用View Binding(官方推荐,类型安全无空风险)

这是目前Google官方推荐的控件绑定方案,配置步骤如下:

  1. 打开项目中app模块下的build.gradle(Groovy语法)或build.gradle.kts(Kotlin语法)文件,在android代码块中添加ViewBinding开启配置:
    // Groovy语法
    android {
        // 其他原有配置
        buildFeatures {
            viewBinding true
        }
    }
    
    // Kotlin语法
    android {
        // 其他原有配置
        buildFeatures {
            viewBinding = true
        }
    }
    
  2. 点击Android Studio右上角的「Sync Now」同步项目配置
  3. 修改MainActivity代码使用ViewBinding绑定控件:
    const val REQUEST_VIDEO_CAPTURE = 1
    
    class MainActivity : AppCompatActivity() {
        // 定义Binding变量
        private lateinit var binding: ActivityMainBinding
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            // 初始化Binding
            binding = ActivityMainBinding.inflate(layoutInflater)
            setContentView(binding.root)
    
            // 直接通过binding访问所有控件,无需手动findViewById
            var path_vid = "android.resource://${packageName}/${R.raw.test_720}"
            var mediaController = MediaController(this)
            mediaController.setAnchorView(binding.dancerView)
            // 补充播放配置
            binding.dancerView.setMediaController(mediaController)
            binding.dancerView.setVideoPath(path_vid)
            binding.playbtn.setOnClickListener {
                binding.dancerView.start()
            }
        }
    }
    

补充注意事项

如果你的视频文件还没导入,需要先在res目录下新建raw文件夹,将你的test_720视频文件放入该文件夹才能正常读取。

内容的提问来源于stack exchange,提问作者EJ Song

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 20:27:03