Вступление
Привет, коллеги.
Сегодня я хочу поделиться с вами несколькими полезными шаблончиками (templates) для IDE Eclipse, которые помогут вам ускорить некоторые рутинные операции при разработке под под Android. Я пока что использую Eclipse для разработки, но, я уверен, что Idea позволит создавать совершенно аналогичные шаблоны.
Что такое шаблоны? Это заранее заготовленные кусочки кода, которые IDE может быстро подставлять для вас при нажатии на Ctrl+Space. Например, введите «syso» в eclipse, нажмите Ctrl+Space. Бац, у вас появился System.put.println(), или «fore» — у вас появится готовый шаблон для цикла fore each. Более того, данные кусочки параметризированы, и IDE предложит вам ввести имена для нужных переменных.
Если вам это интересно, приступим.
Шаблоны
Для доступа к шаблонам используется меню Window-Preferences-Java-Templates. Там вы увидите список уже готовых шаблонов, а также сможете создать свои.
Давайте посмотрим, какие шаблоны я создал для себя.
Handler
${:import (android.os.Handler, android.os.Message, java.lang.ref.WeakReference)} private static final class ${handler_name} extends Handler { private WeakReference<${enclosing_type}> ${outer}Ref; public ${handler_name}(${enclosing_type} ${outer}) { ${outer}Ref = new WeakReference<${enclosing_type}>(${outer}); } public void handleMessage(Message msg) { } }
Этот простой шаблон позволит моментально создать заготовку для статического Handler’a с обратной ссылкой на внешний класс. Напомню, что создание хендлера как внутреннего класса, не являющегося статическим не рекомендуется. Это может привести к утечке Activity, и призовет лютую ненависть линта по вашу душу.
Немножко модифицировав, мы получаем шаблон для AsyncQueryHandler.
${:import (android.os.AsyncQueryHandler, android.content.ContentResolver, java.lang.ref.WeakReference)} private static final class ${handler_name} extends AsyncQueryHandler { private WeakReference<${enclosing_type}> ${outer}Ref; public ${handler_name}(ContentResolver cr, ${enclosing_type} ${outer}) { super(cr); ${outer}Ref = new WeakReference<${enclosing_type}>(${outer}); } }
Parcelable
Создание Parcelable, как известно, требует выполнения однотипных шаблонных действий. Что если нам их автоматизировать?
${:import (android.os.Parcel, android.os.Parcelable)} public static class ${parcelable_class} implements Parcelable { public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { // TODO: serialize your properties here } public static final Parcelable.Creator<${parcelable_class}> CREATOR = new Parcelable.Creator<${parcelable_class}>() { public ${parcelable_class} createFromParcel(Parcel in) { return new ${parcelable_class}(in); } public ${parcelable_class}[] newArray(int size) { return new ${parcelable_class}[size]; } }; private ${parcelable_class}(Parcel in) { // TODO: deserialize your properties here } }
Этот шаблон позволит нам создать полноценный Parcelable класс, в то время как следующий
${:import (android.os.Parcel, android.os.Parcelable)} public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { // TODO: serialize your properties here } public static final Parcelable.Creator<${enclosing_type}> CREATOR = new Parcelable.Creator<${enclosing_type}>() { public ${enclosing_type} createFromParcel(Parcel in) { return new ${enclosing_type}(in); } public ${enclosing_type}[] newArray(int size) { return new ${enclosing_type}[size]; } }; private ${enclosing_type}(Parcel in) { // TODO: deserialize your properties here }
позволит нам быстро добавить CREATOR в уже существующий класс.
isEmpty
${:import (android.text.TextUtils)}!TextUtils.isEmpty(${cursor})
очень простенький шаблон, позволяющий быстро вставить проверку на пустоту строки.
getView
Ниже представлено типовое создание getView в адаптере с добавлением ViewHolder. Конкретно этому шаблону я научился у Alexandre Thomas (автору Android Kickstartr и контрибутору AndroidAnnotations) на DevConf 2013.
@Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { v = LayoutInflater.from(context).inflate(${layout_name}, null); ViewHolder h = new ViewHolder(); v.setTag(h); } ViewHolder holder = (ViewHolder) v.getTag(); return v; } static class ViewHolder { // ViewHolder fields }
Заключение
Я надеюсь, кому-нибудь эти шаблоны помогут сделать разработку чуть-чуть приятней. Для своих шаблончиков я завел специальный гитхаб репозиторий, который буду стараться пополнять новыми шаблончиками по-мере поступления оных. Файл templates.xml просто импортится в эклипс.
Спасибо за внимание.
ссылка на оригинал статьи http://habrahabr.ru/post/183502/
Добавить комментарий