Android开发中如何在用户输入正确密码后隐藏密码输入框的错误提示
问题解决方法
根因分析
现有代码仅在检测到邮箱/密码存在格式错误时才会给控件赋值错误提示,没有处理「验证通过、错误为null」的场景,之前设置的错误提示不会自动清除,因此即使用户输入了符合要求的内容,错误提示依然会保留。
修改步骤
1. 调整LiveData观察者逻辑
修改loginFormState的观察者代码,新增验证通过时清空错误的逻辑,邮箱和密码都要同步调整:
loginViewModel.loginFormState.observe(this, Observer { val loginState = it ?: return@Observer binding.btnLogin.isEnabled = loginState.isDataValid // 邮箱错误处理,验证通过时清空错误 binding.etEmail.error = if (loginState.emailError != null) { getString(loginState.emailError) } else { null } // 密码错误处理,验证通过时清空错误 binding.tfPassword.error = if (loginState.passwordError != null) { getString(loginState.passwordError) } else { null } })
2. 确认ViewModel逻辑正确性
需要同步校验ViewModel中loginDataChanged方法的逻辑:当邮箱、密码格式符合预设规则时,必须将返回的loginFormState实例中的emailError、passwordError字段赋值为null,否则错误状态不会更新,错误提示也无法正常清除。
补充说明
Material Design组件中的TextInputLayout、TextInputEditText控件,将error属性赋值为null时,会自动隐藏错误提示文本和对应的错误样式,符合官方交互规范。
内容的提问来源于stack exchange,提问作者dazai
相关产品推荐
相关产品推荐

