I have an EditText that has an inputType of number. While the user is typing, I want to comma-separate the numbers. Here's a little illustration:
123 would be represented as 123
1234 would be represented as 1,234
12345 would be represented as 12,345
...and so on.
I tried adding a comma with TextWatcher as shown below:
EditText edittext = findViewById(R.id.cashGiven);
edittext.addTextChangedListener(new TextWatcher(){
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
editText.setText(separateWithComma(editText.getText().toString().trim()));
}
});
Pasting the separateWithComma() method here would make this question extra lengthy but then, it works: I tested it on Eclipse. I think the addTextChangedListener does not work this way because my app freezes (and then crashes much later) when I do this.
Is there a better way to achieve this? Thanks in anticipation for a positive response.
Try this code:
et.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
et.removeTextChangedListener(this);
try {
String givenstring = s.toString();
Long longval;
if (givenstring.contains(",")) {
givenstring = givenstring.replaceAll(",", "");
}
longval = Long.parseLong(givenstring);
DecimalFormat formatter = new DecimalFormat("#,###,###");
String formattedString = formatter.format(longval);
et.setText(formattedString);
et.setSelection(et.getText().length());
// to place the cursor at the end of text
} catch (NumberFormatException nfe) {
nfe.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
et.addTextChangedListener(this);
}
});
See this post
Try to use String.format instead of what you have now.
Replace this:
editText.setText(separateWithComma(editText.getText().toString().trim()));
with this:
editText.setText(String.format("%,d", your number));
Another thing - your app may be getting this crash because every time that you are calling setText() inside afterTextChanged, another afterTextChanged is called and basically will create an infinite loop. If that is your problem you can find a good solution in here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With