Fragment面试总结

一、Fragment为什么被称为第五大组件?
首先在使用频率上,fragment不低于其他四大组件,而且它有自己的生命周期。使用fragment比activity更加节省内存,同时,它可以很灵活的加载到activity中,fragment切换更加舒适,所以它被称为第五大组件。虽然它有自己的生命周期,但是它必须依附于宿主activity存在。
二、Fragment加载到activity中的两种方式?
静态加载:在activity的布局文件中以标签的形式添加fragment。
动态加载:在java文件中以代码的形式加载fragmet。 
1、获取FragmentManager管理者对象;
2、通过上述对象的beginTranscation()方法创建FragmentTranscation对象;
3、通过transcation对象的add()/remove()/replace()/hide()/show()等方法来显示或者移除fragment;
4、通过transcation对象的commit()方法来提交。
总结起来就是如下两行代码: 
getFragmentManager().beginTranscation().add() 
getFragmentManager().beginTranscation().commit()
三、fragmentPagerAdapter和fragmentStatePagerAdapter的区别?
fragmentPagerAdapter在destroyItem()的时候调用的是detach()方法,只是把UI进行了分离,并没有真正的移除fragment,所以只适用于页面较少的情况。而fragmentStatePagerAdapter在切换页面的时候调用的是remove()方法,是真正回收内存的,所以它适用于页面较多的情况。
四、fragment的生命周期?

onAttach()–>onCreate()–>onCreateView()–>onViewCreate()–>activity.onCreate()–>onActivityCreate()–>activity.onStart()–>activity.onResume()–>activity.onPause()–>activity.onStop()–>onDestroyView()–>onDetach()

这里写图片描述

五、fragment与activity之间的传值通信?

1、fragment向activity之间的传值:

在fragment中通过getActivity()获取activity的对象,然后调用activity中的方法;
接口回调:在fragment中设置一个接口,然后让activity实现这个接口,这样就可以在接口中将数据传递给activity.
2、activity向fragment传值:

在 activity中创建Bundle数据包,通过putExtra()方法将数据放进去,然后调用fragment对象的setArguments(bundle)方法,在fragment中就可以通过getArguments()方法获取数据。
在activity中通过getFragmentManager.findFragmentById()获取fragment对象,然后就可以调用fragment的方法了。
3、fragment与fragment传值:

在第一个fragment中调用getActivity().getFragmentManager().findFragmentById()获取第二个fragment的对象,然后调用第二个fragment中的方法;
接口回调:在fragment1中设置一个接口,宿主activity实现这个接口,fragment1在接口中与activity实现通信,然后在activity中的回调方法中,实现与fragment2的通信。
总结:fragment与activity通信的关键点就是要拿到对方的对象,fragment通过getActivity()获取activity的对象,activity通过getFragmentManager().getFragmentById()来获取fragment对象。fragment与activity之间可以直接通信,而fragment之间必须通过activity这个宿主来实现通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值