欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android App开发中创建Fragment组件的教程

程序员文章站 2024-03-02 15:20:22
你可以认为fragment作为activity的一个模块部分,有它自己的生命周期,获取它自己的事件,并且你可以在activity运行的时候添加或者移除它(有点像你可以在不同...

你可以认为fragment作为activity的一个模块部分,有它自己的生命周期,获取它自己的事件,并且你可以在activity运行的时候添加或者移除它(有点像你可以在不同的activity中重用的一个”子activity“)。这节课程讲述如何使用support library继承fragment类,所以你的应用程序仍然是兼容运行的系统版本低于android1.6的设备。

注意:如果你决定你的应用要求的最低的api级别是11或者更高,你不需要使用support library,反而能使用frameword内的fragment和相关api。要注意,这节课程主要讲使用support library的api,它使用特殊的包名,并且有些时候和包含在平台中版本api的名称略有不同。

在你开始这节课程之前,你必须配置你的android项目使用support library。如果之前你没有使用过support library,遵照support library setup文档,配置你的项目使用v4 library。然而,你也能包含在你的activity中action bar

创建fragment
你可以把一个fragment想象成一个activity的模块区域,它有自己的生命周期,接收它自己的输入事件,并且你可以在activity运行时添加和删除它(这有点像一个子activity,你可以在不同的activity中重用它们)。本节课向你介绍如何使用支持类库来扩展fragment,以便让你的应用程序能够在像android1.6那样的较旧版本上的兼容性。

注意:如果因为一些原因,你决定你的应用程序需要的api级别在11以上,那么你就不需要使用支持类库,并且可以使用框架内置的fragment类和相关的api来代替。要注意的是本课的重点是使用支持类库中的api,它使用一个特殊的包签名,并且某些时候api的名称会比包含在平台内的版本有稍微的不同。

创建fragment类

要创建一个fragment,就要继承fragment类,然后重写关键的生命周期方法,把你的应用程序逻辑插入其中,这跟activity类类似。

创建fragment时的一个不同点是,你必须使用oncreateview()回调来定义布局。实际上,为了获得一个正在运行的fragment,这只是你所需要的唯一的回调方法。例如,下面是一个简单的指定了自己布局的fragment:

import android.os.bundle;

import android.support.v4.app.fragment;

import android.view.layoutinflater;

import android.view.viewgroup;

public class articlefragment extends fragment {

  @override

  public view oncreateview(layoutinflater inflater, viewgroup container,

    bundle savedinstancestate) {

    // inflate the layout for this fragment

    return inflater.inflate(r.layout.article_view, container, false);

  }

}

就像一个activity,fragment应该实现其他的生命周期回调方法,从而允许你管理它在activity中的状态(添加或删除),以及activity在它生命周期状态间转换时的状态。例如,当activity的onpause()方法被调用时,activity中的任何fragment也会接收到对onpause()方法的调用。

有关fragment的生命周期和有效的回调方法,请看fragments开发指南。

使用xml把一个fragment添加到一个activity中

fragment是可复用的、模块化的ui组件,每个fragment类的实例都必须跟一个父类是fragmentactivity的activity相关联。通过在你的activity布局xml文件内定义每个fragment可以完成这种关联。

注意:fragmentactivity是一个支持类库中提供的特殊的activity,它用于处理系统版本是api level 11以前的fragment。如果你使用的系统版本最低是api level 11或更高,那么就就可以使用常规的activity。

当屏幕被认为足够大时,下例布局文件就会把两个fragment添加到一个activity中(该文件被放在由large限定的目录名中)。

res/layout-large/news_articles.xml:

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"

  android:orientation="horizontal"

  android:layout_width="fill_parent"

  android:layout_height="fill_parent">

  <fragment android:name="com.example.android.fragments.headlinesfragment"

       android:id="@+id/headlines_fragment"

       android:layout_weight="1"

       android:layout_width="0dp"

       android:layout_height="match_parent" />

  <fragment android:name="com.example.android.fragments.articlefragment"

       android:id="@+id/article_fragment"

       android:layout_weight="2"

       android:layout_width="0dp"

       android:layout_height="match_parent" />

</linearlayout>

提示:关于给不同屏幕尺寸创建布局的信息,请看支持不同的屏幕尺寸。

以下是使用这个布局的activity:

import android.os.bundle;

import android.support.v4.app.fragmentactivity;

public class mainactivity extends fragmentactivity {

  @override

  public void oncreate(bundle savedinstancestate) {

    super.oncreate(savedinstancestate);

    setcontentview(r.layout.news_articles);

  }

}

注意:当你通过在布局xml文件中定义fragment的方式把fragment添加给activity布局时,你不能在运行时删除该fragment。如果你打算在用户交互期间切换fragment,你就必须在activity被首次启动时把fragment添加到activity中。