Posted at

全てのAndroid開発者に見て欲しい、これが最強のFragmentテンプレート

More than 3 years have passed since last update.

プログラミング大好きベーシック Advent Calendar 2015の記事になります。

koitaroさんからバトンを受け取りました!


はじめに

みなさまFragmentは使ってますでしょうか?

Fragmentを使う事で機能を使いまわせてたり、Activityの見通しを良くしたりと多くのメリットがあります。

Fragmentの詳細については下記URL辺りがかなり参考になりました。有難うございます。

今さら聞けない Activity と Fragment の使い分け

AndroidStudioの標準デザインパターンで分かるFragment入門

ふむふむ、Fragmentわかったぞ!よっしゃ!これで作ったる( ー`дー´)

と思ってサンプルから作成すると最初は「??」でした。

ある程度判るようになっても「うーんサンプルわかりずらいな…」と

ならば


「俺がもっと簡単かつ実用的なFragmentテンプレート作ったる!('ω' )三('ω')三( 'ω')」


これが最強のFragmentテンプレート(ドンッ!!)

何はともあれコードを晒します。


framgent

package fragment.com.fragmenttemplate;

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
* Created by kakizaki_shoichi on 15/12/09.
* ProjectName FragmentTemplate
*/

public class FTemplate extends Fragment {

/*interfaceを設定してActivityで呼べるようにする*/
public interface OnClickListener {
public void backBrowserTransaction();
}

private View mV;
private Activity mActivity;
private OnClickListener mListener;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}

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

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.mActivity = activity;
if (activity instanceof OnClickListener == false) {
throw new ClassCastException("activity が ClickListener を実装していません.");
}
mListener = ((OnClickListener) activity);
}

@Override
public void onStart() {
super.onStart();
if (mListener != null) {
mListener.backBrowserTransaction();
}
}

@Override
public void onDestroyView() {
super.onDestroyView();
}
}



軽く解説


Activityへのイベントコールバック

コードの頭にある


fragment

/*interfaceを設定してActivityで呼べるようにする*/

public interface OnClickListener {
public void backBrowserTransaction();
}

にてinterfaceの設定をしています。

また、onstartに以下のように設定することで


fragment

@Override

public void onStart() {
super.onStart();
if (mListener != null) {
mListener.backBrowserTransaction();
}
}

Activityにて下記のようにイベントコールバックを受け取る事が出るようになっています。

@Override

public void backBrowserTransaction() {
Log.d("Activty", "通知キタ━━━━(゚∀゚)━━━━!!");
}

Activity側でリスナーを登録していない場合は下記の部分でエラーを吐くようにしています。

    @Override

public void onAttach(Activity activity) {
super.onAttach(activity);
this.mActivity = activity;
if (activity instanceof OnClickListener == false) {
throw new ClassCastException("activity が OnOkBtnClickListener を実装していません.");
}
mListener = ((OnClickListener) activity);
}


File and Code Templates機能でテンプレート化する

AndroidStudioはテンプレート作成することが出来ます。


テンプレートを作成

Preferencesを開いたら検索窓に File and Code Templates と入力してください。

すると下記図のようになるので + を押下してテンプレートを作成します。

Preferences.png

上記のコードをテンプレート化します


テンプレート

#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
* Created by ${USER} on ${DATE}.
* ProjectName ${PROJECT_NAME}
*/

public class ${NAME} extends Fragment {

/*interfaceを設定してActivityで呼べるようにする*/
public interface OnClickListener {
public void backBrowserTransaction();
}

private View mV;
private Activity mActivity;
private OnClickListener mListener;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}

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

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.mActivity = activity;
if (activity instanceof OnClickListener == false) {
throw new ClassCastException("activity が ClickListener を実装していません.");
}
mListener = ((OnClickListener) activity);
}

@Override
public void onStart() {
super.onStart();
if (mListener != null) {
mListener.backBrowserTransaction();
}
}

@Override
public void onDestroyView() {
super.onDestroyView();
}
}


テンプレートを作成したら、右下のOKを押下してテンプレートの完成です。


テンプレートを使う

New > Java Classを選択して新規ファイルを作成します。

MainActivity_java_-_FragmentTemplate_-____AndroidStudioProjects_FragmentTemplate_.png

kindから先ほど作成したテンプレートを選択すれば完了です。

Create_New_Class_と_MainActivity_java_-_FragmentTemplate_-____AndroidStudioProjects_FragmentTemplate_.png


これで爆速開発や!!!

もっとこうしたほうがええで!等のご意見大歓迎です。


githubにソースコード公開

参考にしてください。(プルリクも大歓迎です)

https://github.com/Shoichi-Kakizaki/FramgentTemplate

明日はykyk1218さんです!

「2015年のまとめとして、Vimの設定を振り返る」とかなり気になる記事!

宜しくお願い致します!