Fragment的使用方式
在Fragment中模拟返回栈
- FragmentTransaction中提供了一个addToBackStack方法,用于将一个事务添加到回退栈中,参数可写为null。
Fragment的生命周期
Fragment的状态和回调
状态
- 运行状态
- 可见、它所关联的activity是运行状态
- 暂停状态
- 依旧是可见的,只是它所关联的activity处于了暂停状态
- 停止状态
- 它所关联的activity处于了停止状态
- 通过FragmentTransaction的remove、replace方法将fragment从activity中移除 ,但是在提交事务之前,通过addToBackStack方法将该事务添加到返回栈,此时也会进入停止状态。进入停止状态的fragment对用户来说是完全不可见的,有可能被系统回收。类比activity的onStop调用之后(进入停止状态)
- 销毁状态
- activity销毁,fragment也就跟着销毁了
- 通过FragmentTransaction的remove、replace方法将fragment从activity中移除 ,但是在提交事务之前,没有通过addToBackStack方法将该事务添加到返回栈,此时也会进入销毁状态。
- 运行状态
回调
- onAttach
- 与activity建立关联
- onCreate
- 创建
- onCreateView
- 为fragment创建视图的时候调用
- onActivityCreated
- 确保与fragment关联的activity创建完毕调用,注意:fragment停止的时候再次恢复会直接调用onCreateView,然后调动该方法,activity一直存在。
- onStart
- 对应activity的方法(注意:只有在第一次在activity中加载,并且activity也是重新加载才会对应,对于替换fragment等造成的fragment重新执行方法不会与activity对应)
- onResume
- 对应activity的方法(注意:只有在第一次在activity中加载,并且activity也是重新加载才会对应,对于替换fragment等造成的fragment重新执行方法不会与activity对应)
- onPause
- 对应activity的方法(注意:只有在第一次在activity中加载,并且activity也是重新加载才会对应,对于替换fragment等造成的fragment重新执行方法不会与activity对应)
- onStop
- 对应activity的方法(注意:只有在第一次在activity中加载,并且activity也是重新加载才会对应,对于替换fragment等造成的fragment重新执行方法不会与activity对应)
- onDestroyView
- 视图被移除
- onDestroy
- 销毁
- onDetach
- 与activity解除关联
- onAttach
关于回收
- fragment进入停止状态也可能因为内存不足被回收,也会调用onSaveInstanceState方法,可以再onCreate、onCreateView和onActivityCreated的参数中拿到数据
动态加载布局的技巧
使用限定符
使用最小宽度限定符
- layout-sw600dp 表示宽度大于600dp就加载它
一个简易的新闻客户端
- 兼容手机和平板
- 创建两个类
- TitleFragment
- 里面是listview,设置点击事件,通过它所依附的activity.findviewbyid去看是否包含有ContentFragment,如果有就说明是平板模式,如果没有就是手机模式。平板模式下刷新第二个fragment,手机模式下跳转Activity
- ContentFragment
- TitleFragment
- 两个activity_main布局文件
- 位于layout-sw600dp 里面有两个,name分别用前面两个类
- 位于layout,里面有一个,name为TitleFragment
- 创建MainActivity,加载activity_main
- 创建两个类