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.如下
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();
示例程式碼連結:點選開啟連結(完)