Fragment 详情

Fragment (碎片)

“碎片”---Sub Activity

FragmentAndroid 3.0 (Honeycomb)被引入的。主要目的是为了给大屏幕(如平板电脑)上更加动态和灵活的UI设计提供支持。由于平板电脑的屏幕比手机的屏幕大很多,因此可用于组合和交换的UI组件的空间更大,利用Fragment实现此类设计的时,就无需管理对视图层次结构的复杂更改。

通过将 Activity 布局分成片段,您可以在运行时修改 Activity 的外观,并在由 Activity 管理的返回栈中保留这些更改。如果仅仅只有Activity布局,那是不够的,不仅在手机上有一套布局,同时在平板上还需要设计一套布局,那样维护起来也麻烦,代码上也有一定的冗余,对于APP包的大小也有一定的压力。Fragment的优势是布局在不同设备上的适配。

Fragment是什么:

简单来说,Fragment其实可以理解为一个具有自己生命周期的控件,只不过这个控件又有点特殊,它有自己的处理输入事件的能力,有自己的生命周期,又必须依赖于Activity,能互相通信和托管。

静态添加

在界面的xml,写控件视图fragment,在另写一个xml(就行listview似的),写一个类去去继承Fragment,  返回值就是解析视图(就是另一个视图),fragment里得去写class或者name这个的目的是绑定继承Fragment这个类。

 

动态添加

在界面的xml中,写控件视图FrameLayout帧布局,写两个分别给权重

在写两个类去继承Fragment 包是app,返回值都分别是解析所用的视图

在主java文件中

//FragmentManger:Activity内部用来与Fragment进行交互的接口
FragmentManager fragmentManager = getFragmentManager();
//开启一个事物
FragmentTransaction transaction = fragmentManager.beginTransaction();
left left = new left();
//将左侧的那个Fragment添加到R.layout.left这个id所代表的容器中。
transaction.add(R.id.left,left);
right right = new right();
transaction.add(R.id.right,right);
transaction.commit();

 

 

 

 

动态创建Fragment(掌握)

 

通过动态加载的方式来加载Framgnt,咱们在使用之前,先来看看下面的内容:

Fragment常用的三个类:

android.app.Fragment 主要用于定义Fragment

android.app.FragmentManager 主要用于在Activity中操作Fragment

android.app.FragmentTransaction 保证一些列Fragment操作的原子性,熟悉事务这个词,一定能明白~

 

a、获取FragmentManage的方式:

getFragmentManager() // v4中,getSupportFragmentManager

 

b、主要的操作都是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

detach()

会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护。

attach()

重建view视图,附加到UI上并显示。

transatcion.commit()//提交一个事务

Activity与Fragment之间通信(掌握)

Android 为Fragment 和Activity之间的通信提供了两种机制:

       机制1:

     ①Fragment获取它所在的Activity

      调用Fragment的getActivity()方法即可返回它所在的Activity实例,之后我们就能够通过这个实例调用     

      findViewById(int) 方法了,也就是说,我们能够在Fragment中得到相关联的Activity的组件的信息 ,

      如:TextView textView = (TextView)getActivity().findViewById(R.id.textView) ;

      之后就能够获得TextView中的字符内容

       机制2:

    ①Activity向Fragment中传递数据

     Activity中创建Bundle数据包,并调用Fragment对象的setArguments(Bundle bundle)方法

    (也就是说我们得要首先创建一个Fragment对象之后才能够用这个对象调用setArgument(Bundle)方法)即     

     可将Bundle数据包传递给该Fragment对象;之后在Fragment类中调用getArguments()方法就能够获得这个  

     Bundle包.这个方法一般用在Activity加载一个Fragment的时候,由于当我们加载一个Fragment的时候就想

     要将一些数据传给Fragment对象,来对Fragment对象进行初始化,所以在Fragment中的onCreate()或者  

     onCreateView()方法中调用getArgument()方法来获得这个Bundle对象

    ②Fragment实时的向Activity通信

      实际就是使用接口回调的机制,也就是在Fragment中定义一个内部回调接口,再让包含该Fragment的Activity  

      类实现这个接口,这样Fragment就能够调用这个回调方法,将数据传给Activity中

 

 

 

 

 

 

 

Fragment的生命周期

onAttach    附加,绑定

onCreate    创建

onCreateView   创建视图

onActivityCreated   

onStart    开始

onResume   获取焦点

Onpause    失去焦点

onStop     暂定

onDestroyView   销毁是u

onDestroy   销毁

onDetach    分离

Fragment的生命周期的执行顺序

创建:

Activity-onCreate

Fragment-onAttach

Fragment-onCreate

Fragment-onCreateView

Fragment-onActivityCreated

Activity-onStart

Fragment-onStart

Activity-onResume

Fragment-onResume

点击返回键:

Fragment-onPause

Activity-onPause

Fragment-onStop

Activity-onStop

Fragment-onDestroyView

Fragment-onDestroy

Fragment-Detach

Activity-onDestroy

Activity Fragment

FragmentActivity 再死

猜你喜欢

转载自blog.csdn.net/zeyu_rensheng/article/details/80291123