5

I am working on an Android application.In my app I have to use images based on the text.So I write OnChangeListener() for EditText.The following is my sample code.

edt.addTextChangedListener(this);  
@Override
public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub
    CharSequence cs=convert(edt.getText.toString());
            edt.setText(cs);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
        int after) {
    // TODO Auto-generated method stub


}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    // TODO Auto-generated method stub


}

But I am getting Exception for the above code.I know the reason for the exception is calling setText() from afterTextChanged() method. But I have to change the EditText text value based on the same EditText text change.Help me friends

Dipak Keshariya
  • 22,193
  • 18
  • 76
  • 128
sarath
  • 3,181
  • 7
  • 36
  • 58
  • Can you explain what exception you get? – Pasha Aug 30 '12 at 06:55
  • I am getting stackoverflow. The reason is I am trying settext from ontextchanged() .So It makes a endless recursion. – sarath Aug 30 '12 at 07:08
  • you are setting text again in edittext once you are already done,and that's too without changing it? isn't this weird? you sure,you really need to rewrite text there,or just want to change image accordingly? – Hiral Vadodaria Aug 30 '12 at 07:25

2 Answers2

8

One more solution can be to use boolean variable, so that it doesn't get into infinite callstack and eventually giving stackoverflow exception

public void afterTextChanged(Editable s) {
    if(!flag) 
    {
            flag = true;

            edt.setText("string");

            flag = false;
    }
}
Sunny
  • 1,441
  • 2
  • 13
  • 22
1

Just simply remove your listener before you set the text, and register it again after you are done, like described here:

Clear EditText text after adding onTextChanged implemenation

Community
  • 1
  • 1
Adam Monos
  • 4,287
  • 1
  • 23
  • 25