zoukankan      html  css  js  c++  java
  • Fragment

    Fragment是Android为了应用适配不同设备的大屏幕、支持更加动态和灵活的UI设计所提供的一个组件。


    说到Fragment,就会联想到Activity,因为Fragment对象在应用中一般是不能独立存在的,它必须嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影响。

    例如:当activity暂停时,他拥有的所有的Fragment都暂停了,当activity销毁时,他拥有的所有Fragment都被销毁。

    然而,当activity运行时(在onResume()之后,onPause()之前),可以单独地操作每个Fragment,比如添加或删除它们。

    当中执行上述针对Fragment的事务时,可以将事务添加到一个栈中,这个栈被activity管理,栈中的每一条都是一个Fragment的一次事务。

    有了这个栈,就可以反向执行Fragment的事务,这样就可以在Fragment级支持“返回”键(向后导航)。


    当向activity中添加一个Fragment时,它须置于ViewGroup控件中,并且需定义Fragment自己的界面。

    可以在layout.xml布局文件中声明Fragment,元素为:<fragment>;也可以在代码中创建Fragment,然后把它加入到ViewGroup 控件中。

    然而,Fragment不一定非要放在activity的界面中,它可以隐藏在后台为activity工作。


    Android在3.0之后引入了Fragment的概念,主要目的是用在大屏幕设备-例如平板电脑上,以便支持更加动态和灵活的UI设计。

    平板电脑的屏幕尺寸比手机大得多,因此有更多的空间来存放更多的UI组件,并且这些组件之间会产生更多的交互。

    Fragment允许 这样的一种设计,而不需要你亲自来管理viewhierarchy的复杂变化。

    通过将Activity的布局分散到Fragment中,你可以在运行时修改 Activity的外观,并在由Activity管理的Back stack中保存那些变化。


    例如,一个新闻应用可以在屏幕的左侧使用一个Fragment来展示一个文章的列表,

    然后在屏幕右侧使用另一个Fragment来展示 一篇文章,两个Fragment并排显示在相同的一个Activity中,

    并且每一个Fragment拥有它自己的一套生命周期回调方法,并且处理它 们自己的用户输入事件。

    因此,取代使用一个activity来选择一篇文章而另一个activity来阅读文章的方式,用户可以在同一个activity 中选择一篇文章并且阅读,如图所示:

    Fragment在你的应用中应当是一个模块化和可重用的组件。

    即,因为fragment定义了它自己的布局,以及通过自己的生命周期回 调方法来定义自己的行为,你可以将Fragment包含到多个Activity中

    这点特别重要,因为允许你将你的用户体验适配到不同的屏幕尺寸 。

    举个例子,你可能仅当在屏幕尺寸足够大时,在一个activity中包含多个fragment并且当不属于这种情况时,会启动另一个单独的使用不 同fragment的activity。


    继续之前那个新闻的例子-当运行在一个特别大的屏幕时(例如平板电脑),应用可以在activity A中嵌入2个fragment。

    然而,在一个 正常尺寸的屏幕(例如手机)上,没有足够的空间同事供2个fragment使用。

    因此,activity A会仅含文章列表的fragment,而当用户选择 一篇文章时,它会启动activity B,它包含阅读文章的fragment B。

    因此,应用可以同时支持上图中的2种模式。


    Fragment生命周期


    Fragment虽然必须嵌入到Activity才能使用,但它有自己的一套生命周期回调方法,其生命周期与Activity的生命周期类似

    同时它受其所属的Activity(宿主Activity)生命周期的直接影响

    例如:当activity暂停时,他拥有的所有的Fragment都暂停了,当activity销毁时,他拥有的所有Fragment都被销毁。

    下面是Fragment生命周期图(图1.1)以及与宿主Activity生命周期之间的关系图示(图1.2):

    图1.1      

     图1.2

    下面将一一介绍Fragment各个回调方法的特性和使用:
         
     onAttach():     当Fragment被绑定到Activity事调用(Activity会被传入);


          onCreate():     当Fragment被创建时,系统调用该方法。在实现代码中,应当初始化想要在Fragment保持的必要组件,当Fragment暂停或停止后可以被恢复;(此方法在实现一个Fragment时必须)


          onCreateView():     在Fragment第一次绘制界面时系统会调用此方法,为绘制Fragment的UI,方法需返回一个View对象,该对象是Fragment布局的根View。若Fragment不提供UI,则返回null;(此方法在实现一个Fragment时必须)


          onActivityCreated():     当Activity被创建回调onCreate()方法后,系统调用此方法;


          onStart():     当Fragment呈现给用户变得可见之前调用 ( 在宿主Activity回调完onStart()方法后调用 ) ,此时用户与界面处于可见不可交互的状态。


          onResume():     当用户和界面可以互相交互时调用(在宿主Activity回调完onResume()方法后调用)。


          onPause():    当需要开启一个新的Activity或替换一个新的Fragment时,系统调用此方法(在宿主Activity回调完onPause()方法后调用)。此时用户将要离开与Fragment界面的交互,因此一般来讲应在此方法中保存一些需要持久化的变化。 (此方法在实现一个Fragment时必须)


          onStop():    当Fragment变得完全不可见时,系统调用该方法(在宿主Activity回调完onStop()方法后回调),出现此状态的原因可能是另一个Activity覆盖此宿主Activity或此Fragment被替换,此时Fragment面临被销毁。


          onDestoryView():    当和Fragment关联的View hierarchy被移除时,系统调用该方法。


          onDestory():    当Fragment被销毁时,系统调用该方法。

          onDetach():    当Fragment与宿主Activity解除关联时,系统调用该方法。

    文章来源

     

  • 相关阅读:
    Eclipse配置Maven详细教程
    Spring MVC 搭建web项目示例
    C# Action 和Func
    C# params 用法简介
    WPF绘图性能问题
    C# EventWaitHandle用法
    C#5.0 异步编程async/await用法
    通过Struts2Web应用框架深入理解MVC
    Java过滤器—Filter用法简介
    WPF内嵌CEF控件,与JS交互
  • 原文地址:https://www.cnblogs.com/ltw222/p/14903644.html
Copyright © 2011-2022 走看看