TextWatcher中的editText.getText()。toString()在第一个textchange返回空字符串

时间:2013-11-27 09:58:10

标签: android android-edittext textwatcher

我在textchangelistener添加了Edittext,其中我检查文本是否为空。当文本不为空时我按退格键,所有文本都会消失并再次出现。这仅在第一次按下退格键时发生。之后它就像它应该的那样。

使用Editable s.toString()无法解决问题。

导致此问题的原因是什么?

有关详细信息,请参阅代码中的注释:

TextWatcher textwatcher = getMandatoryTextWatcher(editText);
String text = editText.getText().toString();//At this point String text is not empty.

editText.addTextChangedListener(textwatcher);

public TextWatcher getMandatoryTextWatcher(final EditText editText) {
    TextWatcher textwatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            //To change body of implemented methods use File | Settings | File Templates.
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            //To change body of implemented methods use File | Settings | File Templates.
        }

        @Override
        public void afterTextChanged(Editable s) {
            try {
                //The first time this is called(the first softkey backspace press),
                //text is empty. This causes a weird issue where the character that 
                //was just removed by pressing the backspace, reappears again. 
                //This is only the first time.

                String text = editText.getText().toString();

                if (text.length() <= 0) {
                    editText.setError(errorMandatory);

                } else if (text.length() > 0) {
                    editText.setError(null);
                } else {
                    editText.setError(errorMelding);
                }
           } catch (NumberFormatException nfe) {
                    editText.setError(errorMeldingTijdensParsen);
        }
    }
};
return textwatcher;
}

4 个答案:

答案 0 :(得分:0)

ohk dude刚刚第一次给出这个验证

 if(TextUtils.isEmpty(Stringname))
{
   paste your rest code here 
}

所以每当第一次它不会进入条件

答案 1 :(得分:0)

将您的代码复制到onTextChanged并将您的代码放入以下if语句中:

  if (s.length() > 0)
  {
    // do what you want
  }

答案 2 :(得分:0)

您最好使用s.toString();代替editText.getText().toString();

答案 3 :(得分:0)

我已编译你的代码为min。 sdk 10(2.3.3)和目标sdk 14(4.0)。 在Samsung GT-P6800设备中运行它不会发生报告的行为。 您的问题可能在代码之外。尝试在另一台设备上运行您的代码。