8.8 Fragment

概念: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中的一个节点;

xml声明fragment节点

2)动态加载Fragment

      新建fragment及布局xml,使用布局在Activity布局xml中给fragment占位,代码中使用事务添加fragment;

xml中使用其他布局占位
代码动态替换

注: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失去关联,进而出错。

界面搭建

Fragment使用注意事项

注意点

过场动画

过场动画

你可能感兴趣的:(8.8 Fragment)