У меня есть три EditText
виджета в моем представлении. Есть ли способ использовать один TextWatcher
для всех трех EditTexts
?
125
У меня есть три EditText
виджета в моем представлении. Есть ли способ использовать один TextWatcher
для всех трех EditTexts
?
Ответы:
Я только что столкнулся с этой проблемой. Я решил это, создав реализацию внутреннего класса,
TextWatcher
которая принимает в качестве аргумента представление. Затем в реализации метода просто включите представление, чтобы увидеть, из какого изEditable
них исходитДекларация:
Использование:
источник
Single TextWatcher for multiple EditTexts
. Это 3 экземпляра одного класса TextWatcher. Итак, 3 отдельных TextWatcher управляют 3 EditTexts.Если вы хотите использовать только afterTextChanged, сравните редактируемые элементы:
источник
==
вместо.equals()
.Реализация MultiTextWatcher
использование
источник
TextView
исходит изменение.Если вы хотите использовать сравнение onTextChanged,
hashCode()
указанное ниже -Или
Если вы хотите использовать сравнение afterTextChanged,
Editable
указанное ниже -источник
Он будет работать с этим кодом
Затем добавьте это в oncreate
источник
Я знаю, что это старый вопрос и есть правильное решение. Напишу свой, может кому поможет.
Эмуляция классического примера, где у нас N EditText, и мы хотим показать кнопку, если все поля заполнены. Этот пример имеет смысл, особенно если в дальнейшем использовать валидаторы для каждого из них.
Я привел пример по этой проблеме, но вы можете сделать любой набор
MultiEditText.class
Теперь это выглядит очень просто
CustomTextWatcher.class
Добавлю макет, чтобы вы не тратили время зря
multi_edit_text.xml
источник
Ваш класс наследуется от Activity и реализует TextWatcher.
Затем с помощью магии полиморфизма вам просто нужно подписаться на события.
Это не скажет вам, что изменилось в TextEdit, однако, используя комбинацию этого и ответа Скай Келси , вы можете хорошо разобраться в этом.
источник
Затем:
источник
источник
Это мое решение для котлина. Вы можете просто использовать ссылочное равенство (===), чтобы проверить один и тот же объект, и он отлично работает.
источник
Я знаю, что этот вопрос старый, однако я хотел поделиться одним из своих решений (в Котлине). Мое решение - это улучшение ответа @Shwarz Андрея, моя причина заключалась в том, что если вы хотите манипулировать большим количеством вещей / объектов.
Вместо того, чтобы передавать оба
list of EditTexts
и вa Button
качестве параметров, вы должны передать только свойlist of editText
. Затем в своем пользовательском классе вы должны реализовать лямбду, такую как:Затем вы установите или поднимите его внутри
afterTextChanged
источник
Вот как я это сделал:
Создайте ArrayList EditTexts, а затем используйте цикл for для применения TextWatcher для всех EditTexts, если у вас есть одно поведение для всех editTexts, тогда просто примените его там, если у вас есть определенные поведения для некоторых конкретных editTexts, тогда вы можете использовать if оператор для выбора и применения к отдельным editTexts.
Вот мой код:
Надеюсь это поможет
источник
onTextChanged
EditText. ДобавитьonFocusChange
для нескольких виджетов намного проще, потому что он передает объект-отправитель с вызовом метода. Затем вы можете проверить, какой объект инициировал вызов, и обработать его оттуда.