fragment扫盲贴 小白吹牛逼应付面试必看

首先感谢鸿洋大神的谆谆教诲.鸿洋大神是我永恒的偶像,膜拜一下先.想详细了解的请走传送门 http://blog.csdn.net/lmj623565791/article/details/37970961


先说一下我对fragment的理解. 

fragment ,碎片  可以理解为,项目是一个一个文件堆的,文件是一个一个碎片堆得

可以看做一个高级的自定义控件,高级在控件的内容可以被替换,并像Activity那样有个栈,可以回退操作.哪里想用放哪里,妈妈再也不用担心我粘错代码

用来解耦,解放activity,避免一个activity 1000+行代码哪都不敢碰的尴尬.

灵活性,可读性,可复用性大大提高, 堪比重构项目

小白总结:fragment可以看做是在布局中定义一个控件,名叫fragmentlayout, 然后在activity中填充进去内容,fragmentA,比自定义控件牛逼之处在于,还可以将fragmentA替换成fragmentB,然后点击后退键,唉呀妈呀,

又回到fragmentA


下面老师要画重点了,几乎都是必考的.难易程度与考的可能性成负相关


fragment生命周期   简单  

回退栈,                        难     

与activity 的交互      中等  

常用方法                    简单

后台运行的缺陷       装逼


小白们记住,代码是给人写的,不是给机器写的,你写完,功能完成了,不说别人看不懂,你自己都看不懂.... :) 碰见愿意改需求的SB用户,你就SB了.---年迈的程序员


好,下面开始天下文章一大抄,抄来抄去有提高.


常问问题及一句话解答:


activity 和fragment 的交互

记住倆方法:getActivity     findFragmentByTag||findFragmentById

因为所有的Fragment都是依附于Activity的,所以通信起来并不复杂,大概归纳为:

a、如果你Activity中包含自己管理的Fragment的引用,可以通过引用直接访问所有的Fragment的public方法

b、如果Activity中未保存任何Fragment的引用,那么没关系,每个Fragment都有一个唯一的TAG或者ID,可以通过getFragmentManager.findFragmentByTag()或者findFragmentById()获得任何Fragment实例,然后进行操作。

c、在Fragment中可以通过getActivity得到当前绑定的Activity的实例,然后进行操作。

注:如果在Fragment中需要Context,可以通过调用getActivity(),如果该Context需要在Activity被销毁后还存在,则使用getActivity().getApplicationContext()。






Fragment的生命周期

上图:

先背下来就行.之后再理解,着急就不用理解了,但是一定要背下来

可以看到Fragment比Activity多了几个额外的生命周期回调方法:
onAttach(Activity)
当Fragment与Activity发生关联时调用。
onCreateView(LayoutInflater, ViewGroup,Bundle)
创建该Fragment的视图
onActivityCreated(Bundle)
当Activity的onCreate方法返回时调用
onDestoryView()
与onCreateView想对应,当该Fragment的视图被移除时调用
onDetach()
与onAttach相对应,当Fragment与Activity关联被取消时调用
注意:除了onCreateView,其他的所有方法如果你重写了,必须调用父类对于该方法的实现,


fragment 的常用方法及辨析:

remove 会销毁视图,hide不会

.add()  

.remove()  会销毁视图

.replace()  =remove + add

.hide()  不会销毁视图

.show()


fragment 回退栈


类似于activity栈,如果fragment不加入回退栈,fragmentA,被fragmentB替换后,A的实例会被干掉,点击goback建不会回到A.fragment栈清空之后,再点回退键,才会调用activity栈,回退activity


后台运行缺陷:

在后台时,由于生命周期重合,所以,oncreat时会重绘fragment,导致重合,解决办法是只有在savedInstanceState==null时,才进行创建Fragment实例


当你的应用被至于后台(例如用户点击了home),长时间没有返回的时候,你的应用也会被重新启动。例:如果你把至于FragmentB界面,然后处于后台状态,长时间后你会发现当你再次通过home打开时,上面FragmentA与FragmentB叠加在一起,这就是因为你的Activity重新启动,在原来的FragmentB上又绘制了一个FragmentA。

解决方法:

通过检查onCreate的参数Bundle savedInstanceState就可以判断,当前是否发生Activity的重新创建:

默认的savedInstanceState会存储一些数据,包括Fragment的实例,只有在savedInstanceState==null时,才进行创建Fragment实例

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值