Fragment複習
1. Fragment爲什麼被稱爲第五大組件
Fragment爲什麼被稱爲第五大組件
使用頻率高,有自己的生命週期,同時可以靈活的加載到Activity中去。它是依賴於Activity的,不能單獨存在。
Fragment的加載
- 靜態加載
在xml佈局中使用fragment標籤加載進來,name指定對應的Fragment即可。
動態加載
// 獲取Fragment管理器 FragmentManager fm = getFragmentManager(); //開啓事務 FragmentTransaction transaction = fm.beginTransaction(); DemoFragment mDemoFragment = new DemoFragment(); //將Fragment加載到Activity中 transaction.replace(R.id.content_layout, mDemoFragment); //將該Fragment添加到回退棧中 transaction.addToBackStack("demoFragment"); //提交 transaction.commit();
- 靜態加載
FragmentPagerAdapter和FragmentStatePagerAdapter的區別
Fragment和ViewPager結合使用的時候,可能會用到FragmentPagerAdapter和FragmentStatePagerAdapter
- FragmentPagerAdapter適用於頁面較少的情況;FragmentStatePagerAdapter適用於頁面較多的情況,因爲它在切換頁面時,進行了內存回收。
- 區別在於
destroyItem
方法,FragmentPagerAdapter
中只是將視圖解綁mCurTransaction.detach((Fragment)object);
,並未從Adapter中移除。FragmentStatePagerAdapter
中進行了remove操作mCurTransaction.remove(fragment);
,可以被垃圾回收器直接回收。
2. Fragment的生命週期
Activity和Fragment的生命週期之前的關係
解釋一下,比Activity多出來的幾個生命週期方法:
- onAttach():和Activity關聯時調用
- onCreateView():創建Fragment視圖
- onActivityCreated():當Activity調用了onCreate時調用
- onDestoryView:Fragment視圖被移除時調用
- onDetach:Fragment和Activity取消關聯時調用。
3. Fragment之間的通信
和Activity通信:
在Fragment中通過getActivity()就可以操作Activity中相關的方法。
在Activity中調用Fragment中的方法
在Fragment中創建一個接口,讓Activity實現該接口,進行接口回調執行。
Fragment和Fragment之間通信
在Fragment中獲取Activity,然後通過Activity通過findFragmentById()獲取另一個Fragment,即可進行通信。
4. Fragment管理器:FragmentManager
FragmentManager一般是用來操作Fragment的,但是直接操作Fragment的是FragmentTransaction而不是它自己。
FragmentTransaction的常用Api:
- replace:替換Fragment實例,是remove和add的結合
- add:將Fregment添加到對應的id佈局中
- remove:將Fragment從Activity中移除
- addToBackStack:將Fragment添加到回退棧中