1.fragment的生命週期必須依附於activity:
2.fragment依附於activity的的生命週期圖:
3.fragment各個函數的用法:
3.1 on attach:與窗口關聯後就可以調用,可以通過Fragment.getActivity方法獲取窗口,但fragment沒有初始化不能進行操作。
3.2 oncreate:可以從bundle中獲得數據,不要進行耗時操作,不然無法加載窗口。
3.3 oncreateview:用來在fragment中裝載view視圖。
3.4 onviewcreated:創建完窗口後activity立刻回掉該方法。
3.5 onactivitycreated:activity執行完on create方法之後,系統立馬調用該方法。表示窗口已經初始化完成,從這一個時候開始,就可以在Fragment中使用getActivity().findViewById(Id);來操控Activity中的view了。
3.6 onstart:fragment已經顯示在ui 但是不可以進行交互
3.7 onresume:fragment可以進行交互了
3.8 onpause:活躍到非活躍的第一個函數,進行數據保存。
3.9 ondestroyview:oncreateview創建的視圖全部被移除
3.10 ondestroy:activity還可以獲得fragment的對象但是無法操作。
3.11ondetached:死亡
4.Fragment中的主要的操作函數:
FragmentTransactiontransaction = fm.benginTransatcion();//開啓一個事務
transaction.add()
//往Activity中添加一個Fragment
transaction.remove()
//從Activity中移除一個Fragment,如果被移除的Fragment沒有添加到回退棧(回退棧後面會詳細說),這個Fragment實例將會被銷燬。
transaction.replace()
//使用另一個Fragment替換當前的,實際上就是remove()然後add()的合體~
transaction.hide()
//隱藏當前的Fragment,僅僅是設爲不可見,並不會銷燬
transaction.show()
//顯示之前隱藏的Fragment
detach()
//當fragment被加入到回退棧的時候,該方法與*remove()*的作用是相同的,
//反之,該方法只是將fragment從視圖中移除,
//之後仍然可以通過*attach()*方法重新使用fragment,
//而調用了*remove()*方法之後,
//不僅將Fragment從視圖中移除,fragment還將不再可用。
attach()
//重建view視圖,附加到UI上並顯示。
transatcion.commit()
//提交一個事務
5.例子:創建一個fragment並且在activity中加載
fragment代碼:
public class aFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragmentlayout, container, false); } }fragment的xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/afragment" android:orientation="vertical" > <TextView android:text="TextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView" android:background="#ff00ff" /> </LinearLayout>main代碼:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); aFragment fragment1=new aFragment(); getFragmentManager().beginTransaction().replace(R.id.content,fragment1).commit(); getFragmentManager().beginTransaction().show(fragment1); } }main的xml:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.zobject.fragement.MainActivity">
<FrameLayout android:id="@+id/content" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginLeft="13dp" android:layout_marginStart="13dp" android:layout_marginTop="175dp" android:background="#fff000" >
</RelativeLayout>
效果圖: