呼,明明感觉很累,但是看眼日历今天才周三。因开会耽误了晚间的跑步,早点到家来更一篇吧。
四 Fragment用吗,简单的说说你对它的理解
Fragment主要是用于一个Activity的多元化。有时候根据产品需求,要求一个页面能够根据配置展示不同的样式和排版。这时就是Fragment大显身手的的时候了。常用添加方法还是动态添加。通过FragmentManager获取transaction,通过transaction添加到指定布局上,之后提交transaction。
小技巧:如果想让fragment也有返回栈的效果,需要在transaction替换布局之后,提交之前,加上一句addToBackStack(null)。之后再按返回键发现fragment也进入返回栈了。
Fragment经常拿来和Activity作对比,因为二者有着极其相似的功能以及生命周期,但是却又细有区别。
Fragment的生命周期同样可以分为四种状态
1 运行状态
当一个碎片是可见的,并且它所关联的活动也正处于运行状态,该碎片也处于运行状态。
2 暂停状态
当一个活动进入暂停状态时,与之关联的碎片也进入暂停状态。
3 停止状态
当一个活动进入停止状态时,与之关联的碎片也进入停止状态。或者通过调用transaction的remove,replace等方法将碎片从活动中移除。总的来说,进入停止状态的碎片对用户来说是完全不可见的,有可能被系统回收。
4 销毁状态
碎片总是依附于活动,当活动被销毁时,碎片也进入销毁状态。或者使用transaction将碎片移除时,也会进入销毁状态。
相比于活动的生命周期回调方法,碎片增加了额外的方法
onAttach方法。当碎片和活动建立关联时调用。
onCreateView方法。为碎片创建视图时调用。
onActivityCreated方法。确保与碎片相关联的活动一定已经创建完毕时调用。
onDestroyView方法。当与碎片关联的视图被移除时调用。
onDetach方法。当碎片和活动解除关系的时候调用。
一套完整的fragment加载流程为onAttach、onCreate、onCreateView、onActivityCreated、onStart、onResume。
之后移除onPause、onStop、onDestroyView、onDestroy、onDetach。
聊到这里插一句题外知识,就是android横竖屏切换遇到的问题。
在默认设置下,横竖屏切换是会带来onCreate方法重新调用的问题。也就是伴随着activity中的数据会丢失。如果想要保证切换后数据还在,就要处理数据保存问题,一般是用saveInstance来解决。
对于屏幕切换问题,常规处理方式如下:
1 通过设置android:screenOrientation属性来禁止屏幕切换。
2 建立横竖屏两种布局,通过资源文件标识或者代码中判断的方式来根据不同情况加载不同布局
3 设置configChange属性,通过重写onConfigurationChanged方法可以跳过onCreate等步骤,将布局切换和数据保存调用放到onConfigurationChanged方法里来完成