プログラミング大好きベーシック Advent Calendar 2015の記事になります。
koitaroさんからバトンを受け取りました!
はじめに
みなさまFragmentは使ってますでしょうか?
Fragmentを使う事で機能を使いまわせてたり、Activityの見通しを良くしたりと多くのメリットがあります。
Fragmentの詳細については下記URL辺りがかなり参考になりました。有難うございます。
今さら聞けない Activity と Fragment の使い分け
AndroidStudioの標準デザインパターンで分かるFragment入門
ふむふむ、Fragmentわかったぞ!よっしゃ!これで作ったる( ー`дー´)
と思ってサンプルから作成すると最初は「??」でした。
ある程度判るようになっても「うーんサンプルわかりずらいな…」と
ならば
####「俺がもっと簡単かつ実用的なFragmentテンプレート作ったる!('ω' )三('ω')三( 'ω')」
これが最強のFragmentテンプレート(ドンッ!!)
何はともあれコードを晒します。
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へのイベントコールバック
コードの頭にある
/*interfaceを設定してActivityで呼べるようにする*/
public interface OnClickListener {
public void backBrowserTransaction();
}
にてinterfaceの設定をしています。
また、onstartに以下のように設定することで
@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 と入力してください。
すると下記図のようになるので + を押下してテンプレートを作成します。
上記のコードをテンプレート化します
#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を選択して新規ファイルを作成します。
kindから先ほど作成したテンプレートを選択すれば完了です。
これで爆速開発や!!!
もっとこうしたほうがええで!等のご意見大歓迎です。
#githubにソースコード公開
参考にしてください。(プルリクも大歓迎です)
https://github.com/Shoichi-Kakizaki/FramgentTemplate
明日はykyk1218さんです!
「2015年のまとめとして、Vimの設定を振り返る」とかなり気になる記事!
宜しくお願い致します!