输入后,EditText setError消息不会清除

Mic*_*ael 72 android

好的,所以我只有一个EditText字段和一个按钮,按下时会触发AsyncTask.

EditText playerName = (EditText)findViewById(R.id.playerEditText);

if(playerName.getText().toString().length() == 0 )
    playerName.setError("Player name is required!");
else {
    // do async task
}
Run Code Online (Sandbox Code Playgroud)

问题是,即使在我输入有效文本进行搜索之后,错误消息似乎仍然保持不变.一旦EditText不为空,有没有办法删除错误?

Ale*_*ran 134

在你的else括号中,put playerName.setError(null),这将清除错误.

  • 这将在按下按钮时清除错误,但应在文本输入更改时清除.它应该按照[docs](https://developer.android.com/reference/android/widget/TextView.html#setError(java.lang.CharSequence))自动执行:"图标和错误消息将是当任何键事件导致TextView文本发生更改时,重置为null." (12认同)
  • 我在按下删除时会看到相同的内容,但在键入新文本时会清除 - Galaxy Nexus 4.3.在以前的操作系统中没有注意到 所以我会说Android被窃听了. (4认同)

小智 51

API文档:"当任何键事件导致TextView文本发生更改时,图标和错误消息将重置为null." 虽然不是这样 - 因此我们可以将其视为错误.

如果使用inputType,例如textNoSuggestions,textEmailAddress,textPassword,则在键入字符后将取消设置错误.几乎与文档有关,但同样不完全 - 当你删除一个字符时,错误仍然存​​在.看来,使用addTextChangedListener和setError(null)的简单解决方法可以实现承诺的行为.

除了Android 4.2上有关于图标丢失的帖子.所以要小心使用.

  • 这个答案应该排名更高 - 它提供了_very_有价值的信息. (7认同)

Jan*_*sse 12

试试这个监听器:

      playerName.addTextChangedListener(new TextWatcher()
                {
                    public void afterTextChanged(Editable edt){
                        if( playerName.getText().length()>0)
                        {
                             playerName.setError(null);
                        }
                    }
Run Code Online (Sandbox Code Playgroud)