1.Fragment为什么会被称为第五大组件?
Android中的4大组件为:Activity,Broadcast,Service,ContentProvider,那么为什么Fragment可以称之为第5大组件呢?你可以这么回答:
因为Fragment有生命周期,使用频率不输于4大组件,可灵活加载到Activity中。然后谈论谈论Fragment如何加载到Activity中:
1.1 Fragment加载到Activity的2种方式
Fragment加载到Activity的方式分为静态加载和动态加载,下面我们看看这两种加载方式:
静态加载:直接在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"/>
动态加载: 动态加载需要使用到FragmentManager,这种动态加载的方式在开发中是非常常见的,示例代码如下:
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
//将FragmentA从容器中移除掉,减少内存的消耗
fragmentTransaction.remove(fragmentA);
fragmentTransaction.add(R.id.fragment_layout,new FragmentB());
fragmentTransaction.commit();
1.2 Fragment与ViewPager的搭配使用
通常情况下我们开发应用最常见的使用情况是TabLayout+ViewPager+Fragment的使用方式,这就涉及到两个常用的适配器的使用,一个是FragmentPagerAdapter,另外一个是FragmentStatePagerAdapter,那么它们之间有什么区别呢?其实很简单,FragmentPagerAdapter适用于页面较少的情况,而FragmentStatePagerAdapter适用于页面较多的情况。
2.Fragment的生命周期
Fragment的生命周期面试的时候概率还是蛮大的,不过问的时候并不是单纯说整个生命周期的回调函数等等,而是问些特殊情况下的Fragment的生命周期情况,为的是检验你的开发经验,不过不用方,看看笔者推荐的一个链接,你会搞懂各种情况下的Fragment的生命周期,这样面试就不用担心这种问题了:
http://blog.csdn.net/MeloDev/article/details/53406019#comments
Fragment
-
界面打开
onCreate() 方法执行!
onCreateView() 方法执行!
onActivityCreated() 方法执行!
onStart() 方法执行!
onResume() 方法执行! -
按下主屏幕键/锁屏
onPause() 方法执行!
onStop() 方法执行! -
重新打开
onStart() 方法执行!
onResume() 方法执行! -
按下后退键
onPause() 方法执行!
onStop() 方法执行!
onDestroyView() 方法执行!
onDestroy() 方法执行!
onDetach() 方法执行!
Activity
1\. 打开应用
onCreate() 方法执行!
onStart() 方法执行!
onResume() 方法执行!
2\. 按下主屏幕键/锁屏
onPause() 方法执行!
onStop() 方法执行!
3\. 重新打开应用
onRestart() 方法执行!
onStart() 方法执行!
onResume() 方法执行!
4\. 按下后退键
onPause() 方法执行!
onStop() 方法执行!
onDestroy() 方法执行!
在Activity中加入Fragment,对应的生命周期
-
打开
Fragment onAttach()方法执行
Fragment onCreate() 方法执行!
Fragment onCreateView() 方法执行!
Fragment onViewCreated()方法执行
Activity onCreate() 方法执行!
Fragment onActivityCreated() 方法执行!
Activity onStart() 方法执行!
Fragment onStart() 方法执行!
Activity onResume() 方法执行!
Fragment onResume() 方法执行! -
按下主屏幕键/锁屏
Fragment onPause() 方法执行!
Activity onPause() 方法执行!
Fragment onStop() 方法执行!
Activity onStop() 方法执行! -
再次打开
Activity onRestart() 方法执行!
Activity onStart() 方法执行!
Fragment onStart() 方法执行!
Activity onResume() 方法执行!
Fragment onResume() 方法执行! -
按下后退键
Fragment onPause() 方法执行!
Activity onPause() 方法执行!
Fragment onStop() 方法执行!
Activity onStop() 方法执行!
Fragment onDestroyView() 方法执行!
Fragment onDestroy() 方法执行!
Fragment onDetach() 方法执行!
Activity onDestroy() 方法执行!

3.Fragment的通信
3.1 在Fragment中调用Activity中的方法
在Fragment中调用Activity的方法很简单,Fragment有个getActivity()的方法,比如,在MainActivity中的一个Fragment中获取MainActivity的引用,并调用MainActivity的某个方法methodA()方法你可以这么写:
MainActivity mainActivity = (MainActivity) getActivity();
mainActivity.methodA();
3.2 在Activity中调用Fragment的方法
在Activity中调用Fragment中的方法是最简单的,我想这里我不用多说吧!直接接口回调即可调用Fragment的任何可访问的方法。
3.3 在Fragment中调用另外一个Fragment的方法
这个可就需要一定的思维性了,首先要想调用Fragment A的方法,除了这个Fragment A自身可以调用外,这个Fragment A所属的Activity也可以调用,要想另外一个Fragment B调用此Fragment A的方法,Fragment B可以间接通过Activity来进行调用,也就是3.1 和 3.2 的结合。看看下图你自然就会明白了:

网友评论