Android Kotlin LoginActivity代码报错求助:setOnClickListener逻辑问题
LoginActivity 登录校验逻辑错误排查与修复
核心错误点
- 声明了
binding变量但未初始化,导致无法通过View Binding正确引用控件 - 直接使用控件ID(如
bt_entrar、edit_text_user_email)而非binding调用,会引发空指针或控件找不到的异常 - 密码校验的提示文本逻辑矛盾:代码判断密码长度小于6,但提示写的是“Max 6 Caracteres”(最多6位),实际逻辑是要求至少6位
修正后的完整代码
class LoginActivity : AppCompatActivity() { private lateinit var binding: ActivityLoginBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 初始化View Binding,替换原setContentView方式 binding = ActivityLoginBinding.inflate(layoutInflater) setContentView(binding.root) // 通过binding引用登录按钮设置点击事件 binding.bt_entrar.setOnClickListener { val email = binding.edit_text_user_email.text.toString().trim() val senha = binding.edit_text_user_senha.text.toString().trim() if (email.isEmpty()) { binding.edit_text_user_email.error = "Preencha o Campo Email!" binding.edit_text_user_email.requestFocus() return@setOnClickListener } if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) { binding.edit_text_user_email.error = "Email Invalido!" binding.edit_text_user_email.requestFocus() return@setOnClickListener } if (senha.isEmpty() || senha.length < 6) { // 修正提示文本,匹配逻辑(至少6位) binding.edit_text_user_senha.error = "Preencha o Campo Senha com pelo menos 6 Caracteres!" binding.edit_text_user_senha.requestFocus() return@setOnClickListener } // 校验通过后可在此添加登录逻辑 } } }
关键修改说明
- 初始化View Binding:使用
ActivityLoginBinding.inflate(layoutInflater)创建binding实例,并用binding.root作为布局内容,这是View Binding的标准用法 - 统一控件引用方式:所有控件(按钮、输入框)都必须通过
binding.xxx调用,不能直接写控件ID - 修正提示文本:把密码提示改成符合逻辑的“至少6位”,避免用户误解
内容的提问来源于stack exchange,提问作者Marcel Mendes
相关产品推荐
相关产品推荐

