什么是碎片?

  碎片(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. Oracle数据库常用SQL函数

    1.SQL函数的概念: 函数一般是在数据上执行的,它给数据的转换和处理提供了方便.只是将取出的数据进行处理,不会改变数据库中的值.(类似于java中的方法但函数只是将数据库中的数据取出(复制)到函数中 ...

  2. js 对象拷贝

    在JavaScript中,数据类型分为两大类:基本数据类型和复杂数据类型.基本数据类型包括Number.Boolean.String.Null.String),而复杂数据类型包括Object.Func ...

  3. window系统下如何查看so库的信息

    转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10458388.html  linux系统下能够直接用命令行查看so库的信息,但是window系统下咋办好 ...

  4. SQLServer之删除用户自定义数据库用户

    删除用户自定义数据库用户注意事项 不能从数据库中删除拥有安全对象的用户. 必须先删除或转移安全对象的所有权,才能删除拥有这些安全对象的数据库用户. 不能删除 guest 用户,但可在除 master ...

  5. 【English】20190429

    detect发现 [dɪˈtekt] charger充电器 [ˈtʃɑːrdʒər] unable to detect charger

  6. Python算法和数据结构:在二叉树中找到和为sum的所有路径

    玄魂工作室秘书 [玄魂工作室] 思路:先用递归创建一颗二叉树,作为输入:然后对这课二查树进行递归遍历,递归中每遍历一个节点,下次递归的和为sum-data;并用一个数组记录遍历过的路径,当存在sum时 ...

  7. 八问WebSocket协议:为你快速解答WebSocket热门疑问

    一.引言 WebSocket是一种比较新的协议,它是伴随着html5规范而生的,虽然还比较年轻,但大多主流浏览器都已经支持.它使用方面.应用广泛,已经渗透到前后端开发的各种场景中. 对http一问一答 ...

  8. 了解一下RabbitMQ

    RabbitMQ概述 RabbitMQ是遵从AMQP协议的 通信协议都设计到报文交互,换句话说RabbitMQ就是AMQP协议的Erlang的实现. AMQP说到底还是一个通信协议从low-level ...

  9. dubbo源码研究(一)

    1. dubbo源码研究(一) 1.1. dubbo启动加载过程 我们知道,现在流行注解方式,用spring管理服务,dubbo最常用的就是@Reference和@Service了,那么我首先找到这两 ...

  10. pandas操作

    python中使用了pandas的一些操作,特此记录下来: 生成DataFrame import pandas as pd data = pd.DataFrame({ 'v_id': ["v ...