你的位置:首页 > 软件开发 > 操作系统 > 关于Fragment你所需知道的一切!

关于Fragment你所需知道的一切!

发布时间:2016-06-15 10:00:29
转载自刘明渊 的博客地址:http://blog.csdn.net/vanpersie_9987Fragment 是 Android API 中的一个类,它代表Activity中的一部分界面;您可以在一个 Activity 界面中使用多个 Fragment,或者在多个 Act ...

关于Fragment你所需知道的一切!

转载自刘明渊 的博客地址:http://blog.csdn.net/vanpersie_9987

Fragment 是 Android API 中的一个类,它代表Activity中的一部分界面;您可以在一个 Activity 界面中使用多个 Fragment,或者在多个 Activity 中重用某一个 Fragment。

 

本文将介绍 Fragment 的 定义、创建、添加、移除、生命周期 等,如需访问官方原文,您可以点击这个链接(大多数情况下你得借助某些工具才可以访问):

https://developer.android.com/guide/components/fragments.html

 

Fragments

 

可以把 Fragment 想象成 Activity 中的一个模块,它有自己的生命周期、可以接收输入事件、可以在 Activity 运行时将 Fragment 动态添加和移除等。

 

Fragment 必须嵌入在 Activity 中才能生存,其生命周期也直接受宿主 Activity 的生命周期的影响。比如,若宿主 Activity 处于 pause 状态,它所管辖的 Fragment 也将进入 pause 状态。而当 Activity 处于 resume 状态的时候,您可以独立地控制每一个 Fragment,如添加或删除等。

 

当执行一个 Fragment 事务时,也可以将该 Fragment 加入到一个由宿主 Activity 管辖的后退栈中,并由 Activity 记录加入到后退栈的 Fragment 信息,按下后退键可以将 Fragment 从后退栈中一次弹出。

 

将 Fragment 添加至 Activity 的视图布局中有两种方式:一种是使用fragment标签加入,Fragment的父视图应是一个ViewGroup;另一种使用代码动态加入,并将一个ViewGroup作为Fragment的容器。

 

在某些情况下,fragment并不作为Activity视图展示的一部分,它可能只是用来作为非显示性的功能。

 

设计哲学

 

Fragment 是 Android 3.0 (API level 11) 新加入的API,主要的设置目的是为了使UI在不同的屏幕上表现得更加灵活。由于平板比手机屏幕大的多,因此平板上可以呈现更多的内容,而 Fragment 可以实现同一视图布局在不同大小的屏幕上显示不同的效果,将 Fragment 加入到 Activity 的 Layout 中,可以在运行时动态替换 Fragment 并将 Fragment 保存至 Activity 管辖的后退栈中。

 

比如说,一个新闻应用程序运行在平板上时,一个 Activity 视图界面可以装载两个 Fragment,其中左边的 Fragment 用于显示新闻的标题,而右边的 Fragment 用于显示相应的新闻内容;若将该应用运行在手机上,一个 Activity 视图界面无法装载两个 Fragment,故将两个 Fragment 分别装载到两个 Activity中,如下所示: 

 

关于Fragment你所需知道的一切!

 

创建

 

为了创建Fragment,需要继承一个 Fragment 类,并实现 Fragment 的生命周期回调方法,如 onCreate(), onStart(), onPause(), onStop() 等。事实上,若需要在一个应用中加入 Fragment,只需要将原来的 Activity 替换为 Fragment,并将 Activity 的生命周期回调方法简单地改为 Fragment 的生命周期回调方法即可。

 

一般来说,在 Fragment 中应至少重写这些生命周期方法:

 

  • onCreate()当创建 Fragment 实例时,系统回调的方法。在该方法中,需要对一些必要的组件进行初始化,以保证这个组件的实例在 Fragment 处于 pause或stop 状态时仍然存在。

     

  • onCreateView():当第一次在 Fragment 上绘制UI时,系统回调的方法。该方法返回一个 View 对象,该对象表示 Fragment 的根视图;若 Fragment 不需要展示视图,则该方法可以返回 null

     

  • onPause():当用户离开 Fragment 时回调的方法(并不意味着该 Fragment 被销毁)。在该方法中,可以对 Fragment 的数据信息做一些持久化的保存工作,因为用户可能不再返回这个 Fragment。

 

大多数情况下,需要重写上述三个方法,有时还需要重写其他生命周期方法,Fragment 的生命周期如下所示: 

 

关于Fragment你所需知道的一切!

 

为了方便起见,继承下面这些特殊的Fragment可以简化其初始化过程:

 

  • DialogFragment:可展示一个悬浮的对话框。使用该类创建的对话框可以很好地替换由 Activity 类中的方法创建的对话框,因为您可以像管理其他 Fragment 一样管理 DialogFragment——它们都被压入由宿主 Activity 管理的 Fragment 栈中,这可以很方便的找回已被压入栈中的 Fragment。

     

  • ListFragment:可以展示一个内置的 AdapterView,该 AdapterView 由一个 Adapter 管理着,如 SimpleCursorAdapterListFragment 类似于 ListActivity,它提供了大量的用于管理 ListView 的方法,比如回调方法 onListItemClick(),它用于处理点击项事件。

     

  • PreferenceFragment:可以展示层级嵌套的 Preference 对象列表。PreferenceFragment 类似于 PreferenceActivity,该类一般用于为应用程序编写设置页面。

 

绑定UI布局

 

必须重写 onCreateView() 方法,为 Fragment 绑定布局,该方法返回的 View 就是 Fragment 的根视图。

 

!请注意:若继承的 Fragment 是 ListFragment,onCreateView() 方法已默认返回了 ListView 对象,故无需再重写该方法。

 

下面是一个将 example_fragment. 布局文件绑定至 ExampleFragment 的示例:

 

关于Fragment你所需知道的一切!

 

方法回传的第二个参数 ViewGroup 来自宿主 Activity 容器布局,Fragment 的布局将其作为根视图插入至该视图中(is the parent ViewGroup (from the activity’s layout) in which your fragment layout will be inserted)。第三个参数 Bundle 用于回传之前占据该位置的 Fragment 实例所保存的 Bundle 信息,当该 Fragment 的新实例处于 resume 状态时,该参数被回传(provides data about the previous instance of the fragment, if the fragment is being resumed )。

 

inflate() 方法需要三个参数:

 

  • 参数1(int):需要绑定的Layout的资源ID;

     

  • 参数2(ViewGroup):绑定的Layout布局的父视图;

     

  • 参数3(boolean):是否需要将参数1的Layout资源依附于(should be attached to)参数2的ViewGroup上,上例中为false,表示不依附。(系统已经默认将Layout插入至ViewGroup中,若为true,将添加一层冗余的视图(redundant view group in the final layout))。

 

添加至Activity

 

一般地,Fragment 绑定的UI作为宿主 Activity 的一部分,嵌套在整个 Activity 层级视图中。将 Fragment 加入 Activity ,有如下两种方式:

 

方式一:使用fragment标签加入

 

关于Fragment你所需知道的一切!

 

其中标签 <fragment> 中的属性 android:name 指定 Fragment 的全限定类名(specifies the Fragment class to instantiate in the layout)。

 

当系统加载 Activity 的 layout 视图时,同时加载 Fragment 绑定的视图,并回调相应 Fragment 的 onCreateView() 方法,系统将 <fragment> 标签替换为 onCreateView() 方法返回的 View

 

!请注意:必须为fragment设定唯一的身份标识,以便当宿主Activity为restart状态时可以恢复(restore)fragment。

 

有三种为fragment设置唯一标识的方式:

 

  • 通过 android:id 属性为 fragment 指定唯一ID;

     

  • 通过 android:tag 属性为 fragment 指定唯一字符串标识;

     

  • 若上述两种凡是均未指定,则该 fragment 的标识为其父容器控件的ID(the system uses the ID of the Container view)。

 

方式二:编写代码将 fragment 动态添加至现存的 ViewGroup(Or, programmatically add the fragment to an existing ViewGroup)

 

当 Activity 处于 running 状态时,可以将 fragment 添加至 Activity 布局 layout 中,您只需要指定 fragment 的父容器就行了。

 

为了在 Activity 中对 fragment 做添加、删除、替换等操作(add, remove, or replace a fragment),需调用 FragmentTransaction

 

FragmentManager fragmentManager = getFragmentManager();

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:关于Fragment你所需知道的一切!

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录