Простой способ создать адаптеры для вашего следующего проекта Android

Простой способ создать адаптеры для вашего следующего проекта Android

15 марта 2022 г.

Всем привет.


В разработке Android почти каждый проект имеет один или несколько классов адаптеров для работы с набором представлений, также существует множество различных типов адаптеров, таких как RecyclerAdapter, ListAdapter, Paging2 Adapter, Paging 3 Adapter, ArrayAdapter, ExpandableListAdapter, иногда вам нужно создайте сложный класс адаптера, но в большинстве случаев все, что вам нужно, это связать класс модели с макетом элемента списка и предоставить несколько дополнительных слушателей, и все, так почему мы не можем автоматизировать процесс создания этих классов адаптеров?



Прежде чем говорить о том, как мы будем это автоматизировать, давайте сначала поговорим о том, какую функцию мы хотим и каких проблем мы хотим избежать.



Итак, давайте начнем с функций.


  • Объявите, как легко связать данные с представлениями.

  • Добавляйте слушателей в любое представление или в представление макета основного элемента списка.

  • Поддержка некоторых функций, таких как загрузка изображений с помощью сторонних библиотек, таких как Picasso, Glide, COIL.

  • Поддержка имен по умолчанию и пользовательских имен для класса адаптера.

  • Предоставьте четкие сообщения об ошибках, если мы допустили какие-либо ошибки.

И какой проблемы мы хотим избежать, используя это решение?


  • Добавьте любую стоимость во время выполнения.

  • Написание сложного кода для работы с этим решением.

  • Медленное время сборки.

  • Трудно учиться.

  • ограничение.

Итак, что это за решение?


Решением является EasyAdapter – новая библиотека обработки аннотаций Android, которая может создавать классы адаптеров на основе класса вашей модели и вашей пользовательской информации только во время компиляции.


Итак, как это работает?


EasyAdapter имеет только 2 типа аннотаций: аннотации адаптеров и привязок, первый тип используется для аннотации класса модели, чтобы сообщить EasyAdapter, какой тип адаптера вы хотите создать из этой модели и какой элемент списка вы хотите использовать, например


```javascript


@ListAdapter("com.amrdeveloper.app", "list_item_model")


модель класса


В этом примере сообщается библиотеке, что вы хотите сгенерировать ListAdapter для класса Model и использовать `R.layout.list_item_model` в качестве элемента списка. Вы также можете, например, изменить сгенерированное имя.


```javascript


@ListAdapter("com.amrdeveloper.app", "list_item_model", "ModelAdapter")


модель класса


А в версии 1.0.0 EasyAdapter предоставляет 6 типов адаптеров, которые


  • Адаптер массива

  • Адаптер списка

  • РесайклерАдаптер

  • Адаптер Страничного Списка

  • Адаптер данных подкачки

  • Расширяемый списокадаптер

Вы также можете найти полную документацию о них с примерами на веб-сайте документации.



Второй тип аннотаций — это аннотации привязки. Они используются для привязки или предоставления функций.



Например, чтобы сообщить EasyAdapter, что вы хотите использовать это строковое поле в качестве текста для TextView с идентификатором R.id.user_name, вы можете использовать @BindText.


```javascript


@BindText("user_name") val name : String


и этот код сгенерирует код для загрузки изображения с путем imagePath внутри класса ImageView с идентификатором `R.id.user_avatar`


```javascript


@BindImage(ImageLoader.PICASSO, "user_avatar")


val путь_изображения: строка


Вы также можете использовать аннотацию @BindListener в классе модели, например, для создания прослушивателя для любого представления.


```javascript


@BindListener(ListenerType.OnClick)


@BindListener(ListenerType.OnClick, "кнопка_вызова")


модель класса


EasyAdapter теперь будет генерировать 2 прослушивателя кликов, первый для самого элемента списка, а другой для просмотра с идентификатором R.id.call_button.



В версии 1.0.0 10 аннотаций привязки, которые


  • Биндтекст

  • BindImage

  • BindImageRes

  • Биндбакграундколор

  • BindBackgroundRes

  • БиндАльфа

  • БиндГиф

  • БиндВисибилити

  • BindListener

  • BindExpandable

  • BindExpandableMap

Вы также можете найти полную документацию о них с примерами на веб-сайте документации.



Как видите, пользоваться EasyAdapter несложно, и вы можете легко освоить его за считанные минуты.



Но как на самом деле работает EasyAdapter?



EasyAdapter поддерживает 2 обработчика аннотаций__Kapt (Kotlin Annotation Processing Tool) и KSP (Kotlin Symbol Processing) для просмотра исходного кода и сбора информации из аннотаций с простой проверкой типов, чтобы убедиться, например, что @BindImage аннотирует строковое поле, представляющее путь к изображению, показывает ошибку и предупреждает сообщения, если это необходимо, и после того, как у нас есть вся необходимая информация, мы использовали генераторы кода, которые генерируют исходный код класса адаптера результатов, используя библиотеку kotlinpoet от Square, затем мы пишем это исходный код в файлах адаптера внутри выходного каталога: D. мы пытаемся сделать сгенерированный код как можно более оптимизированным, например, мы избегали вызова изменяемого findViewById с тем же идентификатором. Вместо этого у нас есть класс ViewTable, вдохновленный SymbolTable__ концепция для управления объявленными переменными и их повторного использования.



Это только первая версия, и каждый может помочь улучшить этот инструмент, предлагая функции, сообщая о проблемах и внося свой вклад в базу кода или документацию. Каждый может внести свой вклад.



Репозиторий GitHub:AmrDeveloper/EasyAdapter
Веб-сайт:EasyAdapter


Вы можете найти меня на: GitHubLinkedIn Twitter.


Наслаждайтесь программированием 😋.


  • Впервые опубликовано здесь.*


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE