Android Fragment概述及用法

作者:lqh 时间:2022-08-23 15:54:22 

       Fragment一般是宿主Activity UI的一部分或一种行为,作为Activity的整个View Hierarchy的一部分嵌入。我们可以将多个Fragment组合到一个Activity中创建一个多面界面,也可以在多个Activity中重用一个Fragment。

       Fragment概述

       我们可以把Fragment视为模块化的一段Activity,它具有自己的生命周期,接收它自己的事件,并可以在activity运行时被添加或删除。

       Fragment不能独立存在,它必须嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影响。例如:当activity暂停时,它拥有的所有的Fragment们都暂停了,当activity销毁时,它拥有的所有Fragment们都被销毁。然而,当activity运行时(在onResume()之后,onPause()之前),你可以单独地操作每个Fragment,比如添加或删除它们。当你在执行上述针对Fragment的事务时,你可以将事务添加到一个棧中,这个栈被activity管理,栈中的每一条都是一个Fragment的一次事务。有了这个栈,就可以反向执行Fragment的事务,这样就可以在Fragment级支持“返回”键(向后导航)。

       当向activity中添加一个Fragment时,它须置于ViewGroup控件中,并且需定义Fragment自己的界面。你可以在layoutxml文件中声明Fragment,元素为:<fragment>;也可以在代码中创建Fragment,然后把它加入到ViewGroup控件中。然而,Fragment不一定非要放在activity的界面中,它可以隐藏在后台为actvitiy工作。

       如何使用Fragment

       接下来讲如何使用fragment,包括fragment在加入activity的后退棧中时如何保持自己的状态,如何与activity以及其它fragment们共享事件,如何显示在activity的动作栏,等等。

       Android从3.0开始引入fragment,主要是为了支持更动态更灵活的界面设计,比如在平板上的应用。平板机上拥有比手机更大的屏幕空间来组合和交互界面组件们。Fragment使你在做那样的设计时,不需应付view树中复杂的变化。通过把activity的layout分成fragment,你可以在activity运行时改变它的样子,并且可以在activity的后退栈中保存这些改变。

       例如:写一个读新闻的程序,可以用一个fragment显示标题列表,另一个fragment显示选中标题的内容,这两个fragment都在一个activity上,并排显示。那么这两个fragment都有自己的生命周期并响应自己感兴趣的事件。于是,不需再像手机上那样用一个activity显示标题列表,用另一个activity显示新闻内容;现在可以把两者放在一个activity上同时显示出来。如下图:

Android Fragment概述及用法

       Fragment必须被写成可重用的模块。因为fragment有自己的layout,自己进行事件响应,拥有自己的生命周期和行为,所以你可以在多个activity中包含同一个Fragment的不同实例。这对于让你的界面在不同的屏幕尺寸下都能给用户完美的体验尤其重要。比如你可以在程序运行于大屏幕中时启动包含很多fragment的activity,而在运行于小屏幕时启动一个包含少量fragment的activity。

       举个例子--还是刚才那个读新闻的程序-当你检测到程序运行于大屏幕时,启动activityA,你将标题列表和新闻内容这两个fragment都放在activityA中;当检测到程序运行于小屏幕时,还是启动activityA,但此时A中只有标题列表fragment,当选中一个标题时,activityA启动activityB,B中含有新闻内容fragment。

标签:Android,Fragment
0
投稿

猜你喜欢

  • Spring boot 连接多数据源过程详解

    2023-11-28 12:09:51
  • Android编程基础之简单Button事件响应综合提示控件Toast应用示例

    2023-06-30 16:27:34
  • MyBatis-Plus逻辑删除和字段自动填充的实现

    2023-01-08 03:45:54
  • 一篇文章带你了解Java 中序列化与反序列化

    2021-11-27 21:19:27
  • Java集合删除元素ArrayList实例详解

    2022-11-09 19:12:39
  • 详解MyBatis多数据源配置(读写分离)

    2023-11-21 20:35:44
  • C语言实现贪吃蛇小游戏开发

    2022-08-20 00:03:07
  • SpringBoot配置外部静态资源映射问题

    2021-07-22 00:27:50
  • SpringBoot对Controller进行单元测试的实现代码 附乱码解决方案

    2021-11-26 17:57:22
  • C#多线程之Thread中Thread.IsAlive属性用法分析

    2023-07-11 11:44:12
  • Android中实现多行、水平滚动的分页的Gridview实例源码

    2022-01-14 08:23:58
  • Android基于API的Tabs3实现仿优酷tabhost效果实例

    2021-07-31 18:51:02
  • Textvie实现左边图片和换行文字左对齐的方法

    2022-10-30 23:15:16
  • slf4j jcl jul log4j1 log4j2 logback各组件系统日志切换

    2023-08-08 13:00:41
  • SpringBean依赖和三级缓存的案例讲解

    2023-06-25 09:33:22
  • Springboot详解实现食品仓库管理系统流程

    2023-11-10 18:33:15
  • SpringBoot中属性赋值操作的实现

    2022-05-04 18:10:30
  • java8 stream 如何打印数据元素

    2022-08-20 18:40:02
  • IntelliJ IDEA最佳配置(推荐)

    2023-11-17 01:55:44
  • Java适配器模式_动力节点Java学院整理

    2021-09-06 10:50:53
  • asp之家 软件编程 m.aspxhome.com