некоторые EditTexts только с одним TextWatcher

Я пытаюсь использовать интерфейс TextWatcher, чтобы определить, какой EditText был изменен. У меня есть активность с 10 EditTexts, и выглядит странно использовать 10 TextWatchers для каждого из них.

Есть ли способ использовать только один TextWatcher и использовать оператор switch для Editable в функциях afterTextChanged?


person galvan    schedule 06.03.2013    source источник
comment
Вам обязательно следует проверить это решение. Он использует один TextWatcher для нескольких EditText.   -  person Matthias Robbers    schedule 06.03.2013


Ответы (2)


Я бы создал класс, расширяющий EditText, и создал TextWatcher в этом классе. Затем вы можете реализовать эти EditTexts в своем XML или создать их программно на Java с прослушиванием TextWatcher для каждого EditText.

Не знаю, сработает ли это для вас, но вы можете попробовать.

person the-ginger-geek    schedule 06.03.2013

Я никогда не пробовал это раньше, но это должно сработать, если вы проверите, находится ли EditText в фокусе. Есть несколько способов сделать это, и самый простой — проверить фокус EditText внутри ваших TextWatcher методов. Вам нужно будет сделать что-то вроде этого:

if(mEdit1.hasFocus()) {
  ...
} else if(mEdit2.hasFocus()) {
  ...
} else if(mEdit3.hasFocus()) {
  ...
}

Другой подход заключается в использовании OnGlobalFocusChangeListener в корневом представлении. и установите переменную, указывающую, что EditText в настоящее время имеет фокус. По-прежнему потребуется много операторов if, чтобы проверить, какой EditText имеет фокус, но это может быть более многоразовое решение.

person ebarrenechea    schedule 06.03.2013
comment
Так что мне также нужно реализовать OnFocusChangeListener? - person galvan; 06.03.2013
comment
Нет, вам просто нужно реализовать это за один раз. Либо сделайте это внутри вашего TextWatcher (или во вспомогательном методе), либо сделайте это внутри OnGlobalFocusChangeListener. - person ebarrenechea; 06.03.2013