I need to format the data entered in EditText as DD/MM/YY. When user enters 2 digits for day (DD), a '/' should be inserted, then after the user enters 2 digits for month (MM) naother '/' has to be inserted.
I tried to achieve it with TextWatcher as:
editText?.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(charSequence: CharSequence?, i: Int, i1: Int, i2: Int) {}
override fun onTextChanged(charSequence: CharSequence?, i: Int, i1: Int, i2: Int) {
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
override fun afterTextChanged(editable: Editable?) {
var s: String = editable.toString()
if (editable.toString() != "" && editable.toString() != " ") {
//Below code for formatting date as DD/MM/YYYY
var str = s
if (s.contains("/")) {
str = s.replace("/", "") //Remove all '/'
}
if (str.length == 2 ) {
str= str.toCharArray().also { it[2] = '/' }.joinToString("")
}
else if (str.length == 4) {
str = str.toCharArray().also { it[2] = '/' }.joinToString("")
str = str.toCharArray().also { it[5] = '/' }.joinToString("")
}
editText.removeTextChangedListener(this) //To prevent infinite loop
editText.setText(str)
editText.setSelection(editText.length()) //fix reverse texting
editText.addTextChangedListener(this)
}
}
But my app crashes after I type the second character in EditText.
Please suggest a solution.