Android面试题之Fragment

Fragment是日常开发中除了Activity外用的最多的组件之一,所以掌握Fragment的使用也非常重要。推荐阅读: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生命周期
4. Fragment与Activity之间是如何传值的:
1. Activity向Fragment传值:
步骤:
要传的值,放到bundle对象里;
在Activity中创建该Fragment的对象fragment,通过调用
fragment.setArguments()传递到fragment中;
在该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的对象,这样就可以调用另一个的方法了。
第二种:
通过接口回调的方式。
第三种:
通过setArguments,getArguments的方式。
6. FragmentTransaction的add和replace的区别:
add + hide + show的方式:
其实add是一层层添加上去的,通过show去显示当前界面,hide去隐藏其他的界面,这时候的FrameLayout是会有很多层的。Fragment A 切换到Fragment B,然后再由Fragment B 切换到Fragment A 的时候,Fragment A 的所有生命周期是不会走的,只会调用onHiddenChanged(boolean isHidden),也就是说hide和show只是把其他界面隐藏,当前界面显示的效果,并不会走生命周期方法。
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适用于页面较多的情况。

点赞

发表评论