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()。。。只需修改您收到的可编辑文件。。。