2018之Android部分Fragment篇

1.Fragment為什么會被稱為第五大組件?

Android中的4大組件為:Activity,Broadcast,Service,ContentProvider,那么為什么Fragment可以稱之為第5大組件呢?你可以這么回答:
??因為Fragment有生命周期,使用頻率不輸于4大組件,可靈活加載到Activity中。然后談?wù)撜務(wù)揊ragment如何加載到Activity中:

1.1 Fragment加載到Activity的2種方式

Fragment加載到Activity的方式分為靜態(tài)加載和動態(tài)加載,下面我們看看這兩種加載方式:

靜態(tài)加載:直接在Activity布局文件中指定Fragment。使用指定屬性name即可,代碼如下所示:

<fragment  
    android:name="com.example.myfragment.MyFragment"  
    android:id="@+id/myfragment_1"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"/>    

動態(tài)加載: 動態(tài)加載需要使用到FragmentManager,這種動態(tài)加載的方式在開發(fā)中是非常常見的,示例代碼如下:

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
//將FragmentA從容器中移除掉,減少內(nèi)存的消耗
fragmentTransaction.remove(fragmentA);
fragmentTransaction.add(R.id.fragment_layout,new FragmentB());
fragmentTransaction.commit();

1.2 Fragment與ViewPager的搭配使用

通常情況下我們開發(fā)應(yīng)用最常見的使用情況是TabLayout+ViewPager+Fragment的使用方式,這就涉及到兩個常用的適配器的使用,一個是FragmentPagerAdapter,另外一個是FragmentStatePagerAdapter,那么它們之間有什么區(qū)別呢?其實很簡單,F(xiàn)ragmentPagerAdapter適用于頁面較少的情況,而FragmentStatePagerAdapter適用于頁面較多的情況。

2.Fragment的生命周期

Fragment的生命周期面試的時候概率還是蠻大的,不過問的時候并不是單純說整個生命周期的回調(diào)函數(shù)等等,而是問些特殊情況下的Fragment的生命周期情況,為的是檢驗?zāi)愕拈_發(fā)經(jīng)驗,不過不用方,看看筆者推薦的一個鏈接,你會搞懂各種情況下的Fragment的生命周期,這樣面試就不用擔(dān)心這種問題了:

http://blog.csdn.net/MeloDev/article/details/53406019#comments

Fragment

  1. 界面打開
    onCreate() 方法執(zhí)行!
    onCreateView() 方法執(zhí)行!
    onActivityCreated() 方法執(zhí)行!
    onStart() 方法執(zhí)行!
    onResume() 方法執(zhí)行!

  2. 按下主屏幕鍵/鎖屏
    onPause() 方法執(zhí)行!
    onStop() 方法執(zhí)行!

  3. 重新打開
    onStart() 方法執(zhí)行!
    onResume() 方法執(zhí)行!

  4. 按下后退鍵
    onPause() 方法執(zhí)行!
    onStop() 方法執(zhí)行!
    onDestroyView() 方法執(zhí)行!
    onDestroy() 方法執(zhí)行!
    onDetach() 方法執(zhí)行!

Activity

 1\. 打開應(yīng)用
onCreate() 方法執(zhí)行!
onStart() 方法執(zhí)行!
onResume() 方法執(zhí)行!

2\. 按下主屏幕鍵/鎖屏
onPause() 方法執(zhí)行!
onStop() 方法執(zhí)行!

3\. 重新打開應(yīng)用
onRestart() 方法執(zhí)行!
onStart() 方法執(zhí)行!
onResume() 方法執(zhí)行!

4\. 按下后退鍵
onPause() 方法執(zhí)行! 
onStop() 方法執(zhí)行!  
onDestroy() 方法執(zhí)行!

在Activity中加入Fragment,對應(yīng)的生命周期

  1. 打開
    Fragment onAttach()方法執(zhí)行
    Fragment onCreate() 方法執(zhí)行!
    Fragment onCreateView() 方法執(zhí)行!
    Fragment onViewCreated()方法執(zhí)行
    Activity onCreate() 方法執(zhí)行!
    Fragment onActivityCreated() 方法執(zhí)行!
    Activity onStart() 方法執(zhí)行!
    Fragment onStart() 方法執(zhí)行!
    Activity onResume() 方法執(zhí)行!
    Fragment onResume() 方法執(zhí)行!

  2. 按下主屏幕鍵/鎖屏
    Fragment onPause() 方法執(zhí)行!
    Activity onPause() 方法執(zhí)行!
    Fragment onStop() 方法執(zhí)行!
    Activity onStop() 方法執(zhí)行!

  3. 再次打開
    Activity onRestart() 方法執(zhí)行!
    Activity onStart() 方法執(zhí)行!
    Fragment onStart() 方法執(zhí)行!
    Activity onResume() 方法執(zhí)行!
    Fragment onResume() 方法執(zhí)行!

  4. 按下后退鍵
    Fragment onPause() 方法執(zhí)行!
    Activity onPause() 方法執(zhí)行!
    Fragment onStop() 方法執(zhí)行!
    Activity onStop() 方法執(zhí)行!
    Fragment onDestroyView() 方法執(zhí)行!
    Fragment onDestroy() 方法執(zhí)行!
    Fragment onDetach() 方法執(zhí)行!
    Activity onDestroy() 方法執(zhí)行!

20180326173226940.jpg

3.Fragment的通信

3.1 在Fragment中調(diào)用Activity中的方法

在Fragment中調(diào)用Activity的方法很簡單,F(xiàn)ragment有個getActivity()的方法,比如,在MainActivity中的一個Fragment中獲取MainActivity的引用,并調(diào)用MainActivity的某個方法methodA()方法你可以這么寫:

MainActivity mainActivity = (MainActivity) getActivity();
mainActivity.methodA();

3.2 在Activity中調(diào)用Fragment的方法

在Activity中調(diào)用Fragment中的方法是最簡單的,我想這里我不用多說吧!直接接口回調(diào)即可調(diào)用Fragment的任何可訪問的方法。

3.3 在Fragment中調(diào)用另外一個Fragment的方法

這個可就需要一定的思維性了,首先要想調(diào)用Fragment A的方法,除了這個Fragment A自身可以調(diào)用外,這個Fragment A所屬的Activity也可以調(diào)用,要想另外一個Fragment B調(diào)用此Fragment A的方法,F(xiàn)ragment B可以間接通過Activity來進(jìn)行調(diào)用,也就是3.1 和 3.2 的結(jié)合??纯聪聢D你自然就會明白了:

20180206133102798.jpg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一道閃電如練 天河之水飛濺 妖魔鬼怪亂舞 天兵天將擂鼓 各執(zhí)令旗列陣 寒氣集于兵刃 交戰(zhàn)雙方對峙 將帥仰仗勇士 三...
    神秘嘉賓方閱讀 382評論 4 3
  • 白駒過隙,我最愛的一年轉(zhuǎn)瞬即逝。這年過得格外漫長,17年我還是世俗學(xué)校的碩士生,對從小不愛讀書的人某種層面是一種折...
    swan_213閱讀 270評論 0 6
  • 愿為一粒風(fēng)塵 平凡而無足輕重 自由搖曳于滄宇 隨風(fēng)而去 那天際盡頭 那大海云端 都是遠(yuǎn)方的家 愿為一顆流星 在夜空...
    落水有聲閱讀 266評論 1 3
  • 還能坐在教室上課是件很幸福的事情,有人教你去做人成才,你自己也一定要努力努力再努力
    y_我一直走閱讀 210評論 0 0

友情鏈接更多精彩內(nèi)容