2013-02-09 62 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

相關問題