I have an EditText with a date mask. And when you call the listener, the application crashes.
Arraylist ad for EditText s:
ArrayList<EditText> ListDocumentExpiry = new ArrayList<>(); In the loop:
ListBirthDate.get(i).addTextChangedListener(Mask.insert("##.##.####", ListBirthDate.get(i))); Mask class:
public abstract class Mask { public static String unmask(String s) { return s.replaceAll("[.]", "").replaceAll("[-]", "") .replaceAll("[/]", "").replaceAll("[(]", "") .replaceAll("[)]", ""); } public static TextWatcher insert(final String mask, final EditText ediTxt) { return new TextWatcher() { boolean isUpdating; String old = ""; public void onTextChanged(CharSequence s, int start, int before,int count) { String str = Mask.unmask(s.toString()); String mascara = ""; if (isUpdating) { old = str; isUpdating = false; return; } int i = 0; for (char m : mask.toCharArray()) { if (m != '#' && str.length() > old.length()) { mascara += m; continue; } try { mascara += str.charAt(i); } catch (Exception e) { break; } i++; } isUpdating = true; ediTxt.setText(mascara); ediTxt.setSelection(mascara.length()); } public void beforeTextChanged(CharSequence s, int start, int count, int after) {} public void afterTextChanged(Editable s) { ediTxt.setError(null); } }; } } Here is the error itself:
FATAL EXCEPTION: main java.lang.StackOverflowError at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1013) at android.text.SpannableStringBuilder.getChars(SpannableStringBuilder.java:913) at android.text.TextUtils.getChars(TextUtils.java:70) at android.text.method.ReplacementTransformationMethod$ReplacementCharSequence.getChars(ReplacementTransformationMethod.java:151) at android.text.TextUtils.getChars(TextUtils.java:70) at android.text.TextUtils.indexOf(TextUtils.java:103) at android.text.StaticLayout.generate(StaticLayout.java:182) at android.text.DynamicLayout.reflow(DynamicLayout.java:284) at android.text.DynamicLayout.<init>(DynamicLayout.java:170) at android.widget.TextView.makeSingleLayout(TextView.java:5843) at android.widget.TextView.makeNewLayout(TextView.java:5741) at android.widget.TextView.checkForRelayout(TextView.java:6280) at android.widget.TextView.setText(TextView.java:3547) at android.widget.TextView.setText(TextView.java:3405) at android.widget.EditText.setText(EditText.java:80) at android.widget.TextView.setText(TextView.java:3380) at kz.tem_tour.Booking.Mask$1.onTextChanged(Mask.java:40) at android.widget.TextView.sendOnTextChanged(TextView.java:7079) at android.widget.TextView.setText(TextView.java:3550) at android.widget.TextView.setText(TextView.java:3405) at android.widget.EditText.setText(EditText.java:80) at android.widget.TextView.setText(TextView.java:3380) at kz.tem_tour.Booking.Mask$1.onTextChanged(Mask.java:40) at android.widget.TextView.sendOnTextChanged(TextView.java:7079) at android.widget.TextView.setText(TextView.java:3550) at android.widget.TextView.setText(TextView.java:3405) at android.widget.EditText.setText(EditText.java:80) at android.widget.TextView.setText(TextView.java:3380) at kz.tem_tour.Booking.Mask$1.onTextChanged(Mask.java:40) at android.widget.TextView.sendOnTextChanged(TextView.java:7079) at android.widget.TextView.setText(TextView.java:3550) at android.widget.TextView.setText(TextView.java:3405) at android.widget.EditText.setText(EditText.java:80) at android.widget.TextView.setText(TextView.java:3380) at kz.tem_tour.Booking.Mask$1.onTextChanged(Mask.java:40) at android.widget.TextView.sendOnTextChanged(TextView.java:7079) at android.widget.TextView.setText(TextView.java:3550) at android.widget.TextView.setText(TextView.java:3405) at android.widget.EditText.setText(EditText.java:80) at android.widget.TextView.setText(TextView.java:3380) at kz.tem_tour.Booking.Mask$1.onTextChanged(Mask.java:40) at android.widget.TextView.sendOnTextChanged(TextView.java:7079) at android.widget.TextView.setText(TextView.java:3550) at android.widget.TextView.setText(TextView.java:3405) at android.widget.EditText.setText(EditText.java:80) at android.widget.TextView.setText(TextView.java:3380) at kz.tem_tour.Booking.Mask$1.onTextChanged(Mask.java:40) at android.widget.TextView.sendOnTextChanged(TextView.java:7079) at android.widget.TextView.setText(TextView.java:3550) at android.widget.TextView.setText(TextView.java:3405) at android.widget.EditText.setText(EditText.java:80) at android.widget.TextView.setText(TextView.java:3380) at kz.tem_tour.Booking.Mask$1.onTextChanged(Mask.java:40) at android.widget.TextView.sendOnTextChanged(TextView.java:7079) at android.widget.TextView.setText(TextView.java:3550) at android.widget.TextView.setText(TextView.java:3405) at android.widget.EditText.setText(EditText.java:80) at android.widget.TextView.setText(TextView.java:3380) at kz.tem_tour.Booking.Mask$1.onTextChanged(Mask.java:40) at android.widget.TextView.sendOnTextChanged(TextView.java:7079) at android.widget.TextView.setText(TextView.java:3550) at android.widget.TextView.setText(TextView.java:3405) at android.widget.EditText.setText(EditText.java:80) at android.widget.TextView.setText(TextView.java:3380) at kz.tem_tour.Booking.Mask$1.onTextChanged(Mask.java:40) at android.widget.TextView.sendOnTextChanged(TextView.java:7079) at android.widget.TextView.setText(TextView Tell me what am doing wrong?
setTextmethod callsonTextChanged, which callssetText, which callsonTextChanged, which callssetText, which callsonTextChanged, which callssetText, which callsonTextChanged... - Vladyslav Matviienko