我們可以將Fragment理解成一個迷你型的活動,因為它和活動太像了,同樣都能包含布局,同樣有自己的生命周期。
我們用時有兩個不同包下的Fragment供選擇
- android.app.Fragment。我們的程序是面向Android4.0以上的。(建議使用)
- 另一個包下的Fragment主要是用于兼容低版本的Android系統。
碎片的使用方式
碎片的簡單用法
- 新建一個Class文件繼承自Fragment重寫onCreateView()方法加載布局。
- 在activity_main.xml文件中使用<fragment>標簽在布局中添加碎片。
- 這里需要通過android:name屬性來顯示指明要添加的碎片類名,注意一定要將類的包名也加上
動態添加碎片
主要有以下五個步驟:
創建待添加碎片實例
獲取到FragmentManager,在活動中可以直接調用getFragmentManager()方法得到
開啟一個事務,通過調用beginTransaction()方法開啟
向容器內加入碎片,一般使用replace()方法實現,需要傳入容器的ID和待添加的碎片實例
-
提交事物,調用commit()方法來完成
AnotherFragment fragment=new AnotherFragment() FragmentManager manager=getFragmentManager(); FragmentTransaction tran=manager.beginTransction(); tran.replace(R.id.right_place,fragment); tran.commit()
在碎片中模擬返回棧
只需要調用tran.addToBackstack(null);
參數一般傳入null即可。
當我們重新運行程序時,當將另一個fragment添加進來,點擊Back,程序不會退出而是回到了一開始的界面,再次按下back程序才會退出。
碎片和活動之間進行通信
- 活動中調用碎片的方法
RightFragment rightFragment=(RightFragment)getFragmentManager().findFragmentById(R.id.fragment);
- 碎片中調用活動的方法
Mainactivity activity=(MainActivity)getActivity();
掌握了這兩個通信方式,我們就可以實現碎片于碎片之間通信。首先在一個碎片中可以得到一個與它相關聯的活動,然后通過這個活動去獲取另一個碎片實例。
碎片的生命周期
活動中的有的回掉方法碎片中幾乎都有,碎片還提供了一些附加方法
- onAttach() 當碎片和活動建立關聯的時候調用
- onCreateView()為碎片創建視圖(加載布局)時調用
- onActivityCreated()確保與碎片相關聯的活動一定已經創建完畢的時候調用
- onDestroyView()當與碎片關聯的視圖被移除的時候調用
- onDetach()當碎片和活動解除關聯的時候調用
第一次被加載到屏幕上時依次執行
onAttach() -- onCreate()--- onCreateView()--onActivityCreated()--onStart()--onResume().
當我們點擊了替換按鈕之后
onPause()--onStop()---onDestoryView() (如果替換的時候沒有調用addToBackStack()方法,此時onDestory()--onDetach()方法也會得到執行)
當點擊Back重新回到這個Frament界面
onActivityCreated()--onStart()--onResume() (onCreate()和OnCreateView()并沒有執行,所以我們使用的addToBackStacck()方法使得Fragment和它的視圖并沒有銷毀)
再按下back退出程序
onPause()--onStop()---onDestoryView()--onDestory()--onDetach()