什么是碎片?

  碎片(Fragment)是一种可以嵌入在活动当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用的非常广泛。可以把Fragment当成Activity一个界面的一部分,那么 Activity的界面就由完全不同的Fragment组成,且Fragment有自己的声明周期和接收、处理用户的事件,支持动态的添加、替换、移除某个Fragment。

为什么使用碎片?

  我们知道,Android上的界面展示都是通过Activity实现的,但Activity也有它的局限性,同样的界面在手机上显示可能很好看,在平板上就未必了,因为平板的屏幕非常大,手机的界面放在平板上可能会有过分被拉长、控件间距过大等情况。这个时候更好的体验效果是在Activity中嵌入"小Activity",然后每个"小Activity"又可以拥有自己的布局。这就用到了Fragment。

比如我们想做一个新闻应用,其中一个界面使用ListView展示了一组新闻的标题,当点击了其中一个标题,就打开另一个界面显示新闻的详细内容。如果是在手机竖屏时,我们可以将新闻标题列表放在一个Activity中,将新闻的详细内容放在另一个Activity中,如下图所示。

但是在平板设计中,横屏时的显示就是下面这种情况,列表会被拉长

因此,更好的设计方案是将新闻标题列表界面和新闻详细内容界面分别放在两个Fragment中,然后在同一个Activity中引入这两个Fragment,如下图所示。

Fragment的特点:

(1)Fragment依赖于Activity,不能独立存在。

(2)一个Activity里可以有多个Fragment。

(3)一个Fragment可以被多个Activity重用。

(4)Fragment有自己的生命周期,并能接收输入事件。

(5)可以在Activity运行时动态地添加或删除Fragment。

Fragment优点:

(1)模块化(Modularity):不必把所有代码全部写在Activity中,而是把代码写在各自的Fragment中。

(2)可重用(Reusability):多个Activity可以重用一个Fragment。

(3)可适配(Adaptability):根据硬件的屏幕尺寸、屏幕方向,能够方便地实现不同的布局,获得更好的用户体验。

Fragment生命周期:

Fragment 的生命周期如图所示,关于每个方法的解释如下:

OnAttach():Fragment和Activity相关联时调用。可以通过该方法获取Activity引用,还可以通过getArguments()获取参数。

OnCreate():Fragment被创建时调用。

OnCreateView():创建Fragment的布局。

OnActivityCreated():当Activity完成onCreate()时调用。

OnStart():当Fragment可见时调用。

OnResume():当Fragment可见且可交互时调用。

OnPause():当Fragment不可交互但可见时调用。

OnStop():当Fragment不可见时调用。

OnDestroyView():当Fragment的UI从视图结构中移除时调用。

OnDestroy():销毁Fragment时调用。

OnDetach():当Fragment和Activity解除关联时调用。

上面的方法中,只有OnCreateView()在重写时不用写super方法,其他都需要。

Fragment使用方法:

在Activity中添加Fragment的方式有两种:

(1)静态添加:通过xml的方式添加,即在布局页面中直接添加,缺点是一旦添加就不能在运行时删除。

(2)动态添加:在Activity中添加,运行时添加,这种方式比较灵活,建议使用这种方式。

注:基础实战参考博文:Android Fragment完全解析Android Fragment的用法,手把手基础的Fragment用法,上手容易。

如果想深入了解Fragment的背后运行机制,可以参考这篇博文《Android Fragment 非常详细的一篇》,内部运行机制讲的很详细。

(孤山不见蓬莱客,点点星云落九洲)

Android Fragment碎片的更多相关文章

  1. Android Fragment(碎片)的使用

    简介 在Android中Fragment为一种可以嵌入活动中的UI片段.能让程序更加合理地利用大屏幕的空间. 使用方法 1.我们首先新建的一个onefragment.xml文件. <?xml v ...

  2. Android Fragment应用实战,使用碎片向ActivityGroup说再见

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/13171191 现在Fragment的应用真的是越来越广泛了,之前Android在3 ...

  3. Android Fragment完全解析,关于碎片你所需知道的一切

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8881711 我们都知道,Android上的界面展示都是通过Activity实现的, ...

  4. Android Fragment完全解析,关于碎片你所需知道的一切 (转)。

    我们都知道,Android上的界面展示都是通过Activity实现的,Activity实在是太常用了,我相信大家都已经非常熟悉了,这里就不再赘述. 但是Activity也有它的局限性,同样的界面在手机 ...

  5. Android开发:碎片Fragment完全解析fragment_main.xml/activity_main.xml(转)

    注明:这个转的,见谅未能标明原始出处 我们都知道,Android上的界面展示都是通过Activity实现的,Activity实在是太常用了,我相信大家都已经非常熟悉了,这里就不再赘述. 但是Activ ...

  6. Android开发:碎片Fragment完全解析fragment_main.xml/activity_main.xml

    Android开发:碎片Fragment完全解析   为了让界面可以在平板上更好地展示,Android在3.0版本引入了Fragment(碎片)功能,它非常类似于Activity,可以像 Activi ...

  7. (转) Android Fragment完全解析,关于碎片你所需知道的一切

    我们都知道,Android上的界面展示都是通过Activity实现的,Activity实在是太常用了,我相信大家都已经非常熟悉了,这里就不再赘述. 但是Activity也有它的局限性,同样的界面在手机 ...

  8. Android Fragment应用实战

    现在Fragment的应用真的是越来越广泛了,之前Android在3.0版本加入Fragment的时候,主要是为了解决Android Pad屏幕比较大,空间不能充分利用的问题,但现在即使只是在手机上, ...

  9. Android Fragment

    1.Fragment必须是依存与Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期. 2.Fragment 生命周期: 首页 最新文章 在线课程 业界 开发 ...

随机推荐

  1. kube-proxy的功能

    Kube-proxy的功能 我们知道POD的IP是动态分配的而且经常会变,所以为了可以通过一个不太容易变化的IP访问POD就会使用一个叫做service的东西,通过标签选择器和POD进行关联. Ser ...

  2. bash语法

    国际惯例打印hello world   echo "hello world"   该程序运行结果: hello world 1.变量:   a=;b="hello wor ...

  3. .Net 事件总线之Autofac解耦

    事件总线是通过一个中间服务,剥离了常规事件的发布与订阅(消费)强依赖关系的一种技术实现.事件总线的基础知识可参考圣杰的博客[事件总线知多少] 本片博客不再详细概述事件总线基础知识,核心点放置使用Aut ...

  4. C# 打印PDF文档的10种方法

    操作PDF文档时,打印是常见的需求之一.针对不同的打印需求,可分多种情况来进行,如设置静默打印.指定打印页码范围和打印纸张大小.双面打印.黑白打印等等.经过测试,下面将对常见的几种PDF打印需求做一些 ...

  5. 如何快速掌握DDT数据驱动测试?

    1.前言 (网盗概念^-^)相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离, 这样的测试脚本设计模式称为数据驱动.(网盗结束)当我们测试某个网站的登录功能时,我们往往会使用不同的用 ...

  6. Error:"Java patch PatchPasswordEncryption_J10001 is being applied by some other process" when starting Ranger Admin

    SupportKB Problem Description: When starting Ranger admin, it fails to start up with the following e ...

  7. Javascript高级编程学习笔记(98)—— WebGL(4) WebGL上下文(2)

    错误 Javascript与WebGL之间的一个最大区别在于,WebGL的操作一般不会抛出错误 如果希望获取WebGL的错误信息,那么就需要手动调用  gl.getError() 方法 该方法会返回以 ...

  8. web服务器,验证码,Xftp使用方法

    IIS操作步骤 直接装的wamp 腾讯云主机控制台 安全组里可以配置要开放的端口 关闭防火墙 (C:\wamp\bin\apache\Apache2.4.4) 打开httpd.conf文件 requi ...

  9. service相关

    本篇仍以问题为驱动 一.什么时Service? Service是Android程序中四大基础组件之一,它和Activity一样都是Context的子类,只不过它没有UI界面,是在后台运行的组件.Ser ...

  10. 《HelloGitHub》第 29 期

    公告 月刊现已支持 RSS 订阅 <HelloGitHub>第 29 期 兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. ...