Android 在beforeTextChange中,值已更改

Android 在beforeTextChange中,值已更改,android,android-edittext,textwatcher,Android,Android Edittext,Textwatcher,我在EditText上有一个TextWatcher。在beforeTextChanged中,我发现EditText值已经更改。下面是一段代码: @Override public void beforeTextChanged (CharSequence s, int start, int lengthBefore, int lengthAfter) { // restoreValue = text.getText().toString(); String restoreValue =

我在EditText上有一个TextWatcher。在beforeTextChanged中,我发现EditText值已经更改。下面是一段代码:

@Override
public void beforeTextChanged (CharSequence s, int start, int lengthBefore, int lengthAfter)
{
//      restoreValue = text.getText().toString();
  String restoreValue = s.toString();
  System.out.println ("restore |" + restoreValue + "|");
}
在此函数中,调试输出显示修改的字符串,而不是EditText的原始值。无论我是从“text”(即EditText小部件)还是从“s”获取值,都是一样的


有人对此有可能的原因吗?

请尝试以下代码,它正在工作

public void onTextChanged(CharSequence s, int start, int before, int count) {
                // TODO Auto-generated method stub
                if(count>0)
                Log.e("MIS",""+s.toString().substring(0,count-1));
            }

结果证明答案很简单。安卓正试图变得更聪明,将你的插入内容理解为一个单词,并添加一个空格将其与其他文本分开。因此,它首先插入空格(可能有两个空格,一个在选定区域的两端),然后插入粘贴缓冲区文本

这些操作中的每一个都会导致一个单独的调用beforetextchange。ContextChanged和afterTextChanged也一样


因此,对于粘贴操作,您最多可以得到三组回调。

更多信息:当我执行粘贴操作时,在调用两次ForeTextChanged之前。第一次,它显示正在所选线段的末尾添加空间。第二次是实际粘贴。第一次——插入空格——很奇怪。我需要忽略这一点,不知何故…你只有自动生成的存根。对不起,这也没用。如上所述,问题在于粘贴操作导致两个对ContextChanged的调用,其中一个在粘贴区域的右端带有空白插入。