Fragment是Android honeycomb 3.0新增的概念,Fragment名为碎片不过却和Activity十分相似,下面介绍下Android Fragment的作用和用法。Fragment用来描述一些行为或一部分用户界面在一个Activity中,你可以合并多个fragment在一个单独的activity中建立多个UI面板,同时重用fragment在多个activity中.你可以认为fragment作为一个activity中的一节模块 ,fragment有自己的生命周期,接收自己的输入事件,你可以添加或移除从运行中的activity.

一个fragment必须总是嵌入在一个activity中,同时fragment的生命周期受activity而影响,举个例子吧,当activity 暂停,那么所有在这个activity的fragments将被destroy释放。然而当一个activity在运行比如resume时,你可以单独的操控每个fragment,比如添加或删除。

Fragment作为Android 3.0的新特性,有些功能还是比较强大的,比如 合并两个Activity,如图

 

我们可以看到两个Activity通过两个Fragment合并到一个Activity的布局方式,对于平板等大屏幕设备来说有着不错的展示面板。不过因为Fragment和Activity的生命周期都比较复杂,我们分别对比下:

创建一个fragment你必须创建一个Fragment的子类或存在的子类,比如类似下面的代码

public static class AndroidFragment extends
Fragment {
    @Override
    public View
onCreateView(LayoutInflater inflater, ViewGroup
container,
                             Bundle savedInstanceState) {

return
inflater.inflate(R.layout.android_fragment, container,
false);
    }
}

Fragment类的一些代码看起来有些像Activity为了让大家了解清楚,Android开发网给大家整理下Fragment的生命周期如上图所示,部分类似Activity的,我们详细解释

onCreate() 当fragment创建时被调用,你应该初始化一些实用的组件,比如在fragment暂停或停止时需要恢复的

onCreateView() 当系统调用fragment在首次绘制用户界面时,如果画一个UI在你的fragment你必须返回一个View当然了你可以返回null代表这个fragment没有UI.

那么如何添加一个Fragment到Activity中呢? Activity的布局可以这样写

<?xml version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
   
<fragment
android:name="com.android.cwj.ArticleListFragment"
android:id="@+id/list"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
   
<fragment
android:name="com.android.cwj.ArticleReaderFragment"
android:id="@+id/viewer"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent" />
</LinearLayout>

最后提醒大家Fragment存在于Activity的ViewGroup中,按照继承关系大家就可以了解他的结构。

最新文章

  1. Atitit.&#160;Atiposter&#160;发帖机&#160;新特性 poster new feature &#160;&#160;v7 q39
  2. 开发板tftp下载文件
  3. Nginx 多站点配置
  4. Codeforces VK Cup 2012 Round 3 A. Variable, or There and Back Again(dfs)
  5. ApkDec android反编译工具
  6. XML文件的读取、序列化和反序列化操作
  7. mysql 服务意外停止1067错误解决办法小结
  8. (转)Repeater在无数据记录时显示暂无数据
  9. Oracle 唯一主键引发的行锁
  10. js中的“闭包”
  11. UITextField成为第一响应者
  12. 使用Bitbucket Pipeline进行.Net Core项目的自动构建、测试和部署
  13. QtCreator 断点不起作用
  14. Inno Setup打包带有MSI文件的程序
  15. Django实战(一)-----用户登录与注册系统1(环境搭建)
  16. SQL Server如何查看当前数据库连接的SPID
  17. CM记录-HDFS用户组映射
  18. hdu 1700 (圆的内接三角形 要周长最大)
  19. [转]PostgreSQL源码结构
  20. iOS UI-AlertView(警示框)和ActionSheet(选择框、操作表单)

热门文章

  1. Jquery hover 事件
  2. quartz 使用配置文件配置线程数
  3. Oracle Cannot Update TOP N Issue, 请专家解答
  4. ECS服务里或者阿里云服务器的二级域名设置方法
  5. 如何从Spring官网下载Spring的jar包
  6. OC语言自定义打印
  7. servlet-mysql实现简单用户登录注册
  8. CPU制造全过程(图文全解)
  9. 【SSO单点系列】(4):CAS4.0 SERVER登录后用户信息的返回
  10. [Swift]八大排序算法(六):希尔排序