1. 程式人生 > >2 被稱為第5大元件的Fragment(Android校招復習)

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


注:以上內容是由自己從網際網路收集整理、自己寫、及看書、看視訊等總結出來的筆記,如果借鑑的內容需要標識出來請私信我。