Android API Guides学习4——Fragments

来源:互联网 发布:淘宝怎么知道卖家电话 编辑:程序博客网 时间:2024/06/07 09:43

http://developer.android.com/guide/components/fragments.html

  fragment(碎片)表示activity用户界面上的一种行为或部分。你可以在一个简单的activity使用很多fragment来构建多窗格的UI界面,并且可以再多个activity复用一个fragment。你可以把fragment看成activity的一个模块化部分,但有自己的生命周期、接收自己的输入事件、可以在activity运行时添加删除。
  fragment总是被嵌入到一个activity中,它的生命周期直接的被它的父activity所影响。如当一个activity暂停后,它里面的所有fragment都暂停。当activity运行时,我们可以直接的操作每一个fragment,如添加或删除。当你执行这样的fragment事务时,你可以把它加入到activity管理的回退栈中——每个activity的回退栈入口会被记录当fragment事务发生时。回退栈允许用户通过回退键返回上一个fragment。
  当你把fragment添加到你activity布局中它存在于一个包含在activity view层级中的一个ViewGroup中,并且包含自己的view布局。你可以直接在布局文件中通过<fragment>;元素声明一个fragment来将其添加到你的activity中,或在你的代码中直接把它添加到一个已存在的viewGraop中。然而,fragment可以不需要成为activity布局的一部分,所以你可以使用一个没有UI的fragment来处理一些不需要被看见的工作。
  下面这些描述了怎么在应用程序中使用fragment,包括fragment怎么在压入回退栈时保持他们的状态,怎么与其他fragment和activity分享事件,创建activity的actionBar等。

设计哲学

  Android在3.0版本(API level 11)引入了fragment,主要是为了在大屏幕(如平板)上支持更加动态灵活的UI设计,因为有更多空间来构建交互UI组件。Fragment可以不需要对view层次进行复杂的改变来实现这样的设计。通过把布局拆分成多个fragment,你可以在activity运行时修改其外观并保存这些改变到activity的回退栈。
   举个例子,一个app可以使用一个fragment在屏幕左边展示文章列表,另一个fragment在右边显示一片文章的具体内容。每个fragment有自己的生命周期回调方法和用户输入事件,但不是使用一个activity选择一个文章在跳到另一个activity阅读它的内容,用户可以选择一片文章并在一个activity中阅读它,如下面的那张插图。
   你应该把每个fragment设计成一个模块化的可复用的activity组件。也就是说,因为每个fragment定义他自己的布局,自己的行为,自己的生命周期回调,你可以在多个activity引用同一个fragment,所以你的设计应该防止一个fragment直接操控另一个fragment(?)。这点特别重要,因为一个模块化的fragment允许你改变你的fragment组合来适应不同大小的屏幕。当你设计同时支持手机和平板的app时,对于可用的屏幕空间,你可以在不同的布局配置中复用fragment来优化你的用户体验。如你在手机上要把fragment分为一个当窗格的UI因为一个屏幕的大小不能填充两个fragment。
fragments

创建一个Fragment

  你要继承Fragment(或它已存在的子类)来创建一个fragment,Fragment的代码看起来像Activity。他包含许多如activity一样的回调方法,如onCreate(), onStart(), onPause(), 和onStop()。事实上,如果你将一个完成的app转化为使用Fragment,你可能只需要简单的将对应回调方法中的代码转移到对应的fragment方法中去。
  通常,你应该至少实现下列生命周期方法:

  • onCreate()
    系统在创建fragment时调用这个方法,在你的实现中,初始化你想要在fragment暂停、停止、恢复时保持的必要组件。
  • onCreateView()
    系统调用这个方法当需要绘制用户界面的时候,你必须在这个方法中返回fragment布局的根元素对应的view。如果无UI放回null。
  • onPause()
    系统调用这个方法当离开当前fragment时(并不是代表被销毁),在这里,你需要提交所有要保存在当前用户会话的修改(因为用户可能不再回来)。

       大多数app需要为每个fragment实现这三个方法,但是其他的回调方法也应该用来处理fragment生命周期的不同阶段。
这里写图片描述

  下面列出了一些你可能会用到的一些Fragment子类:

  • DialogFragment
    显示一个浮动窗口,使用这个类来创建也是个很好的方法来实现Dialog,因为你可以将这个fragment包含在activity管理的回退栈中,允许返回到丢失的fragment中。
  • ListFragment
    通过适配器(如SimpleCursorAdapter)来显示一列的项目,就像ListActivity一样。它提供一些方法来管理listView,如onListItemClick()来管理项目点击事件。
  • PreferenceFragment
    用过列表显示一系列的首选项,就像PreferenceActivity一样,在创建“Setting”activity时很有用。

添加用户界面

  fragment经常使用activity的一部分用户界面,并把它的布局填充进去。为了提供一个布局,你必须实现onCreateView()回调方法,你必须返回fragment布局的根元素的view。

如果fragment继承了ListFragment,默认的实现时返回ListView,所以你不一定要实现onCreateView()方法。

  你可以通过填充定义好的XML文件来返回layout,onCreateView() 方法提供 LayoutInflater 对象。用法如下:

public static class ExampleFragment extends Fragment {    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        // 填充layout        return inflater.inflate(R.layout.example_fragment, container, false);    }}

  container参数是fragment布局要插入的父ViewGroup(来自Activity布局),savedInstanceState参数时一个Bundle对象,提供之前fragment保存的数据。
  inflate()方法需要三个参数:
  要填充布局的资源文件ID。
  要填充布局的父ViewGroup
  一个布尔值来表示这个布局在填充时是否附属于ViewGroup(第二个参数),在这里,false的原因是因为系统已经将填充布局插入到container中了,如果为true会创建多余的viewGroup

添加Fragment到Activity

管理Fragment

执行Fragment事务

与Activity传递信息

创建Activity的事件回调

向Action Bar添加项

处理Fragment生命周期

与Activity生命周期相协调

例子

0 0
原创粉丝点击