1. 程式人生 > >android基礎之fragment的學習

android基礎之fragment的學習

fragment是嵌在activity內部的模組,其有自己的生命週期,但其生命週期必須依賴於activity的存在而存在,在API 11之前每個fragment必須與父FragmentActivity相關聯,API 11之後就可以通過activity實現這種關聯。在activity中嵌入fragment有兩種方式,一種是通過在xml檔案中如下宣告,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <fragment android:name="com.example.android.fragments.HeadlinesFragment"
              android:id="@+id/headlines_fragment"
              android:layout_weight="1"
              android:layout_width="0dp"
              android:layout_height="match_parent" />


    <fragment android:name="com.example.android.fragments.ArticleFragment"
              android:id="@+id/article_fragment"
              android:layout_weight="2"
              android:layout_width="0dp"
              android:layout_height="match_parent" />


</LinearLayout>

此種定義的fragmnet不可以在activity執行時remove掉,一般用於大螢幕的佈局。

另一種可以定義一個儲存fragment的容器,比如

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
此種定義的fragment可以實現在activity中實現add和remove等操作,但需注意的是此種必須在activity的oncreate方法中初始化fragment.如下
   ArticleFragment newFragment = new ArticleFragment();

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();


            // Replace whatever is in the fragment_container view with this fragment,
            // and add the transaction to the back stack so the user can navigate back
            transaction.replace(R.id.fragment_container, newFragment);
            transaction.addToBackStack(null);


            // Commit the transaction
            transaction.commit();

對於fragment的操作,是通過FragmnetTransaction實現的。首先通過getSupportedFragmentManager得到 using Support Library APIs,然後呼叫beginTransaction得到FragmentTransaction.
注意,你可以執行多種fragment的操作用同一個fragmentTransaction,當執行完所有的操作後fragmentTransaction執行commit操作來儲存對於fragment執行的各種操作。
當對fragment執行完removve操作後如果需要回到之前的fragment,需要在執行完remove操作後執行addToBackStack(String name);該方法中的string引數來給每個transaction一個唯一的標示,如果不想為其起名字可以addToBackStack(null).
fragment間的資料傳遞可以通過Bundle實現。語法如下fragment.setArgments(bundle);得到傳遞的bundle,Bundle bundle=getArgments();

示例程式碼連結:點選開啟連結(完)