Более простой способ проверки формы
«Вы ничего не поймете, пока не узнаете больше, чем одним способом»
Несколько дней назад я работал над проектом, в котором мне нужно было реализовать проверку формы для textInputLayout
и textInputEditText
с использованием привязки данных. К сожалению, для этого недостаточно документации.
Наконец, я добился того, чего хотел, благодаря некоторым исследованиям и экспериментам. Вот чего я хотел добиться:
Итак, я знаю, что есть много разработчиков, которым нужны те же действия и удобное для пользователя поведение в формах. Давайте начнем.
Что мы собираемся использовать?
Я собираюсь разбить весь проект на этапы, чтобы вам было легче понять.
1 Настройте исходный проект и включите привязку данных из build.gradle(:app)
, добавив эту строку под тегом android{}
:
dataBinding{ enabled true }
Чтобы использовать textInputLayout
и textInputEditText
, вам необходимо включить поддержку материалов для Android, добавив эту зависимость в build.gradle(:app)
:
implementation 'com.google.android.material:material:1.2.1'
Сделаем макет нашей формы. Я делаю это простым, потому что моя цель - определить основную функциональную часть этой функции, а не разрабатывать макет.
Я сделал этот простой макет:
Вот activity_main.xml
:
Если вас не интересуют теги
<layout>
, не беспокойтесь. Об этом я рассказывал в предыдущей статье.
Наш макет готов. А теперь займемся кодированием.
2Если вы посмотрите на GIF окончательного приложения (ранее в статье), вы увидите, как ошибки отображаются и скрываются соответственно, когда условия становятся true
. Это потому, что я связал каждое текстовое поле с TextWatcher
, который постоянно вызывается, когда пользователь вводит что-то в поле.
Здесь я создал внутри MainActivity.kt
класс, унаследованный от TextWatcher
:
Не беспокойтесь о view
, который передается в конструкторе класса. Я определю это позже.
3 Вот основная часть. Каждое текстовое поле имеет некоторые условия, которые должны быть true
перед отправкой формы. Итак, код для каждого условия текстового поля выглядит следующим образом:
4Пришло время связать каждое текстовое поле с классом textWatcher
, который мы создали ранее:
Но как TextFieldValidation
узнать, какое текстовое поле нужно привязать? Прокрутите вверх и посмотрите комментарий, который я упомянул внутри метода TextFieldValidation
:
// checking ids of each text field and applying functions accordingly.
Обратите внимание, что я передаю представление внутри конструктора TextFieldValidation
, класса, который отвечает за разделение каждого текстового поля и применение каждого из вышеперечисленных методов следующим образом:
Ваш последний MainActivity.kt
будет выглядеть так:
Запустите приложение и увидите волшебство:
Вы можете скачать полный исходный код этого проекта ниже:
Надеюсь, вы узнали что-то новое. Следите за новостями, чтобы увидеть больше подобных статей. Удачного кодирования!
Следуйте CodixLab для получения дополнительных технических знаний.