ファイルテンプレート機能を使って Fragment のテンプレを作る


## はじめに
いろいろ便利な機能があるんですね。最近は Tips of the Day を３回に１回くらい読むようになりました。

導入すれば新たに Fragment なんかを作った時の、あーめんどくさ感が減る気がします。もちろん Fragment 以外にも使えます。
コードの統一感も増して、一石二鳥なので、チームでも個人でも導入する価値ありかと思います！

ちなみに control + o でオーバライドメソッドを簡単に作ることもできます。このショートカットも覚えておくと便利だと思います。

![template3.png](https://qiita-image-store.s3.amazonaws.com/0/39324/28a82535-f6fa-5e88-ffbf-48928c1aa607.png "template3.png")



## 使い方
* [Android Studio]-[Preferences]-[File and Code Templates]の順に選択
* Templates タブで + ボタンをクリック
* テンプレ名を入力し、テンプレコードを入力して保存する

Description エリアに変数の使い方の説明があります。

![template1.png](https://qiita-image-store.s3.amazonaws.com/0/39324/7113ba02-8c5c-73c2-3a46-477da9eb2a46.png "template1.png")


* クラスの新規作成時に、プルダウンから作成したテンプレを選んで実行

超簡単ですね！

![template2.png](https://qiita-image-store.s3.amazonaws.com/0/39324/bfd5e199-0ced-0a93-bd92-470069005190.png "template2.png")


## テンプレサンプル

詳細な説明は割愛します。

### サンプル１
Fragment のレイアウトに Toolbar を配置する Fragment のテンプレ

```java:ToolbarFragment
package ${PACKAGE_NAME};

import android.app.Fragment;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;

#parse("File Header.java")
public class ${NAME} extends Fragment {

    private static final String TAG = ${NAME}.class.getSimpleName();
    private static final String ARG_TITLE = "title";

    public static ${NAME} newInstance(String title) {
        Bundle args = new Bundle();
        args.putString(ARG_TITLE, title);
        ${NAME} fragment = new ${NAME}();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_hoge, container, false);

        Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
        toolbar.setTitle(getArguments().getString(ARG_TITLE));
        toolbar.setNavigationIcon(R.drawable.ic_navigation_hoge);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
            }
        });
        toolbar.inflateMenu(R.menu.hoge);
        toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                return false;
            }
        });

        return view;
    }
}
```

### サンプル２
Fragment で ActionBar のメニューをセットアップするテンプレ

```java:ActionBarFragment
package ${PACKAGE_NAME};

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;

#parse("File Header.java")
public class ${NAME} extends Fragment {

    private static final String TAG = ${NAME}.class.getSimpleName();
    private static final String ARG_HOGE = "hoge";

    public static ${NAME} newInstance(String hoge) {
        Bundle args = new Bundle();
        args.putString(ARG_HOGE, hoge);
        ${NAME} fragment = new ${NAME}();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_hoge, container, false);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        setHasOptionsMenu(true);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.hoge, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return super.onOptionsItemSelected(item);
    }
}
```