2014-01-27 3 views
0

Я пытаюсь получить, что пользователь внес изменения в EditText, либо вставить, либо удалить. Я использую TextWatcher, но я не получаю правильный результат, более того, иногда «getChar (начало, конец) имеет конец перед запуском».Поиск изменения текста в EditText с помощью TextWatcher

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)

EDIT:

я, кажется, чтобы понять это ... это довольно глупо: 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());'? и есть только «Редактируемый s» в 'afterTextChanged', поэтому я не вижу, как эта обратная связь помогает. ' – 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