Обзор и пример использования библиотеки Butter Knife в Android - javadevblog.com

Обзор и пример использования библиотеки ButterKnife в Android

В этом уроке мы рассмотрим преимущества использования популярной Android библиотеки ButterKnife. Узнаем зачем она нужна и когда ее лучше использовать.

Краткий обзор библиотеки ButterKnife в Android

ButterKnife — инструмент байндинга (с англ. «связывание»), который использует аннотации для генерации шаблонного кода. Основная задача библиотеки состоит в том, чтобы избавить нас от избыточного кода, множественного использования findViewById(R.id.some_view)при работе с View. Вместо этого используются лаконичные аннотации и код выглядит намного чище и элегантнее.

Чтобы начать пользоваться библиотекой ButterKnife, добавьте в секцию зависимостей (dependencies) следующие строчки:

Обратите внимание:

  • Последние 3 цифры (8.4.0 -версия библиотеки) наверняка изменятся, поэтому когда будете использовать этот код в своей приложении, не забудьте посмотреть актуальную версию в репозитории на Github.
  • Не забудьте вставить в зависимости annotationProcessor для корректной работы с аннотациями.

Также Android Studio может потребовать от Вас более актуальную версию Android Support Repository и сама предложит установить обновление — соглашайтесь.

В результате Ваш скрипт build.gradle должен выглядеть примерно так:

Обзор аннотаций ButterKnife

Ниже представлены самые популярные и полезные аннотации библиотеки ButterKnife. Они затрагивают работу с виджетами внутри Activity, во фрагментах, работу с ресурсами, обработкой событий и много другое.

У нас есть activity_main.xml, в котором описанны какие-то виджеты.

Задача: нам нужно их инициализировать в коде и как-то использовать в дальнейшем. Ниже представлены решения, которые представляет ButterKnife.

Аннотация @BindView

Наиболее популярной является аннотация @BindView, которая отвечает за автоматическое связывание описанной View с ее xml-представлением в файле компоновке по указанному идентификатору.

Подробнее об аннотациях в Java.

1.1 Пример использования @BindView

Сгенерированный код для приведенного выше примера с ButterKnife.bind(this) примерно эквивалентен следующему:

1.2 Связывание ресурсов в ButterKnife

В библиотеке уже предопределенные аннотации для работы с ресурсами: @BindInt, @BindString@BindDimen, @BindDrawable@BindBool, @BindColor, который связывает идентификатор с объявленным виджетом. Пример инициализации некоторых ресурсов с помощью ButterKnife:

2. Пример использования @BindView вне активности

Если мы хотим использовать ButterKnife в каком-то фрагменте или адаптере, то нам нужно явно указать View, который нужно использовать для связывания виджетов.

Этот подход также работает и в адаптере, например, когда мы работаем с ListView. Смотрим пример:

3. Аннотация @BindViews — Работа с несколькими View

ButterKnife предоставляет аннотацию @BindViews для удобной работы с множеством объектов View. Например, мы определяем массив или список идентификаторов виджетов и применяем метод ButterKnife.apply() с каким-то действием. Действия предопределяет программист с помощью интерфейсов Action и Setter.  Пример ниже:

Задаем список:

Теперь применяем какое-то действие к списку:

Теперь указанное действие будет применено к множеству View всего одним вызовом метода apply().

Аннотация @OnClick

С помощью ButterKnife в Android можно задавать слушатели всего одной аннотацией:

Обратите внимание, что аргумент метода performSend() не обязательный, то есть мы могли просто написать public void performSend() {...}.

Также мы могли бы передать в параметры метода какой-то View (например, Button) — произойдет автоматическое приведение типов:

Также можно указывать множество идентификаторов — для них будет установлено выбранное действие:

Метод findById

Также ButterKnife предоставляет статический метод findById(), который упрощает работу внутри компонентов типа Dialog или View:

На этом наше знакомство с библиотекой Butter Knife подошло к концу, поэтому давайте подобьем итоги:

  • работа с ресурсами через аннотации;
  • заменяет громоздкие внутренние анонимные классы (например, слушатели нажатий) одной аннотацией @OnClick;
  • позволяет формировать списки или массивы из View и применять к ним какие-то действия;
  • уменьшает количество обязательного кода, связанного с findViewById() всего-лишь одной аннотацией @BindView.

Мое мнение: библиотека очень интересная и удобная, но в небольших проектах преимущества ее использования кажутся сомнительными — я бы все-таки использовал ее в средних или даже больших проектах. Мне кажется, там она сможет проявить себя во всей красе: заметно уменьшит количество кода, сделает большие классы более читабельными. Однако, как и любая другая библиотека, она имеет свой порог вхождения и для начинающих Android разработчиков возможно будет сложно на первых порах.

Следите за обновлениями!

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

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