博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android Fragments详解一:概述
阅读量:4669 次
发布时间:2019-06-09

本文共 1653 字,大约阅读时间需要 5 分钟。

Fragment是activity的界面中的一部分或一种行为。你可以把多个Fragment们组合到一个activity中来创建一个多面界面并且你可以在多个activity中重用一个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在加入activity的后退棧中时如何保持自己的状态,如何与activity以及其它fragment们共享事件,如何显示在activity的动作栏,等等。

设计哲学

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

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

 

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

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

转载于:https://www.cnblogs.com/nkmnkm/archive/2012/01/07/2315740.html

你可能感兴趣的文章
python requests提示警告InsecureRequestWarning
查看>>
三步解决 vue 按需加载
查看>>
准备在CSDN知识库建立一个Ext JS的知识库
查看>>
安卓高级 Android图片缓存之初识Glide
查看>>
oc基础-set和get方法的使用
查看>>
Get方法中不要返回可变对象的引用 【Java2核心技术第一卷 读书笔记】
查看>>
css3学习笔记
查看>>
在vue中使用animate.css
查看>>
jquery datatables
查看>>
php函数封装
查看>>
Cloudera是个什么东西
查看>>
Linux系统下安装 apache2.4的过程
查看>>
git cherry-pick 的使用
查看>>
UIScrollView的属性总结
查看>>
iOS提交审核:您的 App 正在使用广告标识符 (IDFA)
查看>>
AJAX原理及XMLHttpRequest对象分析
查看>>
在汇报工作时,我需要做些什么
查看>>
lxc 一些有用的资源
查看>>
c# 内部类使用接口IComparer实现排序
查看>>
spring boot 项目搭建时,各个依赖的作用
查看>>