首页 > 解决方案 > 编辑字段文本后隐藏文本输入布局的错误

问题描述

在用户解决错误后,我试图在文本输入布局上隐藏错误,但我不知道该怎么做,因为 afterTextChanged 函数似乎无法使用它。我怎样才能做到这一点?

这是我正在谈论的部分:

loginViewModel.loginFormState.observe(this, Observer {
           val loginState = it ?: return@Observer

           // disable login button unless fields are valid
           binding.btnLogin.isEnabled = loginState.isDataValid
           if (loginState.emailError != null) {
               binding.etEmail.error = getString(loginState.emailError)
           }
           if (loginState.passwordError != null) {
               binding.tfPassword.error = getString(loginState.passwordError)
           }
       })

       binding.etEmail.afterTextChanged {
           loginViewModel.loginDataChanged(
               binding.etEmail.text.toString(),
               binding.etPassword.text.toString()
           )
       }

       binding.etPassword.afterTextChanged {
           loginViewModel.loginDataChanged(
               binding.etEmail.text.toString(),
               binding.etPassword.text.toString()
           )
       }

private fun TextInputEditText.afterTextChanged(afterTextChanged: (String) -> Unit) {
   this.addTextChangedListener(object : TextWatcher {
       override fun afterTextChanged(editable: Editable?) {
           afterTextChanged.invoke(editable.toString())
       }

       override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}

       override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
   })

即使用户正确输入密码并且他们可以单击我拥有的按钮,错误仍然存​​在,我怎样才能让它消失?

标签: androidkotlin

解决方案


您可以使用方法并作为参数setError传递。null文档

设置将在我们的 EditText 下方显示的错误消息。如果错误为空,则错误消息将被清除。

您可以在 afterTextChanged 中调用此方法

textInputEditText.addTextChangedListener (object: TextWatcher {
    override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { }
    override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int)    { }
    override fun afterTextChanged(s: Editable?) {
         textInputLayout.error = null
    }
})

推荐阅读