Fragment

来源:互联网 发布:怎样下载淘宝网到桌面 编辑:程序博客网 时间:2024/06/17 22:25

Fragment知识概要


(1) Fragment可以作为Activity界面的一部分组成出现。

(2) 可以在一个Activity中同时出现多个Fragment,并且一个Fragment也可以在多个Activity中使用。

(3) 在Activity运行过程中,可以添加、移除和替换Fragemnt。

(4) Fragment可以响应自己的输入时间,并且有自己的生命周期,它们的生命周期受宿主Activity的生命周期影响

特点:  Fragment是一个有生命周期的UI控件

             Fragment的生命周期由Activity决定

             Fragment的创建必须依赖Activity

优点:  适应PAD,充分利用屏幕资源

             实现布局文件和JAVA代码的重用



静态加载

创建Fragment

1. 写一个类MyFragment继承Fragment


2. xml文件中使用<fragment>

在Activity的layout文件中声明Fragment,需要特别注意的是<fragment>中的android:name属性指定了在layout中实例化的Fragment类

         标识Fragment的方法:

          android:id属性提供一个唯一ID

          android:tag属性提供一个唯一字符串


3.  在布局文件中写一个fragment.xml布局文件,内容自定义。


4. 在自定义MyFragment类中重写onCreateView()方法,并返回view

                    //      layout布局文件转换成View对象

            //      resource:Fragment需要加载的布局文件

            //      root:加载layout的父ViewGroup

            //      attacthToRoot:false,不返回父ViewGroup

         View view = inflater.infate(R.layout.fragment, container, false);

               return view;



动态加载


1. 先在xml文件中,给Fragment创建一个占位,一般使用一个FramLayout

2. 在java代码中使用FragmentManager创建一个FragmentTransaction

3. 在FragmentTransation的begin和commit之间进行一系列的操作,一个事务只能commit一次



1  撰写代码将Fragment添加到一个Activity layout中

       add():添加一个Fragment(指定要添加的fragment和插入View)

       与此类似的还有remove()、替换()

2  处理Fragment事务

      根据用户的交互情况,对Fragment进行添加、移除、替换以及执行其他动作,提交给Activity的每一套变化被称作事务。

        FragmentManager fragmentManager = getFragmentManager();

        FragmentTransaciton beginTransaction = fragmentManager.beginTransaction();

        //beginTransaction.add(R.id.frame,fragment);  第一个参数:添加到哪个布局中

                                                                                  第二个参数:fragment的对象

        //beginTransaction.commit();

      每一个事务都是同时执行一套变化,可以在一个事务中设置你所有想执行的变化,包括add()  removie()  replace()

然后提交给Activity,必须调用commit()方法

       如果允许用户通过按下BACK按键回返到前一个Fragment状态,调用commit()之前可以加入addToBackStack()f方法。




FragmentTransaction的方法
 
     FragmentTransaction transaction = fm.benginTransatcion();//开启一个事务
  • transaction.add()      往Activity中添加一个Fragment 
  • transaction.remove()    从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈,这个Fragment实例将会被销毁。
  • transaction.replace()    使用另一个Fragment替换当前的,实际上就是remove()+add()的合体 
  • transaction.hide()    隐藏当前的Fragment,仅仅是设为不可见,并不会销毁 
  • transaction.show()   显示之前隐藏的Fragment 
  • transaction.detach()    会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护
  • transaction.attach()     重建view视图,附加到UI上并显示 
  • transatcion.commit()    提交一个事务
  • fragment.isAdded()  判断一个Fragment是否已经被添加到事务中


Fragment传值

1 Bundle方式

      fragment.setArgument(Bundle)    放值

      fragment.getArgument()  获得Bundle     取值

2  Activity公共方式

      在一个Activity中,声明一个公共方法,并返回相关数据

      在Fragment中,通过getActivity()获取Fragment的归属Activity对象,将这个对象强制类型转换



Fragment生命周期

初始化阶段 --〉Activity onCreate
onAttach  与归属Activity建立连接
onCreate  初始化Fragment
onCreateView  创建Fragment的UI控件
onActivityCreated  归属Activity的onCreate方法执行完之后被调用

显示/隐藏
onStart onResume  onPause  onStop

销毁阶段 --〉Activity的onDestroy
onDestroyView 销毁Fragment的UI控件
onDestroy  销毁Fragment
onDetach

0 1
原创粉丝点击