2

我在 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”获取值,都是一样的。

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

4

2 回答 2

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));
            }
于 2013-02-09T04:31:52.873 回答
1

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

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

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

于 2013-02-09T17:02:51.593 回答