Несколько полезных шаблонов для Android-разработки под eclipse

от автора

Вступление

Привет, коллеги.

Сегодня я хочу поделиться с вами несколькими полезными шаблончиками (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/


Комментарии

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

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