日常开发中经常有这种需求:
表单中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
}
网友评论