Comments 11
Мысль хорошая, спасибо. Рекомендую добавить возможность стилизации: кастомизация иконок к примеру. Алсо, было бы неплохо добавить конструкторы к чекерам, которые бы принимали идентификатор ресурса вместо строки, чтобы не писать везде getString(). Правда, тогда придется еще объект ресурсов передавать, или контекст.
+1
А чем не устроил TextWatcher?
0
Тем, что он не является валидатором, а только сообщает об изменениях текста. Собственно, вотчер и используется валидатором, чтобы определять, когда нужно перепроверить условия (если конечно валидатор не работает в «ручном» режиме).
0
Все равно не понимаю, зачем столько городить.
Ну вот допустим проверка на числовое значение:
Ну вот допустим проверка на числовое значение:
private class DigitWatcher implements TextWatcher {
// я оставлю только 1 нужный метод
public void afterTextChanged(Editable s) {
if (!TextUtils.isDigitsOnly(s)) {
// проверка не прошла
}
}
}
0
Чтобы обрабатывать несколько разных полей ввода (на форме их обычно много) нам пришлось бы или вешать на каждое по вотчеру и выносить проверки в отдельный код, или делать большой свич в одном вотчере, чтобы различать, какое именно поле изменилось.
Плюс в валидаторы добавляются чекеры в нужном порядке и каждый со своим сообщением об ошибке, этот код потом гораздо проще поддерживать.
Если не использовать группировку валидаторов (она нужна далеко не всем) и внешние вьюхи для ошибок, кода будем совсем не много. Попробуйте добавить в свой пример еще хотя бы отдельную проверку на пустоту строки и вывод разных сообщений об ошибках, и вы увидите, что кода получится уже не мало.
Плюс в валидаторы добавляются чекеры в нужном порядке и каждый со своим сообщением об ошибке, этот код потом гораздо проще поддерживать.
Если не использовать группировку валидаторов (она нужна далеко не всем) и внешние вьюхи для ошибок, кода будем совсем не много. Попробуйте добавить в свой пример еще хотя бы отдельную проверку на пустоту строки и вывод разных сообщений об ошибках, и вы увидите, что кода получится уже не мало.
0
pastebin.com/EgExint2
Вот так?
Вот так?
0
Да, примерно так. Вроде, уже не мало, и это они только для одного поля показывают сообщение, а если назначить их на другое поле, то понадобится еще и новый экземпляр WatcherErrorNotifier (либо класс придется расширить).
Кроме того АПИ в явном не гарантирует порядок оповещения вотчеров, добавленных через addTextChangedListener.
Кроме того АПИ в явном не гарантирует порядок оповещения вотчеров, добавленных через addTextChangedListener.
0
полезно. спасибо
0
Sign up to leave a comment.
Валидаторы ввода под Android