fragment

4548 ワード

Fragment使用総括Android基礎:Fragment,これを見れば十分--怠け者ロード

fragmentとは


Fragment(破片)はAndroid 3にある小型のActivityです.0の場合に表示されます.FragmentはActivityにおけるUIを表現する行為または一部である.Fragmentはactivityに埋め込まなければならない.それらのライフサイクルは、宿主activityのライフサイクルに直接影響されます.

fragmentの定義


1.Fragmentのレイアウトを定義する2、クラス継承Fragmentを定義する3、クラス内のonCreateViewメソッドを書き換え、現在のFragmentのレイアウトとしてViewオブジェクトを返します.fragmentが初めてユーザインタフェースを描画すると、onCreateView()メソッドが呼び出されます.fragmentのUIを描画するには、fragmentレイアウトのルートであるviewを返す必要があります.fragmentがUIを提供しない場合はnullを返します.
    public class Fragment1 extends Fragment {
        // Fragment onCreateView( )
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
            // view
            //  1  
            View view = inflater.inflate(R.layout.fragment1, null);
            // view
            return view;
        }
        
    }

下位互換性


FragmentはAndroid 3.0で発売されたもので、3.0の低バージョンでFragmentを使用するには、1、すべてのFragmentとFragmentManagerをsupport-v 4パッケージのクラスに変更する2、Activityの継承をFragmentActivity(support-v 4パッケージの)に変更する2つのステップを実行する必要があります.

activityにfragmentを追加する


レイアウトで宣言


 : ,“android:name” : layout Fragment 。

システムがこのactivity layoutを作成すると、layoutで指定された各Fragmentがインスタンス化され、onCreateView()メソッドが呼び出され、各Fragmentのlayoutが取得され、Fragmentから返されたViewが要素の場所に直接挿入されます.各fragmentが再起動すると、システムはFragmentを復元するために使用できます.さらに、idでFragmentをキャプチャしてトランザクションを処理することができ、1つのfragmentにIDを提供する方法は3つあり、具体的には以下の通りである:1.android:idプロパティに一意のIDを提供します.2.android:tag属性に一意の文字列を提供する.3.以上の2つが提供されていない場合、システムは容器viewのIDを使用します.

動的作成-fragmentの切り替え


ActivityでFragmentを管理するには、FragmentManagerを使用してactivityのgetFragmentManager()を呼び出してインスタンスを取得する必要があります.replace
    public void news(View view) {
        // Fragment 
        FragmentManager manager = getFragmentManager();
        // 
        FragmentTransaction transaction = manager.beginTransaction();
        // FrameLayout(viewgroup) Fragment 
        transaction.replace(R.id.frame, new NewsFragment());
        // 
        transaction.commit();
    }

add+hide+show
FragmentManager mManager = getSupportFragmentManager();
FragmentTransaction mTransaction = mManager.beginTransaction();
if (from == -1 && !baseFragments.get(index).isAdded()) {
    mTransaction.add(R.id.fl_main, baseFragments.get(index), tags[index]).commit();
    mCurrentIndex = index;
} else {
    if (from != index) {
        if (!baseFragments.get(index).isAdded()) { //  add 
            mTransaction.hide(baseFragments.get(from))
                    .add(R.id.fl_main, baseFragments.get(index), tags[index]).commit(); //  fragment,add Activity 
        } else {
            mTransaction.hide(baseFragments.get(from)).show(baseFragments.get(index)).commit(); //  fragment, 
        }
        mCurrentIndex = index;
    }

}

注意:1.fragmentのライフサイクルはactivityにバインドされており、addの複数のfragmentの後、activityのonstartが実行されるたびに、複数のfragmentのonstartも実行され、実行順序はaddの順序と同じであり、(一番上のfragmentしか見えませんよ)、activityはonPauseメソッドを実行し、複数のfragmentはonPauseを実行します.その他activityライフサイクルと一致するもの.2.radiogroup+radiobuttonの組合せを使用して(add済みfragment)fragmentがfragmentを実行しないonstartメソッドを切り替える

ライフサイクル


Fragmentのライフサイクルはactivityのライフサイクルとよく似ており、そのライフサイクル方法は以下の通りです.onAttach:activityonCreateへのバインド:fragmentの作成onCreateView:fragmentのレイアウトの作成onActivity Created:activityの作成が完了した後onStart:表示(一応説明)、非対話onResume:表示、対話可能onPause:部分表示、インタラクティブ不可onStop:見えないonDestroyView:fragmentを破棄するviewオブジェクトonDestroy:fragmentを破棄するonDetach:activityから切り離す
ライフサイクルの注意

fragment間通信--fragmentをマーク


動的にfragment---replace-の3番目のパラメータを追加-tagを設定
beginTransaction.replace(R.id.ll1, new Fragment1(), "f2");

getFragmentManager-tagタグのfragment 0を見つける-調整方法
  //replace() Fragment tag。
  Fragment2 fragment2 = (Fragment2) getActivity().getFragmentManager().findFragmentByTag("f2");
  // fragment ,  
  fragment2.updateText("aaaaa");

追加fragmentがユーザーに表示されている場合、setuserVisibleHint()はtrue値を呼び出し、fragmentがユーザーに表示されない場合、setuserVisibleHint()はfalse値を取得します.
AndroidはnewInstance()を使用してfragment&setArguments()伝達パラメータをインスタンス化http://blog.csdn.net/czhpxl007/article/details/51277319 http://www.jianshu.com/p/708f5983dd82