如何验证多个editText字段和启用按钮?

时间:2019-05-26 17:30:27

标签: android validation kotlin android-edittext textwatcher

我正在尝试弄清楚如何验证6个EditText输入字段和启用按钮 button_step_one_next_FSF.isEnabled = true 一切都适合我的情况。 我想使用此util类来验证所有内容,而无需创建TextWatcher对象。

这是我的editText实用程序类

inline fun EditText.onTextChange(crossinline f: (s: CharSequence?) -> Unit) {
val listener = object : TextWatcher {
    override fun onTextChanged(s: CharSequence, start: Int,
                               before: Int, count: Int) {
        f(s)
    }

    override fun afterTextChanged(s: Editable?) {}
    override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
}
addTextChangedListener(listener)

}

这是简短的验证方法示例

 private fun validateInput() {

    edit_text_name.onTextChange { s ->
        val name: String = s?.toString() ?: ""
        if (!name.isNameNotValid()) {
            text_input_name.isEndIconVisible = true
            text_input_name.isErrorEnabled = false
        } else {
            text_input_name.error = getString(R.string.error_not_valid_name)
            text_input_name.isEndIconVisible = false
        }
    }
    edit_text_surname.onTextChange { s ->
        val surname: String = s?.toString() ?: ""
        if (!surname.isNameNotValid()) {

            text_input_surname.isEndIconVisible = true
            text_input_surname.isErrorEnabled = false

        } else {
            text_input_surname.error = getString(R.string.error_not_valid_surname)
            text_input_surname.isEndIconVisible = false
        }
    }

1 个答案:

答案 0 :(得分:0)

我只是在TextWatcher lambda表达式的每次验证结束时添加了方法checkButtonEnableState(),它解决了我的问题!

private fun checkButtonEnableState() {
    button_step_one_next_FSF.isEnabled =
        (!edit_text_name.text.toString().isNameNotValid()
                && !edit_text_surname.text.toString().isNameNotValid()
                && edit_text_password_FSF.text.toString().isValidPassword()
                && edit_text_password_confirm_FSF.text.toString().isValidPassword()) &&
                (edit_text_password_confirm_FSF.text.toString() == edit_text_password_FSF.text.toString())
}