Обзор библиотеки ButterKnife.

В Android для работы с компонентами пользовательского интерфейса из активности или фрагментов приходится писать довольно много лишнего boilerplate-кода. Наверня-ка вам уже порядок надоело использовать все эти findById() с дальнейшим приведением типа. К счастью, небезызвестный Jake Wharton написал для решения этой проблемы библиотеку под названием ButterKnife. Для начала еще раз взглянем на привычный нам код без использования данной библиотеки:

Пусть у нас имеется одна активность с двумя полями EditText для ввода суммы и процентов от суммы, TextView для вывода результата и одну обычную кнопку — Button. Для инициализации всех компонентов и возможности работать с ними из кода без использования ButterKnife вы бы написали примерно следующий код:

Тому, кто хоть раз писал под Android не нужно объяснять насколько это утомительное занятие — получение ссылок на все компоненты UI.

Теперь посмотрим на тот же код уже с использованием ButterKnife. Подключим библиотеку, добавив следующие строчки в файл gradle:

Библиотека использует кодогенерацию, благодаря чему не замедляется работа вашего приложения, а сгенерированный код всегда можно просмотреть. Итак, теперь посмотрим на работу библиотеки в действии:

Одна аннотация @BindView, в качестве параметра которой мы указываем идентификатор компонента и все! Никаких бесконечных findById() и приведений типов. Все произойдет автоматически и без нашего участия. Не забудьте в класс активности добавить строку:

Только так связывание будет работать!

Тем временем ButterKnife «под капотом» сгенерирует что-то вроде этого:

Лично для меня данная библиотека уже вошла в «стандартный набор» библиотек, которые я подключаю перед началом каждого нового приложения. Но связывание вьюшек это еще не все. Давайте рассмотрим еще несколько возможностей библиотеки.

Биндинг ресурсов.

Также как и при работе с компонентами UI, можно получать и значения из других ресурсов — графические изображения, строки. Если кратко, то выглядит так:

Работа с фрагментами и адаптерами.

Точно также, как и с активностью, можно воспользоваться возможностями библиотеки и во фрагментах:

Код почти тот же самый за исключением того, что в метод ButterKnife.bind() мы передаем еще и ссылку на нужный нам view. Ничто не мешает нам использовать биндинг и в адаптерах:

В целом это действительно полезный инструмент, который снизит в вашем проекте количество одинакового boilerplate-кода. Как недостаток данной библиотеки — это необходимость явно прописывать строку ButterKnife.bind() для того, чтобы биндинг работал. Но думается, что это совсем небольшой недостаток и библиотека окажется полезной в ваших проектах.

Назначение обработчиков на клики.

Также легко можно задать обработчик нажатия на компонент с заданным id:

На практике при использовании всех этих возможностей вкупе с каким-нибудь MVP код кажется действительно чище и проще читается.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *