Android Studio Kotlin开发出现Unresolved reference: etName错误如何解决
Kotlin Android 控件Unresolved reference报错解决方案
该报错是Kotlin代码无法关联XML中定义的控件ID导致,可通过以下三种方案解决,优先推荐第一种官方标准方案:
方案1:使用View Binding(官方推荐,类型安全、空安全)
- 第一步:在模块级
build.gradle(Groovy语法)中开启视图绑定配置,同步项目:
android { buildFeatures { viewBinding true } }
如果使用Kotlin DSL的build.gradle.kts,配置如下:
android { buildFeatures { viewBinding = true } }
- 第二步:在Activity中使用自动生成的绑定类访问控件,假设你的布局文件名为
activity_sign_up.xml,示例代码如下:
class SignUpActivity : AppCompatActivity() { private lateinit var binding: ActivitySignUpBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivitySignUpBinding.inflate(layoutInflater) setContentView(binding.root) binding.btnSignUp.setOnClickListener { val userName = binding.etName.text.toString() val email = binding.etEmail.text.toString() val password = binding.etPassword.text.toString() val confirmPassword = binding.etConfirmPassword.text.toString() if(TextUtils.isEmpty(userName)){ Toast.makeText(applicationContext,"username is required", Toast.LENGTH_SHORT).show() } // 其余业务逻辑 } } }
方案2:手动调用findViewById(临时适配成本低)
和你绑定btnSignUp的逻辑一致,给所有用到的EditText也添加绑定即可:
// 先完成所有控件绑定 val etName: EditText = findViewById(R.id.etName) val etEmail: EditText = findViewById(R.id.etEmail) val etPassword: EditText = findViewById(R.id.etPassword) val etConfirmPassword: EditText = findViewById(R.id.etConfirmPassword) val btnSignUp: Button = findViewById(R.id.btnSignUp) btnSignUp.setOnClickListener{ val userName = etName.text.toString() val email = etEmail.text.toString() val password = etPassword.text.toString() val confirmPassword = etConfirmPassword.text.toString() // 其余业务逻辑 }
方案3:启用Kotlin Android Extensions(仅旧项目临时兼容,高版本AGP已废弃)
仅适用于AGP版本低于7.0的旧项目,在模块级build.gradle顶部添加插件配置:
plugins { id 'com.android.application' id 'kotlin-android' id 'kotlin-android-extensions' // 添加这行 }
同步后在Activity顶部导入布局对应的合成包:import kotlinx.android.synthetic.main.你的布局文件名.*,即可直接通过ID访问控件。该方案已被官方移除,不建议长期使用。
内容的提问来源于stack exchange,提问作者SAOWEI SAO
相关产品推荐
相关产品推荐

