Страницы

четверг, 16 сентября 2010 г.

Отслеживание изменений в EditText

В компоненте EditText, использующемся для редактирования текста, как нетрудно догадаться, нет методов позволяющих отслеживать изменение текста в поле ввода. Но реализовать этот функционал конечно же возможно.

Для отслеживания изменений в EditText нужно создать класс, реализующий интерфейс TextWatcher. Интерфейс содержит определения методов afterTextChanged, beforeTextChanged, onTextChanged, вызываемых соответственно после изменения текста, перед изменением и собственно во время изменения. Затем этот класс нужно зарегистрировать для отслеживаемого контрола EditText при помощи метода addTextChangedListener().

Рассмотрим на примере. Имеется несколько EditText'ов. Изначально видимым является только один, остальные скрыты. Требуется отслеживать в них изменения и при условии наличия текста в первом, показывать второй контрол, и наоборот, при условии отсутствия текста в первом контроле скрывать второй. Реализуется это несложным кодом:

  private class Watcher implements TextWatcher {
    protected EditText linkedView;
   
    public Watcher(EditText linkedView) {
      this.linkedView = linkedView;
    }
   
    public void afterTextChanged(Editable s) {
      if (s.length() > 0) {
        linkedView.setVisibility(View.VISIBLE);
      } else {
        linkedView.setVisibility(View.GONE);
      }
    }

    public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
    public void onTextChanged(CharSequence s, int start, int before, int count) { }
  };

    participantEdits[0].addTextChangedListener(new Watcher(participantEdits[1]));


* This source code was highlighted with Source Code Highlighter.


Код довольно прост: отлавливаем событие после изменения текста и в зависимости от длины текста скрываем или отображаем привязанный контрол.

Комментариев нет:

Отправить комментарий