Android Kotlin开发报Unresolved reference: text错误如何解决
错误原因
- 导入的合成布局包错误:BirthdayGreeting Activity加载的布局是
activity_birthday_greeting.xml,但代码顶部导入的是主活动的布局kotlinx.android.synthetic.main.activity_main.*,无法访问到目标布局里的控件。 - 控件引用错误:代码中
BirthdayGreeting.text的首字母大写,对应的是当前Activity的类名,不是布局中定义的TextView控件ID,Android控件ID大小写敏感,此处写法和实际ID不匹配导致无法识别。
修复方案
临时直接修复
- 修正BirthdayGreeting类的布局导入,将顶部的导入语句替换为和加载布局对应的版本:
import kotlinx.android.synthetic.main.activity_birthday_greeting.*
- 修正控件引用行,将类名改为和布局ID匹配的小写写法:
birthdayGreeting.text = "Happy Birthday $name"
操作完成后先同步项目再运行即可解决报错。
长期优化方案(推荐)
kotlin-android-extensions合成布局插件已经被官方废弃,后续版本可能无法正常使用,建议换成官方推荐的ViewBinding方案实现控件引用:
- 在模块级
build.gradle文件中开启ViewBinding功能:
android { // 其他配置保持不变 buildFeatures { viewBinding true } }
- 重写BirthdayGreeting类代码:
package com.example.birthdaygreet import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.example.birthdaygreet.databinding.ActivityBirthdayGreetingBinding class BirthdayGreeting : AppCompatActivity() { companion object{ const val NAME_EXTRA = "name_extra" } private lateinit var binding: ActivityBirthdayGreetingBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityBirthdayGreetingBinding.inflate(layoutInflater) setContentView(binding.root) val name = intent.getStringExtra(NAME_EXTRA) // 直接通过binding对象访问控件,避免ID写错的问题 binding.birthdayGreeting.text = "Happy Birthday $name" } }
内容的提问来源于stack exchange,提问作者Alok Singh
相关产品推荐
相关产品推荐

