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