2013-02-09 27 views
2

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

@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的原始值。无论我从“文本”(EditText小部件)还是从“s”获取值都是一样的。

任何人都有可能的原因吗?

+0

有一点信息:当我做一个粘贴操作时,beforeTextChanged被调用两次。这是第一次显示在所选段的末尾添加空格。第二次是实际粘贴。第一次 - 插入空间 - 很奇怪。我需要忽略这个,不知何故... – 2013-02-09 04:01:25

回答

1

原来,答案很简单。 Android正在努力变得聪明,认为你的插入应该是一个词,并添加一个空间来将它与其他文本分开。因此,首先插入空格(可能包含两个空格 - 在选定区域的每一端都有一个空格),然后插入粘贴缓冲区文本。

这些操作中的每一个都会导致对beforeTextChanged的单独调用。 onTextChanged和afterTextChanged相同。

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

1

试试下面的代码,它正在

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)); 
      } 
+0

你什么也没有,但自动生成的存根(stub)。 – 2013-02-09 05:53:20

+0

对不起,这也无济于事。正如我上面所说的那样,问题在于粘贴操作会对onTextChanged发起两个调用,其中一个调用在粘贴区域的右端有一个空白插入。 – 2013-02-09 14:29:55

相关问题