Android面试(二):Fragment面试你所需知道的一切

1. 什么是Fragment:

Fragment,俗称碎片,自Android 3.0开始被引进并大量使用。作为Activity界面的一部分,Fragment的存在必须依附于Activity,并且与Activity一样,拥有自己的生命周期,同时处理用户的交互动作。同一个Activity可以有一个或多个Fragment作为界面内容,并且可以动态添加、删除Fragment,灵活控制UI内容,也可以用来解决部分屏幕适配问题。

2. Fragment为什么被称为第五大组件:

首先Fragment的使用次数是不输于其他四大组件的,而且Fragment有自己的生命周期,比Activity更加节省内存。

3. Fragment生命周期:

Android面试(二):Fragment面试你所需知道的一切_第1张图片
1.png

从上图可以看到Fragment比Activity多了几个额外的生命周期回调方法:

Android面试(二):Fragment面试你所需知道的一切_第2张图片
2.png

4. Fragment与Activity之间是如何传值的:

1. Activity向Fragment传值:

步骤:

  1. 要传的值,放到bundle对象里;
  2. 在Activity中创建该Fragment的对象fragment,通过调用
    fragment.setArguments()传递到fragment中;
  3. 在该Fragment中通过调用getArguments()得到bundle对象,就能得到里面的值。

2. Fragment向Activity传值:

第一种:
在Activity中调用getFragmentManager()得到fragmentManager,,调用findFragmentByTag(tag)或者通过findFragmentById(id)
FragmentManager fragmentManager = getFragmentManager();
Fragment fragment = fragmentManager.findFragmentByTag(tag);

第二种:
通过回调的方式,定义一个接口(可以在Fragment类中定义),接口中有一个空的方法,在fragment中需要的时候调用接口的方法,值可以作为参数放在这个方法中,然后让Activity实现这个接口,必然会重写这个方法,这样值就传到了Activity中

5. Fragment与Fragment之间是如何传值的:

第一种:
通过findFragmentByTag得到另一个的Fragment的对象,这样就可以调用另一个的方法了。
第二种:
通过接口回调的方式。
第三种:
通过setArgumentsgetArguments的方式。

6. FragmentTransaction的add和replace的区别:

  1. add + hide + show的方式:
    其实add是一层层添加上去的,通过show去显示当前界面,hide去隐藏其他的界面,这时候的FrameLayout是会有很多层的。Fragment A 切换到Fragment B,然后再由Fragment B 切换到Fragment A 的时候,Fragment A 的所有生命周期是不会走的,只会调用onHiddenChanged(boolean isHidden),也就是说hide和show只是把其他界面隐藏,当前界面显示的效果,并不会走生命周期方法。

  2. replace的方式:
    其实replace是会替换掉原有的,所以这种方式的FrameLayout是只有一层的,再如上面的方式切换fragment,Fragment A会依次走生命周期方法:onAttach ---> onViewCreated ---> onActivityCreated ---> onStart。但是如果添加代码 ft.addToBackStack(null),生命周期方法onAttach方法就不会走。

7. Fragment如何实现类似Activity的压栈和出栈效果的:

Fragment的事物管理器内部维持了一个双向链表结构,该结构可以记录我们add或者replace的Fragment,然后当我们按返回键的时候,会自动帮我们实现出栈操作。

8. FragmentPagerAdapter与FragmentStatePagerAdapter的区别:

一. 由于FragmentStatePagerAdapter在destoryItem的时候调用mCurTransaction.remove(fragment),会回收内存的,而页面比较多的时候,就比较消耗内存,所以FragmentStatePagerAdapter适合于页面比较多的情况。
二. FragmentPagerAdapter在destoryItem的时候调用mCurTransaction.detach(fragment),没有回收内存,只是将fragment与activity的UI进行分离,所以FragmentPagerAdapter适合于页面比较少的情况。

总结:FragmentPagerAdapter适用于页面较少的情况,FragmentStatePagerAdapter适用于页面较多的情况。

喜欢本篇博客的简友们,就请来一波点赞,您的每一次关注,将成为我前进的动力,谢谢!

你可能感兴趣的:(Android面试(二):Fragment面试你所需知道的一切)