TextWatcher для более чем одного EditText - PullRequest
64 голосов
/ 26 ноября 2010

Я хочу реализовать интерфейс TextWatcher для нескольких полей EditText. В настоящее время я использую:

text1.addTextChangedListener(this);
text2.addTextChangedListener(this);

затем переопределяю методы в моей Деятельности:

public void afterTextChanged(Editable s) {}

public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) 
{
 // do some operation on text of text1 field
 // do some operation on text of text2 field 
}

Однако это работает нормально, но я ищу другие способы, чтобы я мог явно определить, в каком поле EditText находится фокус SoftKeyboard.

Ответы [ 14 ]

0 голосов
/ 06 октября 2018

Вы можете сделать это для получения идентификатора редактируемых текстов. Это не проверено, но дайте мне знать, если это работает.

//setting textWatcher for the editText
textWatcher(owner_name);


public void textWatcher(final EditText editText){

    TextWatcher watcher = new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

           if(editText.getId()==R.id.your_id){
             //Do something
           }   
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
          if(editText.getId()==R.id.your_id){
          //Do something
          }
        }

        @Override
        public void afterTextChanged(Editable s) { }
    };

    editText.addTextChangedListener(watcher);
}
0 голосов
/ 21 декабря 2017

Вот что я сделал ...

private TextWatcher textWatcher = new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

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

        if (editText1.getText().length() > 0
                && editText2.getText().length() > 0
                && editText3.getText().length() > 0) {

            button.setEnabled(true);
        } else {

            button.setEnabled(false);
        }

    }

    @Override
    public void afterTextChanged(Editable s) {

    }

Затем просто добавили TextWatcher к каждому EditText в методе onCreate и также сохранили здесь кнопку setEnabled (false) по умолчанию.

button.setEnabled(false); 

    editText1.addTextChangedListener(textWatcher);
    editText2.addTextChangedListener(textWatcher);
    editText3.addTextChangedListener(textWatcher);
0 голосов
/ 23 ноября 2017

просто сравните хэш-коды текста и строки редактирования, используя hashCode () метод

@Override
public void afterTextChanged(Editable s) {

    if (editext.getText().hashCode() == s.hashCode()){
        type1Total(type1List);
    }

}
0 голосов
/ 30 мая 2014

Вы всегда можете определить TextWatcher как параметр для метода addTextChangedListener. Таким образом, вы можете иметь несколько определений для каждого текста редактирования.

...