Basefragmentのパッケージ使用
転載は出典を明記してください.http://blog.csdn.net/q649381130?viewmode=contents(漆可のブログ)
1、はじめに
パッケージはオブジェクト向けの3つの特性の1つとして、私たちの普段のcodingプロセスで使われているものは非常に多いです.ほとんどの場合、パッケージの状況に基づいてコードの品質レベルを評価することができます.
本文は主にfragmentのパッケージについて説明する.大体、プロジェクトの初期には、サブクラスの呼び出しを容易にするために、ベースクラスによく使われるものをカプセル化します.このメリットは明らかです.共通のものをbaseベースクラスに集中する 後期修正メンテナンス 便利サブクラスコード冗長性を回避 不要な重複コードを消去 便利サブクラスの使用 2、パッケージの開始
2.1 mActivityの取得
fragmentでは、getActivity()メソッドで現在添付されているactivityインスタンスを取得できます.ただし、使用中にポインタが空になる場合がある場合は、fragmentライフサイクルのonAttach(Context context)メソッドでグローバル変数に取得して昇格することができます.
2.2 onCreateViewメソッドのパッケージ
通常、fragmentのonCreateViewメソッドでは、レイアウトファイルのロード、findview、ネットワークのデータのロード、データの初期化などの初期化を行う必要があります.これらのことを1つの方法に書くと、onCreateViewは非常に膨大で、いくつかの方法に分けて抽出することができます.コードが美しく、読みやすいようにします.
上記のコードは機能に基づいて以下のパッケージを行い、メソッド呼び出しの順序が変更できないことに注意します. setLayoutResouceId():レイアウトリソースid を設定する initData(getArguments():データ初期化、主にactivityからパケットを取り外して渡されるパラメータ、アダプタ初期化、集合初期化などを含み、viewの操作を行うことができない mIsPrepareをtrueに設定:mIsPrepareはviewがロードされたかどうかを示し、このプロパティは主に怠け者(以下、怠け者のロードについて詳細に説明する) に使用される. onLazyLoad():怠惰にデータをロードし、oncreatviewメソッドで呼び出すことは直接データをロードすることと理解でき、メソッドではviewの操作を行うことができる setListener():各種傍受イベントの統一設定 2.3 field紹介
カプセル化された属性コードの注釈はすでにはっきり書かれています.
2.4パッケージの方法
次の3つの方法は、サブクラスの実装に使用されます.
2.5 setLayoutResourceIdメソッド
setLayoutResouceId()は、レイアウトファイルのリソースidを取得し、fragmentにロードし、onCreatviewメソッドでmRootViewで参照を保存するためにサブクラスを実装する抽象的な方法です.
2.6専属のfindViewById()を作成する方法
activityのfindView ById()メソッドがうらやましいのではないでしょうか.私たちがカプセル化したbasefragmentにも、強制的に変換する必要がなく、独自のfindView ById()メソッドがあり、activityよりも強力です.それがあれば、私たちのfragmentサブクラスは直接使用することができます.
2.7リラクゼーション
怠惰なロードとは、viewがユーザーと対話していないとロードされませんが、彼のロード順序は非常に速いです.この方法は主にviewpagerネストfragmentで多く用いられる.viewpagerは、左右に指定された数(もちろんこの数はsetOffscreenPageLimit(int limit)設定)のfragmentを事前にロードすることができ、怠け者のロードを使用すると、他のページのネットワークリクエストを事前に実行しないようにviewの作成などの操作しかできません.
コードの中で、setUserVisibleHint(boolean isVisibleToUser)はユーザーと対話可能かどうかを表し、onCreatviewメソッドの前で実行し、isVisibleToUserがtrueの場合はユーザーに見えることを示し、ここではカスタムonVisibleToUser()メソッドを実行し、onVisibleToUser()では、判断を行います.mIsPrepareがtrueであり、ユーザと対話可能である場合、我々のonLazyLoad()メソッドを実行して怠惰なロードを行います.
3終了
はい、basefragment全体のパッケージができました.次は完全なコードです.コード量が少ないので、このブログは完全なdemoをアップロードしません.
私の次のブログを楽しみにしてください:カスタム注釈を利用してコードを簡素化します
1、はじめに
パッケージはオブジェクト向けの3つの特性の1つとして、私たちの普段のcodingプロセスで使われているものは非常に多いです.ほとんどの場合、パッケージの状況に基づいてコードの品質レベルを評価することができます.
本文は主にfragmentのパッケージについて説明する.大体、プロジェクトの初期には、サブクラスの呼び出しを容易にするために、ベースクラスによく使われるものをカプセル化します.このメリットは明らかです.
2.1 mActivityの取得
fragmentでは、getActivity()メソッドで現在添付されているactivityインスタンスを取得できます.ただし、使用中にポインタが空になる場合がある場合は、fragmentライフサイクルのonAttach(Context context)メソッドでグローバル変数に取得して昇格することができます.
/** * activity */
protected FragmentActivity mActivity;
@Override
public void onAttach(Context context)
{
super.onAttach(context);
mActivity = getActivity();
}
2.2 onCreateViewメソッドのパッケージ
通常、fragmentのonCreateViewメソッドでは、レイアウトファイルのロード、findview、ネットワークのデータのロード、データの初期化などの初期化を行う必要があります.これらのことを1つの方法に書くと、onCreateViewは非常に膨大で、いくつかの方法に分けて抽出することができます.コードが美しく、読みやすいようにします.
@Override
@Nullable
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState)
{
mRootView = inflater.inflate(setLayoutResouceId(), container, false);
initData(getArguments());
initView();
mIsPrepare = true;
onLazyLoad();
setListener();
return mRootView;
}
上記のコードは機能に基づいて以下のパッケージを行い、メソッド呼び出しの順序が変更できないことに注意します.
カプセル化された属性コードの注釈はすでにはっきり書かれています.
/** * activity */
protected FragmentActivity mActivity;
/** * view */
protected View mRootView;
/** * */
protected boolean mIsVisible;
/** * * oncreatview,View true */
protected boolean mIsPrepare;
2.4パッケージの方法
次の3つの方法は、サブクラスの実装に使用されます.
/** * * @author * @date 2016-5-26 3:57:48 * @param arguments */
protected void initData(Bundle arguments)
{
}
/** * View * @author * @date 2016-5-26 3:58:49 */
protected void initView()
{
}
/** * * @author * @date 2016-5-26 3:59:36 */
protected void setListener()
{
}
2.5 setLayoutResourceIdメソッド
setLayoutResouceId()は、レイアウトファイルのリソースidを取得し、fragmentにロードし、onCreatviewメソッドでmRootViewで参照を保存するためにサブクラスを実装する抽象的な方法です.
/** * id * @author * @date 2016-5-26 3:57:09 * @return */
protected abstract int setLayoutResouceId();
2.6専属のfindViewById()を作成する方法
activityのfindView ById()メソッドがうらやましいのではないでしょうか.私たちがカプセル化したbasefragmentにも、強制的に変換する必要がなく、独自のfindView ById()メソッドがあり、activityよりも強力です.それがあれば、私たちのfragmentサブクラスは直接使用することができます.
@SuppressWarnings("unchecked")
protected <T extends View> T findViewById(int id)
{
if (mRootView == null)
{
return null;
}
return (T) mRootView.findViewById(id);
}
2.7リラクゼーション
怠惰なロードとは、viewがユーザーと対話していないとロードされませんが、彼のロード順序は非常に速いです.この方法は主にviewpagerネストfragmentで多く用いられる.viewpagerは、左右に指定された数(もちろんこの数はsetOffscreenPageLimit(int limit)設定)のfragmentを事前にロードすることができ、怠け者のロードを使用すると、他のページのネットワークリクエストを事前に実行しないようにviewの作成などの操作しかできません.
コードの中で、setUserVisibleHint(boolean isVisibleToUser)はユーザーと対話可能かどうかを表し、onCreatviewメソッドの前で実行し、isVisibleToUserがtrueの場合はユーザーに見えることを示し、ここではカスタムonVisibleToUser()メソッドを実行し、onVisibleToUser()では、判断を行います.mIsPrepareがtrueであり、ユーザと対話可能である場合、我々のonLazyLoad()メソッドを実行して怠惰なロードを行います.
@Override
public void setUserVisibleHint(boolean isVisibleToUser)
{
super.setUserVisibleHint(isVisibleToUser);
this.mIsVisible = isVisibleToUser;
if (isVisibleToUser)
{
onVisibleToUser();
}
}
/** * * @author * @date 2016-5-26 4:09:39 */
protected void onVisibleToUser()
{
if (mIsPrepare && mIsVisible)
{
onLazyLoad();
}
}
3終了
はい、basefragment全体のパッケージができました.次は完全なコードです.コード量が少ないので、このブログは完全なdemoをアップロードしません.
public abstract class BaseFragment extends Fragment {
/** * activity */
protected FragmentActivity mActivity;
/** * view */
protected View mRootView;
/** * */
protected boolean mIsVisible;
/** * * oncreatview,View true */
protected boolean mIsPrepare;
@Override
public void onAttach(Context context)
{
super.onAttach(context);
mActivity = getActivity();
}
@Override
@Nullable
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState)
{
mRootView = inflater.inflate(setLayoutResouceId(), container, false);
initData(getArguments());
initView();
mIsPrepare = true;
onLazyLoad();
setListener();
return mRootView;
}
/** * * @author * @date 2016-5-26 3:57:48 * @param arguments */
protected void initData(Bundle arguments)
{
}
/** * View * @author * @date 2016-5-26 3:58:49 */
protected void initView()
{
}
/** * * @author * @date 2016-5-26 3:59:36 */
protected void setListener()
{
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser)
{
super.setUserVisibleHint(isVisibleToUser);
this.mIsVisible = isVisibleToUser;
if (isVisibleToUser)
{
onVisibleToUser();
}
}
/** * * @author * @date 2016-5-26 4:09:39 */
protected void onVisibleToUser()
{
if (mIsPrepare && mIsVisible)
{
onLazyLoad();
}
}
/** * , view * @author * @date 2016-5-26 4:10:20 */
protected void onLazyLoad()
{
}
@SuppressWarnings("unchecked")
protected <T extends View> T findViewById(int id)
{
if (mRootView == null)
{
return null;
}
return (T) mRootView.findViewById(id);
}
/** * id * @author * @date 2016-5-26 3:57:09 * @return */
protected abstract int setLayoutResouceId();
}
私の次のブログを楽しみにしてください:カスタム注釈を利用してコードを簡素化します