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

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

From:

 

 

Fragmentactivity的界面中的一部分或一种行为。你可以把多个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的动作栏,等等。

设计哲学

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

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

 

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

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

   
本文转自老Zhan博客园博客,原文链接:http://www.cnblogs.com/mybkn/articles/2455134.html
,如需转载请自行联系原作者
你可能感兴趣的文章
深入理解nodejs Stream模块
查看>>
java版spring cloud+spring boot+redis多租户社交电子商务平台:服务消费(Feign)
查看>>
ios手机QQ无发改变title问题
查看>>
深入理解ES6 ---- 正则扩展
查看>>
activiti总结(一)流程图结构简介
查看>>
dom节点和vue中template浅谈
查看>>
第三方开源框架(一)
查看>>
JSONP跨域
查看>>
对js陀螺仪的认知理解
查看>>
react native scrollView定时器广告位
查看>>
如何在vue中使用ts开发
查看>>
学习vim其实很简单
查看>>
刘强东解读京东AI战略:无人仓无人配送都在布局
查看>>
redux源码分析
查看>>
吴恩达机器学习系列18:核函数
查看>>
Java内存区域和内存模型
查看>>
写python 报错 IndentationError:unindent does not match any outer indentation level
查看>>
iOS 黑魔法 runtime 消息转发 ---附Demo
查看>>
在MySQL中,不要使用“utf8”。使用“utf8mb4”
查看>>
了解 IT 认证价值
查看>>