什么是碎片?

  碎片(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. Web前端-Ajax基础技术(下)

    Web前端-Ajax基础技术(下) 你要明白ajax是什么,怎么使用? ajax,web程序是将信息放入公共的服务器,让所有网络用户可以通过浏览器进行访问. 浏览器发送请求,获取服务器的数据: 地址栏 ...

  2. Android中对已安装应用的管理实现

    获取.管理手机中已安装的所有应用信息 1.创建应用的实体类AppInfo,属性有应用的名称.包名.图标.第一次安装时间和版本名称 public class AppInfo { private Stri ...

  3. IIS网站部署后,程序常见错误记录

    1.网站部署步骤 开启IIS服务.打开IIS管理器.添加网站.修改程序池(4.0).部署完成. 2.常见问题记录(问题记录比较模糊,仅做参考) (1).对于web.config连接数据库的配置为win ...

  4. mysql关联表更改表多个字段值

    关联表更改某一个字段值:更改部分数据,外层where条件控制更改记录的数量 BEGIN; " ; "; ROLLBACK; -- COMMIT; 关联表更改某一个字段值:更改全部记 ...

  5. javascript面向对象理解的补充

    <html> <head> <title>js inherit demo</title> <meta http-equiv="pragm ...

  6. javascript中apply、call和bind的区别及方法详解

    文章目录   apply.call apply.call 区别 apply.call实例 数组之间追加 获取数组中的最大值和最小值 验证是否是数组(前提是toString()方法没有被重写过) 类(伪 ...

  7. [小技巧]C#中如何为枚举类型添加描述方法

    背景 在我们的日常开发中,我们会经常使用枚举类型.有时我们只需要显示枚举的值或者枚举值对应名称, 但是在某些场景下,我们可能需要将枚举值显示为不同的字符串. 例: 当前我们有如下枚举Level pub ...

  8. 禁用 Chrome 的黑色模式/Dark Mode

    macOS Mojave 中引入了系统层面的黑色模式,Chrome 73 在应用中支行了这一模式,即系统设置为黑色模式时,Chrome 会自动适应切换到 Dark Mode. Chrome 跟随系统设 ...

  9. 在github上搭建一个静态的个人网站

    说一下大概步骤 1.创建一个新仓库 仓库名必须是你的用户名+github.io后缀 例:用户名:tom 仓库名就要是:tom.github.io (这里具体步骤可以自己百度一下) 2.创建好仓库我们该 ...

  10. Java中实现多线程的四种方式

    Java多线程实现方式主要有四种:继承Thread类.实现Runnable接口.实现Callable接口通过FutureTask包装器来创建Thread线程.使用ExecutorService.Cal ...