Hi,欢迎来到华清远见移动互联网学院官网!国内王牌JAVAEE培训、Android培训、HTML5培训、UI培训、JAVA培训、VR培训机构!

  • 400-611-6270
  • 新浪微博
  • 微信
您当前的位置:移动互联网学院 > Android开发 > Fragment的使用

Fragment的使用

时间:2017-06-09 09:10 来源:移动互联网学院

1、引言

    我们在开发app时,会发现有些模块是在重复使用的,如果使用activity来实现,那么在编程时就会有很多重复但不必要的地方。而在Android3.0的时候引入了Fragment,它的出现主要给大屏幕设备提供更加灵活的UI支持。Fragment本身是“碎片”的意思,我们可以把Fragment看做Activity中一个模块。 这个模块有着自己的生命周期,有着自己的界面布局,可以处理自己的输入事件,同时,Activity可以随时添加或者移除Fragment。它让我们的界面编程变得更加灵活,同时模块的复用也变得更加方便。

2、Fragment优点

(1)Fragment可以使你能够将activity分离成多个可重用的组件,每个都有它自己的生命周期和UI。

(2)Fragment可以轻松得创建动态灵活的UI设计,可以适应于不同的屏幕尺寸,从手机到平板电脑。

(3)Fragment是一个独立的模块,紧紧地与activity绑定在一起,可以运行中动态地添加、移除等。

(4)Fragment提供一个新的方式让你在不同的安卓设备上统一你的UI

(5)Fragment 解决Activity间的切换不流畅,轻量切换

(6)Fragment做局部内容更新更方便,原来为了到达这一点要把多个布局放到一个activity里面,现在可以用多Fragment来代替,只有在需要的时候才加载Fragment,提高性能

3、Fragment的创建

(1)在res/layout/下创建一个布局文件one.xml

1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    

2.    android:layout_width="match_parent"    

3.    android:layout_height="match_parent"    

4.    android:background="#00ff00" >    

5.    <TextView    

6.        android:layout_width="wrap_content"    

7.        android:layout_height="wrap_content"    

8.        android:text="This is a fragment"    

9.        android:textColor="#000000"    

10.        android:textSize="25sp" />    

11. </LinearLayout> 

(2)在src/包名/下新建一个OneFragment,继承自Fragment

1. public class OneFragment extends Fragment {  

2.    @Override  

3.    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  

4.        return inflater.inflate(R.layout.one, container, false);  

5.    }  

6. }  

(3)在MainActivity中动态添加Fragment

1. public class MainActivity extends Activity {  

2.

3.    @Override  

4.    protected void onCreate(Bundle savedInstanceState) {  

5.        super.onCreate(savedInstanceState);  

6.        setContentView(R.layout.activity_main);  

7.

8.        Button btnLoadFragOne = (Button)findViewById(R.id.btnLoadFragOne);  

9.        btnLoadFragOne.setOnClickListener(new View.OnClickListener() {  

10.            @Override  

11.            public void onClick(View v) {  

12.                FragmentManager manager = getFragmentManager(); //获取Fragment的管理器

13.                FragmentTransaction transaction = manager.beginTransaction();  //启动事物

14.                OneFragment oneFragment = new OneFragment();  //创建Fragment对象

15.                transaction.add(R.id.fragment_container, oneFragment);//将Fragment对象添加到指定容器中 

16.                transaction.commit();  //提交事物

17.            }  

18.        }); 

19.    } 

20. }

4、Fragment生命周期

(1) onAttach:onAttach()在fragment与Activity关联之后调调查用。需要注意的是,初始化fragment参数可以从getArguments()获得,但是,当Fragment附加到Activity之后,就无法再调用setArguments()。所以除了在最开始时,其它时间都无法向初始化参数添加内容。

(2) onCreate:fragment初次创建时调用。尽管它看起来像是Activity的onCreate()函数,但这个只是用来创建Fragment的。此时的Activity还没有创建完成,因为我们的Fragment也是Activity创建的一部分。所以如果你想在这里使用Activity中的一些资源,将会获取不到。如果想要获得Activity相关联的资源,必须在onActivityCreated中获取。

(3) onCreateView:在这个fragment构造它的用户接口视图(即布局)时调用。在这里期望返回此Fragment的一个视图层次结构。使用LayoutInflater的inflater()方法来构造实图。

(4) onActivityCreated:在Activity的onCreate()结束后,会调用此方法。所以到这里的时候,Activity已经创建完成!在这个函数中才可以使用Activity的所有资源。

(5) onStart:当到onStart()时,Fragment对用户就是可见的了。但用户还未开始与Fragment交互。在生命周期中也可以看到Fragment的onStart()过程与Activity的onStart()过程是绑定的。意义即是一样的。以前你写在Activity的onStart()中来处理的代码,用Fragment来实现时,依然可以放在onStart()中来处理。

(6) onResume:当这个fragment对用户可见并且正在运行时调用。这是Fragment与用户交互之前的最后一个回调。从生命周期对比中,可以看到,Fragment的onResume与Activity的OnResume是相互绑定的,意义是一样的。它依赖于包含它的activity的Activity.onResume。当onResume()结束后,就可以正式与用户交互了。

(7) onPause:此回调与Activity的onPause()相绑定,与Activity的onPause()意义一样。

(8) onStop:这个回调与Activity的onStop()相绑定,意义一样。

(9) onDestroyView:如果Fragment即将被结束或保存,那么撤销方向上的下一个回调将是onDestoryView()。会将在onCreateView创建的视图与这个fragment分离。下次这个fragment若要显示,那么将会创建新视图。这会在onStop之后和onDestroy之前调用。这个方法的调用同onCreateView是否返回非null视图无关。它会潜在的在这个视图状态被保存之后以及它被它的父视图回收之前调用。

(10) onDestroy:当这个fragment不再使用时调用。需要注意的是,它即使经过了onDestroy()阶段,但仍然能从Activity中找到,因为它还没有Detach。

(11) onDetach:Fragment生命周期中最后一个回调是onDetach()。调用它以后,Fragment就不再与Activity相绑定,它也不再拥有视图层次结构,它的所有资源都将被释放。

  • 北京

    010-82600385/6

    北京市海淀区西三旗悦秀路北京明园大学校内

  • 上海

    021-54485127

    上海市徐汇区漕溪路250号银海大楼11层

  • 深圳

    0755-25590506

    深圳市龙华新区人民北路美丽AAA大厦15层

  • 成都

    028-85405115

    成都武侯区科华北路99号科华大厦2层

  • 南京

    025-86551900

    南京市白下区汉中路185号鸿运大厦11层

  • 武汉

    027-87804688

    武汉工程大学卓刀泉校区科技孵化器大楼11层

  • 西安

    029-88756251

    西安市高新区高新1路12号天公大厦3层

  • 广州

    020-38342087

    广州市天河软件园柯木塱园5栋三层

  • 沈阳

    024-24349000

    沈阳市沈河区北顺城路137号锦峰大厦7层

  • 济南

    0531-88898293

    济南市高新区舜华路三庆世纪财富中心B3座6层

  • 重庆

    023-68064704

    重庆市九龙坡区渝州路87号双薪时代九楼

  • 长沙

    15010390966

    长沙市开福区芙蓉中路海东青大厦B座11楼

Copyright © 2004-2017 华清远见教育集团 版权所有,沪ICP备10038863号-3,京公海网安备110108001117号