输入后无法清除EditText setError消息


75

好的,所以我只有一个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
}

问题是即使输入有效文本进行搜索后,错误消息似乎仍然存在。EditText不为空时,是否有办法消除错误?

Answers:


144

在您的else括号中,放置playerName.setError(null),这将清除错误。


12
当按下按钮时,这将清除错误,但在文本输入更改时,应清除该错误。它应该按照文档自动执行此操作:“当任何按键事件导致TextView文本发生更改时,图标和错误消息将重置为null。”
blahdiblah

4
按下Delete键时,我看到的是同一件事,但键入新文本时会清除-Galaxy Nexus 4.3。在以前的操作系统中没有注意到。因此,我要说的是Android错误。
Sofi Software LLC 2014年

Backspace似乎清除了我的2.3.3手机上的错误消息,但没有使用相同的APK和支持库在4.1.1上清除错误消息
eugene 2014年

您可以使用TextWatcher和覆盖afterTextChanged方法。
MChaker

1
@blahdiblah,您要仔细观察。但是,不要以为这是一个错误。.只是Google的确很不错。第二句话说错误消息将设置为“ null”,这意味着该图标仍处于活动状态。最后一句话说,只有当setError(null)时,图标和消息才被清除(即重置)。Google可能还花了5分钟编写了这篇文章..可能太忙于数钱和研究自动驾驶汽车了。
AngryITguy 2015年

53

API文档:“当任何按键事件导致TextView的文本发生更改时,图标和错误消息将重置为null。” 尽管事实并非如此-因此我们可以将其视为错误。

如果您使用诸如textNoSuggestions,textEmailAddress,textPassword之类的inputType,则在键入字符后未设置错误。几乎与记录相符,但又不完全相同-删除字符时,错误仍然存​​在。看来,使用addTextChangedListener和setError(null)的简单变通方法可以实现预期的行为。

此外,还有关于Android 4.2上图标丢失的帖子。因此,请谨慎使用。


7
这个答案应该排名更高-它提供了非常有价值的信息。
Rosomack 2014年

1
这确实令人困惑,但不是错误……只是一个非常糟糕的文档……。请参阅我的评论(已批准)。
AngryITguy 2015年

25.1.0+仍遇到错误。
拉切尔

1
@giulio这是一个错误。例如,在我的手机中,仅在某些情况下inputType且仅当我键入单个字符时才出现此问题。在第二个字符输入后,其EditText行为符合预期,错误消失了。这种不一致更像是一个错误。
古斯塔沃

12

试试这个听众:

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

测试长度> 0似乎是可选的。
尤金2014年

这是因为他说“如果EditText不为空,请立即删除错误”。如果不进行此测试,则如果用户键入一个char并将其删除,它将删除空框的错误。
Jan Ziesse '16

3

如果要隐藏错误消息,一种方法是在编辑框上应用onclicklistener,然后

editTextName.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            editTextName.setError(Null)
        }
    });

23
大写字段伤害了我的眼睛!但严重...你应该试试editTextName吧。
fernandohur

仅当用户EditTextname精确触摸其直线时,此方法才有效。(哦,这个名字让我呕吐了!!!!)
SREE 2017年

2

下面的代码为我工作

@OnTextChanged(
            value = R.id.editTextName,
            callback = OnTextChanged.Callback.TEXT_CHANGED)
    public void afterInput(CharSequence sequence) {
        editTextName.setError(null);
        editTextName.setErrorEnabled(false);
    }

'

editTextName.setError(null) 将清除错误消息。

editTextName.setErrorEnabled(false) 将删除其他填充。


1
有关在使用黄油刀时阅读完整说明的信息,请转到此处
XME

0

将TextWatcher添加到您的EditText和onError,使用et.setError(errorMessage)其他方式显示错误消息,否则您可以删除错误消息和错误图标,如下所示。

// to remove the error message in your EditText
et.setError(null);

// to remove the error icon from EditText.
et.setCompoundDrawables(null, null, null, null);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.