[英]Finding text change in EditText using TextWatcher
我試圖獲取用戶對EditText所做的修改,無論是插入還是刪除。 我使用TextWatcher,但沒有得到正確的結果,而且有時出現“ getChar(start,end)has end before start”錯誤。
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))
只需將函數保留在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
});
我希望它能起作用
試試這個,我不確定您是想要剩余的單詞(插入/更新后)還是字母(添加/刪除)。
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) {
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.