首页 > 解决方案 > kotlin:如果 EditText 启用了 setError,如何获取?

问题描述

如何验证 EditText 是否启用了 setError?

如果 EditText 有错误,我想禁用一个按钮。

任何其他方式来实现这一点。

当我放入view.calcbutton.setEnabled(false)validateEditText 函数时它有点工作,但我使用 validateEditText 函数来验证多个 EditText,并且只有最后一个函数调用禁用按钮。如果第一个函数调用禁用按钮,则第二个函数调用再次启用它,反之亦然。

但我想在这个函数之外做,因为如果多个 EditTexts 之一有 setError 按钮应该被禁用。

//global var blockcalcbutton
var blockcalcbutton = 0

//function to validate EditTexts and set blockcalcbutton=1 if setError
validateEditText(view.input_volt, view, getString(R.string.invalid_volt))

        if(blockcalcbutton == 1) {
            view.calcbutton.setEnabled(false)
            view.calcbutton.setText(getString(R.string.calcbutton_disabled))
            view.calcbutton.setBackgroundResource(R.color.buttonDisabled)
        } else {
            view.calcbutton.setEnabled(true)
            view.calcbutton.setText(getString(R.string.calcbutton_enabled))
            view.calcbutton.setBackgroundResource(R.color.buttonBackground)
        }
fun validateEditText(editText: EditText, message: String) {
        val myEditText = editText
        myEditText.addTextChangedListener(object: TextWatcher {
            override fun afterTextChanged(s: Editable?) {

                if(myEditText.text.toString() == "" || myEditText.text.toString() == "." || myEditText.text.toString() == "0") {
                    //setError
                    myEditText.setError(message)
                    //var to disable Button 
                    blockcalcbutton = 1
                } else {
                    //delete setError
                    myEditText.setError(null)
                    //var to enable Button
                    blockcalcbutton = 0
                }
            }

标签: androidkotlin

解决方案


您可以创建回调以在设置错误或删除错误时进行通知。

interface EditTextErrorListener {
    fun onErrorSet()
    fun onErrorDeleted()
}

在这里您可以通知:

if(myEditText.text.toString() == "" || myEditText.text.toString() == "." || myEditText.text.toString() == "0") {
    //setError
    myEditText.setError(message)
  --->  listener.onErrorSet()
    //var to disable Button 
    blockcalcbutton = 1
} else {
    //delete setError
    myEditText.setError(null)
  --->  listener.onErrorDeleted()
    //var to enable Button
    blockcalcbutton = 0
}

推荐阅读