上一篇文章简单介绍了一下Fragment,这一篇文章会详细的说一下Fragment的生命周期和创建一个用户界面。
Fragment的主要功能就是创建一个View,并且有一个生命周期来管理这个View的创建和销毁。Fragment的生命周期与Activity的生命周期类似,都会有一些回调方法,你所做的工作就是利用好这些生命周期方法,在恰当的方法中做恰当的工作。
Fragment的生命周期与Activity的状态图如下:
左侧是Activity的生命周期状态,右侧对应的是这个状态下回执行Fragment的哪些生命周期方法。可以看到Fragment生命周期函数与Activity生命周期函数很多名字都是一样的,对应的功能也类似,只不过在Created状态和Destroyed状态比Activity增加了一些方法。下面就说一下这几个增加的生命周期方法:
与Activity类似,Fragment可以停留(长时间存在)的三个状态:
与Activity类似,你可以利用Bundle来记录Fragment的状态,当Activity被销毁需要记录Fragment状态,并且在Activity重新创建的时候恢复Fragment的状态。你可以保存Fragment的状态在Fragment的onSaveInstanceState()回调方法中,在onCteat()、onCreatView()或者onActivityCreated()方法中进行恢复。
在生命周期中Activity与Fragment的最大不同之处是回退栈是相互独立的,Activity的回退栈是系统来管理的,Fragment的回退栈是被宿主Activity来管理的,也就是说你可以来进行控制(调用addToBackStack()).
注意:在Fragment中你如果要获取一个Context对象,你可以调用getActivity()方法,但是调用getActivity()方法必须要在Fragment于Activity关联起来之后,否则getActivity()返回为null。
上面说的都是Fragment的一些生命周期相关知识,下面来看看如何创建Fragment并且添加一个View给Fragment。
要想给Fragment添加一个View,你就必须重写onCreateView方法,在这个方法中创建一个View并且返回,这个View是Fragment的根View。在这个方法中系统给你提供了LayoutInflater对象,通过这个对象你可以从xml文件中创建一个View,代码如下:
publicstaticclassExampleFragmentextendsFragment{ @Override publicView onCreateView(LayoutInflaterinflater,ViewGroupcontainer, BundlesavedInstanceState){ // Inflate the layout for this fragment returninflater.inflate(R.layout.example_fragment,container,false); } }
在onCreatView方法中container参数是一个ViewGroup,这个ViewGroup是从Activity传递过来的,是Fragment的View将要嵌入的那个父View。这里需要注意一下LayoutInflater的inflate函数,在这里第三个参数是false。
resource | ID for an XML layout resource to load (e.g., R.layout.main_page ) |
---|---|
root | Optional view to be the parent of the generated hierarchy (if attachToRoot is true), or else simply an object that provides a set of LayoutParams values for root of the returned hierarchy (if attachToRoot is false.) |
attachToRoot | Whether the inflated hierarchy should be attached to the root parameter? If false, root is only used to create the correct subclass of LayoutParams for the root view in the XML. |
Returns
在这解释一下inflate的三个参数含义:
resource:是所要解析的layout文件ID;
root:一个ViewGroup,attachToRoot为true时会作为从xml文件解析出来的view的根View,如果attachToRoot为false时仅仅提供一些布局的参数给返回的rootView;
attachToRoot:决定解析的view是否会绑定到root参数提供的view上。
以上就是Fragment的生命周期和如何创建一个Fragment的View。
关注微信公众平台:程序员互动联盟(coder_online),你可以第一时间获取原创技术文章,和(java/C/C++/Android/Windows/Linux)技术大牛做朋友,在线交流编程经验,获取编程基础知识,解决编程问题。程序员互动联盟,开发人员自己的家。
【Android基础】Fragment 详解之Fragment生命周期
原文:http://www.cnblogs.com/2010wuhao/p/4780800.html