隨意點選一個,例如 others 中的 inst 可以看到這是一個 if instanceof 的程式碼片段,並且中間包含 3 個可編輯的變數及使用 $END$ 來令編輯完後輸入焦點停留在某處
if ($EXPR$ instanceof $TYPE$) {
$TYPE$ $VAR1$ = ($TYPE$)$EXPR$;
$END$
}
利用這些簡單的規則,我們就可以將平時一些常用到,篇幅又長的程式碼片段建立成 Live Template 來提高效率 (帥度),以我自己為例,平時在開發上或撰寫試驗性的小專案時,我是不太喜歡寫 ListView + Adapter 的,因為重覆的程式碼非常的多,雖然可以使用 cmd+N 的方式 Gen 出需 Override 的 Function,但內容只有 return null 並沒有太大的幫助,所以我建立了一個自動產生 Adapter 的 Template 並取名為 newadpt 如下
public class $ADAPTER$ extends BaseAdapter {
class ViewHolder {
}
private Context context;
private LayoutInflater inflater;
private ArrayList<$ITEMTYPE$> $ITEMS$ = new ArrayList<$ITEMTYPE$>();
public $ADAPTER$(Context context, ArrayList<$ITEMTYPE$> $ITEMS$) {
this.context = context;
this.$ITEMS$ = $ITEMS$;
inflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = inflater.inflate(R.layout.$LAYOUT$, parent, false);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
$ITEMTYPE$ model = $ITEMS$.get(position);
$END$
return convertView;
}
@Override
public int getCount() {
return ($ITEMS$ == null) ? 0 : $ITEMS$.size();
}
@Override
public $ITEMTYPE$ getItem(int position) {
return $ITEMS$.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
}
這裡可以看到我加入了 4 個變數,只要我輸入 newadpt 再按 tab 後,依序透過 tab 輸入 MemberListAdapter、Member、members、listview_item_member,就可以產生出以下程式碼片段,接下來我只要在被標為紅字的 Member 上按 option + Enter 再選 Create Class 就可以流暢 (帥氣) 的生出一個給 ListView 使用的 Adapter 如下
public class MemberListAdapter extends BaseAdapter {
class ViewHolder {
}
private Context context;
private LayoutInflater inflater;
private ArrayList<Member> members = new ArrayList<Member>();
public MemberListAdapter(Context context, ArrayList<Member> members) {
this.context = context;
this.members = members;
inflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = inflater.inflate(R.layout.list_view_item_member, parent, false);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
Member model = members.get(position);
return convertView;
}
@Override
public int getCount() {
return (members == null) ? 0 : members.size();
}
@Override
public Member getItem(int position) {
return members.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
}
Visual C# 的版本可以參考這裡:開發團隊的基礎建設 Code Snippet for C#
沒有留言:
張貼留言