Android EditText在追加后替换字符
我想让一个数字看起来像这样 932-874838/9 我用我的EditText将Android EditText在追加后替换字符,android,kotlin,android-edittext,Android,Kotlin,Android Edittext,我想让一个数字看起来像这样 932-874838/9 我用我的EditText将-和/附加在一些空格之后 editText.addTextChangedListener(object : TextWatcher { override fun afterTextChanged(text: Editable?) { } override fun beforeTextChanged(s: CharSequence?, sta
-
和/
附加在一些空格之后
editText.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(text: Editable?) {
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
onValueChange(s.toString())
}
})
}
private fun onValueChange(value: String) {
mNumberTxtView.text = value
if (value.length == 3) {
mNumberTxtView.append("-")
}
if (value.length == 10) {
mNumberTxtView.append("/")
}
}
当我像这样打字的时候
932
它会自动附加-
,这样就行了,但在附加-
之后,如果我键入另一个数字,它会用该数字替换-
,而不是继续,因此它最初会变为932-
,但在尝试输入另一个数字时
9328
它被替换为删除附加的-
我认为问题出在
onValueChange()
方法中onValueChange
应该是这样的:
var test: StringBuilder = StringBuilder()
var lastValue: String = ""
fun onValueChange(value: String) {
if(lastValue.length > value.length) {
test.deleteCharAt(test.lastIndex)
if(test.length == 3 || test.length == 10) {
test.deleteCharAt(test.lastIndex)
}
} else {
test.append(value.last())
if (test.length == 3) {
test.append("-")
} else if (test.length == 10) {
test.append("/")
}
}
lastValue = value
textView.text = test
}
onValueChange
应该是这样的:
var test: StringBuilder = StringBuilder()
var lastValue: String = ""
fun onValueChange(value: String) {
if(lastValue.length > value.length) {
test.deleteCharAt(test.lastIndex)
if(test.length == 3 || test.length == 10) {
test.deleteCharAt(test.lastIndex)
}
} else {
test.append(value.last())
if (test.length == 3) {
test.append("-")
} else if (test.length == 10) {
test.append("/")
}
}
lastValue = value
textView.text = test
}
试试这个
private fun onValueChange(value: String) {
if (value.length == 3) {
mNumberTxtView.text = "${value}_"
} else if (value.length == 10) {
mNumberTxtView.text = "${value}/"
}
}
让我知道这是否有效
(字符串中围绕“value”的花括号可能没有必要。我仍然习惯于Kotlin处理字符串连接的方式。)
编辑以删除冗余和可能导致循环的零件。请尝试此操作
private fun onValueChange(value: String) {
if (value.length == 3) {
mNumberTxtView.text = "${value}_"
} else if (value.length == 10) {
mNumberTxtView.text = "${value}/"
}
}
让我知道这是否有效
(字符串中围绕“value”的花括号可能没有必要。我仍然习惯于Kotlin处理字符串连接的方式。)
编辑以删除冗余和可能导致循环的部分。您不应在
文本更改之前的和文本更改之后的中更改文本,以防止文本观察者重新调用这些方法。在后文本更改中进行更改
。
但要小心不要让自己陷入无限循环,因为您所做的任何更改都会导致再次递归调用此方法
因此,将调用onValueChanged
设置为posterextchanged
方法
删除mNumberTxtView.text=value
后,您不应在文本更改前和文本更改后更改文本,以防止文本观察者重新调用这些方法。在后文本更改中进行更改
。
但要小心不要让自己陷入无限循环,因为您所做的任何更改都会导致再次递归调用此方法
因此,将调用onValueChanged
设置为posterextchanged
方法
删除mNumberTxtView.text=value
只会有一个问题,当我删除一个数字时,它会不断向文本中添加数字,并在您的时间内大量崩溃。只有一个问题,当我删除一个数字时,它会不断向文本中添加数字,并在您的时间内大量崩溃