如何使用文本监视器启用验证按钮在kotlin?



我希望editText firstname和电子邮件字段editText正确填写。最初禁用的验证按钮应该启用(特别是对于name@blabla.com格式的电子邮件地址)。我试着用textWatcher,但我不知道如何使用它

editText1.addTextChangedListener(object: TextWatcher {
override fun onTextChanged(s:CharSequence, start:Int, before:Int, count:Int) {
if (s.toString().trim({ it <= ' ' }).isEmpty())
{
button.setEnabled(false)
}
else
{
button.setEnabled(true)
}
}
override fun beforeTextChanged(s:CharSequence, start:Int, count:Int,
after:Int) {
// TODO Auto-generated method stub
}
override fun afterTextChanged(s: Editable) {
// TODO Auto-generated method stub
}
})

您基本上需要使用LiveData进行验证检查。

创建一个数据类,类似于

data class DataCheck(
val emailError: Int? = null,
val displaynameError: Int? = null,
val isDataValid: Boolean = false
)

使用LiveData对象,例如

private var _dataValidity = MutableLiveData<DataCheck>()
val dataValidity : LiveData<DataCheck>
get()=_dataValidity

当出现错误时,将errors赋值给_dataValidity并观察dataValidity。如果没有错误发生,并且在所有变量(如email和name)都检查过之后,您可以将isDataValid赋值为true,然后按照您的希望执行。

dataValidity.observe(viewLifecycleOwner, Observer{dataCheck->
if(dataCheck.emailError!=null){TODO("Handle Email Error Here")}
if(dataCheck.displaynameError!=null){TODO("Handle Display Name Error Here")}
if(dataCheck.emailError == null && dataCheck.displayName == null && 
dataCheck.isDataValid){TODO("What to do when data is valid.")}
})

使用文本监视器,如果有错误,将它们赋给空值。

尝试使用下面的代码,我用这个代码来验证电子邮件是否有效。

//Email validation check
private fun isEmailValid(email: String): Boolean {
return if (username.contains('@')) {
Patterns.EMAIL_ADDRESS.matcher(username).matches()
} else {
username.isNotBlank()
}
}
editText1.addTextChangedListener(object: TextWatcher {
override fun onTextChanged(s:CharSequence, start:Int, before:Int, count:Int) {
if(isEmailValid(s.toString())){
Log.d("This", "Valid User Name")
} else {
Log.e("This", "Invalid User Name")
}
}
override fun beforeTextChanged(s:CharSequence, start:Int, count:Int,
after:Int) {}
override fun afterTextChanged(s: Editable) {}
})

您也可以这样使用

editText1.doOnTextChanged {email, _, _, _ -> button.isEnabled = isValidEmail(email}

写一个函数验证Email并返回布尔值

添加依赖项implementation "androidx.core:core-ktx:1.2.0"

最新更新