2 被稱為第5大元件的Fragment(Android校招復習)
1 Fragment為什麼被稱為“第五大元件”及使用場景?
-
為什麼Fragment被稱為“第五大元件”?
答:因為Fragment在使用頻率上不輸於其它四大元件,同時擁有自己的生命週期。 -
Fragment的使用場景?
答:1.Fragment最初的目的就是為了在平板等大螢幕上更好的展現UI而設計的,UI的切換效果更佳舒適。2.Fragment比Activity消耗更少的記憶體,因此在需要多個介面的情況下優先使用Fragment。
2 Fragment生命週期
2.1 Fragment生命週期圖
Fragment各生命週期的方法的意義:
onStart()、onResume()、onPause()、onStop ()、onDestory()方法的與Activity中類似,就不浪費篇幅了、只總結Activity之中沒有的生命週期方法。
- onAttach()
當Fragment與Activity繫結後呼叫,此時已經可以在Fragment通過getActivity()獲取到與之繫結的Activity了。 - onCreate()
與Activity類似,但此時Activity還沒有被建立,此方法只用來建立Fragment。 - onCreateView()
表示Activity要獲取Fragment的View,返回的View必須是Fragment的跟檢視,通過LayoutInflater獲得View並返回給Activity。 - onViewCreated()
表示Fragment的介面已經完全繪製完成了,可以初始化Fragment中的控制元件資源。 - onActivityCreated()
表示Activity已經建立完成,在Activity的onCreate()方法執行完成之後呼叫此方法。 - onDestoryView()
表示正在移除Fratment的View。 - onDetatach()
表示正在與Activity解除繫結。
注:當Activity進入running狀態後,Activity才能夠自由的增加、刪除、替換Fragment,這時它的生命週期才能獨立運轉,其餘時期都是依賴於Activity的生命週期的。
2.2 Fragment從啟動到銷燬的全過程圖。
3 Fragment的使用
3.1 Fragment載入到Activity的兩種方式
3.1.1 靜態載入
Fragment靜態載入很簡單,就是將Fragment作為一個View新增到XML檔案中就可以了,和其他控制元件一樣使用就好了,平時開發也用的很少,我沒有用過靜態載入在專案中過。
3.1.2 動態載入
//第一步:獲取FragmentTransation例項
FragmentManager fm = getFragmentManager();
FragmentTransaction tx = fm.beginTransaction();
//第二步:用add()方法新增Fragment例項
Fragment fragment = new xFragment();
tx.add(fragment, "xFragment");
//第三步:用commit()方法提交事務
tx.commit();
PS:getFragmentManager()用於android.app.Fragment包,getSupportFragmentManager()用於android.support.v4.app.Fragment包。
3.2 Fragment + ViewPager結合使用
//第一步:初始化ViewPager
ViewPager mViewPager = findViewById(R.id.viewpager)
//第二部:初始化Fragment集合
LinkedHashMap<String, Fragment> fragments = new LinkedHashMap<>();
fragments.put("水果", new xFragment());
fragments.put("蔬菜", new xFragment());
fragments.put("大米", new xFragment());
//第三步:設定PagerAdapter
MyPagerAdapter mPagerAdapter = new MyPagerAdapter(getSupportFragmentManager(), fragments);
mViewPager.setAdapter(mPagerAdapter );
mViewPager.setCurrentItem(0);
3.3 FragmentPagerAdapter與FragmentStatePagerAdapter的區別?
答:FragmentPagerAdatper適用於頁面較少的情況,
FragmentStatePagerAdapter適用於頁面較多的情況。
因為在兩個Adapter底層的destoryItem方法中,FragmentPagerAdapter是移除Fragment用的是FragmentTransation的detach()方法,只是去除了Fragment和Activity的關聯,Fragment還在FragmentManager管理中,而FragmentStatePagerAdapter用的是FragmentTransation的remove()方法,真正的釋放了Fragment的記憶體。
4 Fragment之間的通訊
4.1 Fragment呼叫Activity中的方法
通過getActivity()方法獲取例項即可
4.2 Activity呼叫Fragment中的方法
通過介面回撥的方式實現
4.3 Fragment呼叫另一Fragment中的方法
通過FragmentManager中的findFragmentById()或findFragmentByTag()方法即可獲得另一個Fragment
注:以上內容是由自己從網際網路收集整理、自己寫、及看書、看視訊等總結出來的筆記,如果借鑑的內容需要標識出來請私信我。