概念:Android3.0后引入,初衷是为了适应大屏幕的平板电脑;
可以把屏幕划分成几块进行分组,进行模块化管理,方便在运行过程中动态地更新Activity的用户界面;
Fragment不能单独使用,需嵌套在Activity 中,拥有自己的生命周期但还是会受到宿主Activity的生命周期的影响;
特点:可以帮助开发者实现类似于局部刷新的功能,节省刷新界面的时间和内存消耗;
Fragment的生命周期图
生命周期Resumed:在运行中的Fragment可见;
Paused:所在Activity可见,但是得不到焦点;
Stoped:①调用addToBackStack(),Fragment被添加到Bcak栈;
②该Activity转向后台,或者该Fragment被替换/删除;
停止状态的fragment仍然活着(所有状态和成员信息被系统保持着),但用户不再可见,并且activity被干掉,他也会被干掉;
Fragment的子类及V4包
子类
对话框:DialogFragment
列表:ListFragment
选项设置:PreferenceFragment
WebView界面:WebViewFragment
V4包
V4包Fragment是为了兼容Andorid3.0(api11)之前的机型,最低可以兼容到1.6版本;
注:使用v4包Fragment需使用FragmentActivity和getSupportFragmentManager( )
创建Fragment
1)静态加载Fragment
新建fragment及布局xml,将fragment作为Activity布局xml中的一个节点;
2)动态加载Fragment
新建fragment及布局xml,使用布局在Activity布局xml中给fragment占位,代码中使用事务添加fragment;
注:fragment嵌套fragment需使用getChildFragmentManager
Fragment管理与Fragment事务
fragment管理与事务FragmentTransaction只能使用一次,每次使用都要调用FragmentManager 的beginTransaction()方法获得FragmentTransaction事务对象;
transaction.add:添加不会清空容器中内容,不能重复添加同一fragment;
transaction.replace:替换会把容器中的所以内容全都替换掉;
transaction.commit()与commitAllowingStateLoss():后者允许丢失一些界面的状态和信息;
小技巧:fragment1被frament2replace会清空fragment1(使用Fragment栈可以保存)
1.fTransaction.addToBackStack(null);//调用addToBackStack将Fragment添加到栈中
2.点击返回按钮if(fManager.getBackStackEntryCount() != 0)fManager.popBackStack();
Fragment与Activity的交互
组件与数据传递搭建程序主界面(单Activity多Fragment)
使用saveInstanceState保存状态
原因:Fragment不使用系统进行回收,FragmentActivity调用onSaveInstanceState保存Fragment,Activity可能会被系统回收而Fragment并不会 随着Activity的回收而被回收,从而导致,Fragment丢失对应的Activity。长时间后,再次打开app,FragmentActivity重新执行生命周期的 时候生成fragment添加到FragmentActivity,系统恢复的fragment和activity失去关联,进而出错。
界面搭建
网友评论