Реализация собственного BindView: аналог ButterKnife
Появление плагина ButterKnife освободило Android-разработчиков от утомительного повторяющегося кода findViewById. Особенно это полезно в сочетании с различными плагинами для автоматической генерации кода в Android Studio.
Принцип работы ButterKnife, вероятно, известен всем. Он использует AbstractProcess для автоматического создания кода findViewById для аннотации BindView во время компиляции. Метод ButterKnife#bind(Activity) по существу вызывает автоматически сгенерированный код findViewById.
Однако когда мне потребовалось разобраться в этих деталях реализации, я решил изучить исходный код ButterKnife. Проект ButterKnife включает множество аннотаций, и изучение их может занять некоторое время. Основываясь на своём опыте работы над этим проектом, я создал собственную аннотацию BindView, чтобы помочь другим лучше понять процесс.
Ссылка на GitHub
Мой проект уже загружен на GitHub, и я приглашаю всех желающих поставить ему «звёздочку». Нажмите здесь, чтобы увидеть MyButterKnife.
Структура проекта
@BindView(R.id.btn)
protected Button mBtn;
@AutoService(Processor.class)
@SupportedSourceVersion(SourceVersion.RELEASE_7)
public class BindProcess extends AbstractProcessor{
private Elements mElementsUtil;
/**
* key: enclosed elemnt
* value: inner views with BindView annotation
*/
private Map<TypeElement,Set<Element>> mElems;
@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
super.init(processingEnv);
mElementsUtil = processingEnv.getElementUtils();
mElems = new HashMap<>();
}
// ...
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )