在使用Fragment之前,Fragment的生命周期是一个比较关心的问题。目前,如果要在Android上开发APP,必须要考虑“碎片化”的问题,或者说必须要考虑多屏适配。这是每个开发者都必须面对的问题。现在市面上的手机各种屏幕分辨率各种尺寸,更要命的是除了手机还有平板电脑!我们都知道,仅就屏幕尺寸而言,手机和平板电脑就大不相同。所以我们在开发应用的时候一定要牢记,我们的APP要适用于不同的设备,一定要达到最好的效果,这样才能保证更好的用户体验。那么问题来了,我们需要调整应用在手机和平??板上显示相同的效果,也就是现在所说的多屏适配。在之前的一篇文章中,我已经谈到了如何使用Android的一些特性来支持多屏,比如创建不同的布局文件等等。这个方法现在还可以做,但是已经不能满足我们的要求了。一个典型的例子是带有列表的应用程序,当用户单击列表项时会显示详细信息。这样的话,我们就可以让应用在手机和平??板上有不同的体验效果。在手机端需要两个Activity来完成这个功能,如图:当用户点击时,出现的界面如下:而在平板端,我们需要利用好屏幕来显示列表和细节放在一起,如图:从上面的例子中,我们可以清楚地看到我们需要一个方法来“合并活动”,这样当其中一个活动调用另一个活动时,两个活动可以同时或依次显示.我们需要在不重写代码的情况下重新组织界面布局,仅仅使用多个布局是不够的,我们需要其他技术。Fragment在Android3.0引入了一个新的概念,叫做Fragment。它有自己的布局文件,可以作为组件排列,也可以相互组合,实现不同的布局显示。使用Fragment可以重用代码,满足不同设备尺寸的需求。Fragment不能单独存在,只能存在于Activity中,一个Activity可以有多个Fragment。非常重要的一点是,Fragment可以和Activity中的其他组件一起使用,而无需重写所有Activity接口。因此,可以使用Fragment来完成上面例子中“主界面-详细界面”的APP需求。在手机上是这样显示的:在平板上是这样的:Fragmentlifecycle既然我们已经知道Fragment好用,我们还需要知道它是如何工作的。Fragments只能存在于一个Activity中(作为容器),每个Fragment都有自己的视图结构,可以像我们之前那样加载到布局中。Fragment的生命周期比较复杂,因为它有更多的状态,如图:下面我们来看一下Fragment完整的生命周期。在Fragment生命周期开始时,会调用onInflate方法。需要注意的是,只有当我们直接在布局文件中用标签定义的时候,这个方法才会被调用。我们可以在这个方法中保存一些配置参数和xml布局文件中定义的一些属性。这一步之后,就轮到onAttach被调用了。当Fragment绑定到它的父Activity时会调用这个方法,我们可以在这里保存它和Activity之间的引用。之后将调用onCreate。这是最重要的步骤之一。片段是在这一步生成的。您可以使用此方法启动其他线程来检索数据,例如从远程服务器启动。当Fragment创建自己的视图结构时会调用onCreateView方法。在这个方法中,我们将加载Fragment的布局文件,就像我们在ListView控件中加载布局一样。在这个过程中,我们无法保证父Activity是否已经创建,所以这里有些操作是无法完成的。可以看出,在onActivityCreated之后Activity才算建立。至此,我们的Activity就创建成功并激活了。我们可以随时使用它。下一步是onStart。我们这里做的和Activity中的onStart是一样的。该方法虽然可以显示Fragment,但是不能与用户进行交互。只有在onResume之后,Fragment才能开始与用户进行交互。在此过程之后,片段启动并运行。也许暂停活动。将调用Activity的OnPause方法。这个时候Fragment的onPause方法也会被调用。系统也可能会破坏Fragment的视图显示,此时会调用onDestroyView方法。之后如果系统需要彻底销毁整个Fragment,就会调用onDestroy方法。这个时候我们需要释放所有可用的连接,因为这个时候Fragment很快就会被kill掉。尽管正在准备销毁过程中,Fragment仍然绑定在父Activity上。最后一步是解除Fragment与Activity的绑定,即调用onDetach方法。如何创建Fragment既然我们了解了Fragment的生命周期,我们需要知道如何创建Fragment并将其绑定到Activity。首先要做的是继承android.app.Fragment写一个Fragment。假设我们的Fragment叫做Fragment1,创建和定义如下:publicclassFragment1extendsFragment{...}上面我们说过,Fragment只能存在于Activity中,所以我们必须在某处定义它,有两种方式:-直接在xml布局中定义文件;-在xml布局文件中定义一个placeholder,然后在Activity中动态操作Fragment;我们定义Fragment的方式会影响它的生命周期,因为在上面的第一种情况下会调用onInflate方法,而在第二种情况下它的生命周期从onAttach方法开始。如果我们在XML文件中定义Fragment,我们需要:,如果我们在XML中使用占位符,我们需要做更多的工作。布局框架和Fragment如果我们在XML布局文件中定义了Fragment,我们就不能自由动态地修改Fragment。还有其他一些方法可以让我们操作起来更加灵活:使用的时候,我们需要在XML文件中定义:200dp"/>Activity内部还有一些工作要做,因为我们要手动初始化Fragment,然后将其“插入”到FrameLayout中。publicclassMainActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Fragment2f2=newFragment2();FragmentTransactionft=getFragmentManager().beginTransaction();ft.replace(f2);ft.commit();}关于FragmentTransaction等内容的讨论留到下一篇,本文就到这里。【移动开发视频课程推荐】iOS培训Objective-C基础视频课程(40集)Cocos2d-x从零开始【5天掌握跨平台游戏开发工具】(12集)ObjectiveC编程基础(24集)Android技术轻松入门教程(12集)微信开放平台——Android应用接入(4集)Cocos2d-x跨平台游戏开发基础(29集)iOS开发视频教程——iOS网络编程【进阶】(39集)移动端应用用户体验设计进阶教程(60集)从零开始学习iOS开发-UI多视图(30集)iOS开发视频教程【基础介绍】
