Android PostTextChanged()中的setText()按相反顺序显示文本
我的代码:Android PostTextChanged()中的setText()按相反顺序显示文本,android,android-edittext,Android,Android Edittext,我的代码: fractionNumEt.addTextChangedListener(new TextWatcher() { boolean ignoreChange = false; @Override public void afterTextChanged(Editable s) { if(!ignoreChange) { String string = String.val
fractionNumEt.addTextChangedListener(new TextWatcher() {
boolean ignoreChange = false;
@Override
public void afterTextChanged(Editable s) {
if(!ignoreChange) {
String string = String.valueOf(s);
if (string.length() > 2) {
string = string.substring(0, string.length() - 1);
ignoreChange = true;
fractionNumEt.setText(string);
ignoreChange = false;
}
}
}
我试图将字符长度限制为2,但希望继续收听。当我输入'1','2'时,它显示“12”,这很好。现在当我输入'3'时,它写的是'31'而不是'23'。
到底发生了什么事!
我还尝试:
string = string.substring(1, string.length());
在这种情况下,它第一次只起作用,然后什么也没有改变。这是因为在
setText()
之后,EditText的光标返回到第一个位置。然后,任何新的数字都将在字符串请求时添加
尝试按如下方式更新代码:
@Override
public void afterTextChanged(Editable s) {
if(!ignoreChange) {
String string = String.valueOf(s);
if (string.length() > 2) {
string = string.substring(0, string.length() - 1);
ignoreChange = true;
fractionNumEt.setText(string);
fractionNumEt.setSelection(fractionNumEt.getText().length());
ignoreChange = false;
}
}
}
只是一个建议
检查可编辑文档
我想你不需要把它转换成字符串<代码>后文本更改(可编辑的)接收可编辑的as参数。你可以直接改变它。不需要将其转换为字符串
此外:您甚至不需要使用EditText.setText(),因为在可编辑文本中的任何更改都将自动传递给EditText(因为android调用了posterextchanged
,让您有机会在几分钟前更新文本,以便在EditText中有效显示该文本)
也许是这样的:
@Override
public void afterTextChanged(Editable s) {
if(!ignoreChange) {
if(s.length() > 2) {
s.delete(s.length() - 1,s.length());
}
}
}
玩一下Editable,你会发现它更简单。为什么要使用String String=String.valueOf(s);忽略这一点,我只是在尽一切可能使用String=s.toString()@乌斯曼:我用一个建议更新我的答案。我认为您不需要转换为字符串,也不需要使用EditText.setText()。。。只需修改您收到的可编辑文件。。。