2014-01-27 79 views
0

我試圖獲取用戶對EditText所做的修改,無論是插入還是刪除。我使用TextWatcher,但是我沒有得到正確的結果,而且有時候「getChar(start,end)在開始之前已經結束」錯誤。使用TextWatcher在EditText中查找文本更改

editText = (EditText) findViewById(R.id.MyEditText); 
editText.addTextChangedListener(new TextWatcher() { 

    @override 
    public void afterTextChanged(Editable s){} 

    @override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after){ 

     showToast("text removed: " + s.subSequence(start, count)); 
    } 

    @override 
    public void onTextChanged(CharSequence s, int start, int before, int count){ 

     showToast("text added: " + s.subSequence(start, count)); 

    } 



} 

正如你可以看到我用beforeTextChanged得到多數民衆贊成由用戶刪除任何文本,onTextChanged插入。請在這裏說明一些情況。謝謝!

API就在這裏:http://developer.android.com/reference/android/text/TextWatcher.html#afterTextChanged(android.text.Editable)

編輯:

我似乎弄明白......這是相當愚蠢的:s.subSequence(start, count))確實應該s.subSequence(start, start+count))

回答

0

只要保持afterTextChanged裏面的功能和看看會發生什麼

示例代碼

seachbox.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      // TODO Auto-generated method stub 

      fillData(SEARCH_ORDER ,s.toString()); 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      // TODO Auto-generated method stub 


    }); 

我希望它會工作

+0

??什麼是'fillData(SEARCH_ORDER,s.toString());'? ''afterTextChanged'中只有'Editable s',所以我沒有看到這個回調是如何幫助的。 ' – Arch1tect

+0

這就是我實現的方法。你只是把你的代碼放在那裏.. –

0

試試這個,我不知道你是否希望餘下的字(插入/更新後)或字母(添加/刪除)。

public class MainActivity extends Activity implements TextWatcher { 

private EditText myEditText; 
private String inputText; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    myEditText = (EditText) findViewById(R.id.testEditText); 
    myEditText.addTextChangedListener(this); 
} 

@Override 
public void afterTextChanged(Editable s) {  
    if (inputText.length() < s.toString().length()) { 
     Toast.makeText(
       this, 
       ("Text Added: " + s.toString().substring(inputText.length(), 
         s.toString().length())), Toast.LENGTH_SHORT).show(); 
    } 
    else{ 
     Toast.makeText(
       this, 
       ("Text Removed: " + inputText.substring(s.toString().length(), 
         inputText.length())), Toast.LENGTH_SHORT).show(); 
    } 
} 

@Override 
public void beforeTextChanged(CharSequence s, int start, int count, 
     int after) { 
    inputText = s.toString(); 
} 

@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) { 
} 

}

+0

use s.toString()。substring(inputText.length() - (s.toString()。length() - 1 - start),s.toString()。length () - (s.toString()。length() - 1 - start))'允許在EditText的中間插入字符 – natinusala

相關問題