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
界面打開
onCreate() 方法執(zhí)行!
onCreateView() 方法執(zhí)行!
onActivityCreated() 方法執(zhí)行!
onStart() 方法執(zhí)行!
onResume() 方法執(zhí)行!按下主屏幕鍵/鎖屏
onPause() 方法執(zhí)行!
onStop() 方法執(zhí)行!重新打開
onStart() 方法執(zhí)行!
onResume() 方法執(zhí)行!按下后退鍵
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)的生命周期
打開
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í)行!按下主屏幕鍵/鎖屏
Fragment onPause() 方法執(zhí)行!
Activity onPause() 方法執(zhí)行!
Fragment onStop() 方法執(zhí)行!
Activity onStop() 方法執(zhí)行!再次打開
Activity onRestart() 方法執(zhí)行!
Activity onStart() 方法執(zhí)行!
Fragment onStart() 方法執(zhí)行!
Activity onResume() 方法執(zhí)行!
Fragment onResume() 方法執(zhí)行!按下后退鍵
Fragment onPause() 方法執(zhí)行!
Activity onPause() 方法執(zhí)行!
Fragment onStop() 方法執(zhí)行!
Activity onStop() 方法執(zhí)行!
Fragment onDestroyView() 方法執(zhí)行!
Fragment onDestroy() 方法執(zhí)行!
Fragment onDetach() 方法執(zhí)行!
Activity onDestroy() 方法執(zhí)行!

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你自然就會明白了:
