I’m adding a listener to an EditText field to appropriately format the number to currency in real time.
loanText.addTextChangedListener(new TextWatcher() {
private String current = "";
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(!s.toString().equals(current)){
String cleanString = s.toString().replaceAll("[$,.]", "");
double parsed = Double.parseDouble(cleanString);
String formated = NumberFormat.getCurrencyInstance().format((parsed/100));
current = formated;
loanText.setText(formated);
loanText.setSelection(formated.length());
}
}
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
});
However, when I try to clear the EditView field, my App will crash. In addition, the backspace key no longer functions.
The problem is that your
TextWatchersees that you are “clearing” the text, and therefore sends off a request to its callback methods(afterTextChanged,beforeTextChanged, etc).What i’ve done is to simply remove the
TextWatcher, clear the text, and add theTextWatcherback to theEditText. That way, nothing is listening to myEditTextchanges.You will probably have to hold on to an instance of the
TextWatcherinstead of inlining it like you did. That way you don’t have to create one every time you want to clear theEditTextloanText.removeTextChangedListener(yourTextWatcherObject);loanText.setText("");loanText.addTextChangedListener(yourTextWatcherObject);