kotlin 表單驗證工具類

日常開發中經常有這種需求:
表單中EditText全都有輸入內容時,按鈕設爲Enable。

下面擼個工具類

inline fun EditText.afterChangeListener(crossinline block: (s: Editable?) -> Unit) {
    this.addTextChangedListener(object : TextWatcher {
        override fun afterTextChanged(s: Editable?) {
            block(s)
        }

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

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

    })
}

typealias FormChangeListener = () -> Unit

fun addFormCompleteListener(array: Array<EditText>, block: (boolean: Boolean) -> Unit) {
    val items = HashMap<EditText, Boolean>(array.size)

    val formChangeListener: FormChangeListener = form@{
        for (entry in items) {
            if (!entry.value) {
                block(false)
                return@form
            }
        }
        block(true)
    }

    for (editText in array) {
        items[editText] = false
        editText.afterChangeListener {
            val item = !it.isNullOrEmpty()
            items[editText] = item
            formChangeListener.invoke()
        }
    }
}

使用

val array = arrayOf(etUsername, etPassword, etValidCode)
addFormCompleteListener(array) {
    button.isEnabled = it
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章