Простой способ создать адаптеры для вашего следующего проекта 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
Вы можете найти меня на: GitHub, LinkedIn , Twitter.
Наслаждайтесь программированием 😋.
- Впервые опубликовано здесь.*
Оригинал