注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好。

原文链接:http://developer.android.com/training/basics/fragments/creating.html


你可以把一个fragment看成是一个activity的模块,有着自己的生命周期,接收自己的时间输入,你可以在activity的运行阶段添加或者移除fragment(某种意义上说,像是你可以在不同activity中重用的子activity)。这堂课将会展示如何通过使用Support Library来继承Fragment类,这样一来,你的应用就能与Android 1.6及以上的设备兼容了。

Note:

如果你决定你的应用仅支持API Level 11及以上的系统,那么你无需使用Support Library,可以使用框架中内置的Fragment类和与它相关的APIs。不过要注意这堂课关注的是使用Support Library中提供的API,它和平台中内置的Fragment类相比,区别在于两者的包签名不同,有时候还有一些接口名字上的差异。

在你开始学习这节课之前,你必须合理配置你的Android项目来使用Support Library。如果在此之前你没有使用过Support Library,那么按照Support Library Setup这一文档的步骤,配置你的项目来使用v4库。然而,你也可以使用“v7应用兼容库(v7 appcompatlibrary)”使你的activities包含action bar,此时你的应用将兼容Android 2.1(API Level 7)及以上的系统,同时也包含了Fragment的APIs。

一). 创建一个Fragment类

为了创建一个fragment,继承Fragment类,之后覆写核心生命周期函数来插入你的应用逻辑,这和你处理Activity类的方法很相似。

当创建一个Fragment时,有一点不同的地方是:你必须使用onCreateView()回调函数来定义它的布局。事实上,这是唯一一个为了使一个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()方法。

可以阅读Fragments获取更多关于fragment生命周期和回调函数的知识。

二). 使用XML将Fragment添加至一个Activity

尽管fragments是可重用、模块化的UI组件,每个fragment的实例必须和一个父FragmentActivity关联。你可以通过在activity的XML布局文件中定义每一个fragment来实现这种关联。

Note:

FragmentActivity是一个由Support Library提供的特殊activity,用来处理早于API Level 11系统中的fragment。如果你所支持的系统版本高于API Level 11,那么你可以直接用常规的Activity。

下面是一个布局文件的例子,它向一个activity添加了两个fragment,前提是设备屏幕可认为是“大(large)”的(通过在目录名后面添加“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>

Tip:

关于更多为不同屏幕尺寸创建布局的知识,可以阅读:Supporting Different Screen Sizes。

之后将布局应用到你的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);
}
}

如果使用的是v7 appcompat library,你的activity应该继承ActionBarActivity,它是FragmentActivity的子类。更多信息可以阅读:Adding the Action Bar(博客链接:http://www.cnblogs.com/jdneo/p/3440367.html)。

Note:

当你通过将fragment在XML布局文件中定义的方式把fragment添加到activity中,你不能再运行时移除这个fragment。如果你计划在用户交互过程中可以吧fragment换入或换出,你必须在activity第一次启动的时候把这个fragment添加到activity中,这是下节课将会展示的内容。

【Android Developers Training】 20. 创建一个Fragment的更多相关文章

  1. 【Android Developers Training】 19. 序言:通过Fragments构建动态UI

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  2. 【Android Developers Training】 21. 创建一个可变动的UI

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  3. 【Android Developers Training】 1. 创建一个Android项目工程

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  4. 【Android Developers Training】 95. 创建一个同步适配器

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  5. 【Android Developers Training】 94. 创建一个空内容提供器(Content Provider)

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  6. 【Android Developers Training】 93. 创建一个空验证器

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  7. 【Android Developers Training】 18. 重新创建一个Activity

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  8. 【Android Developers Training】 106. 创建并检测地理围栏

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  9. 【Android Developers Training】 76. 用Wi-Fi创建P2P连接

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

随机推荐

  1. centos6.5软件安装:RPM,SRPM与yum功能

    鸟哥的linxu私房菜读书笔记 前言: Linux上软件的安装可以以原始码的方式来安装软件,也就是利用厂商释出的 Tarball 来进行软件的安装.不过,你应该很容易发现,那就是每次安装软件都需要侦测 ...

  2. 理解C++ lvalue与rvalue

    一个众所周知的危险错误是,函数返回了一个局部变量的指针或引用.一旦函数栈被销毁,这个指针就成为了野指针,导致未定义行为.而左值(lvalue)和右值(rvalue)的概念,本质上,是理解“程序员可以放 ...

  3. wifi驱动总结(1)

    一.wifi平台设备驱动注册过程Path:Rtw_android.c (rk3399\kernel\drivers\net\wireless\rockchip_wlan\rtl8723au\os_de ...

  4. linux -- 个人笔记

    ##转自别人的博客 一般直接用tar命令打包很简单,直接使用 tar -zcvf test.tar.gz test 即可. 在很多时候,我们要对某一个目录打包,而这个目录下有几十个子目录和子文件,我们 ...

  5. 数组的重排序方法reverse()和sort()

    js数组中存在两个可以直接用来重排序的方法:reverse()和sort(). reverse()方法比较简单,直接反转数组项的顺序: var arr = [1, 3, 2, 4, 5]; arr.r ...

  6. Fast Walsh-Hadamard Transform——快速沃尔什变换

    模板题: 给定$n = 2^k$和两个序列$A_{0..n-1}$, $B_{0..n-1}$,求 $$C_i = \sum_{j \oplus k = i} A_j B_k$$ 其中$\oplus$ ...

  7. 高性能mysql(二)——mysql的存储引擎

    在文件系统中,mysql将每个数据库保存为数据目录下的一个子目录.创建表时,mysql会在子目录下创建一个和表同名的.frm文件保存表的定义.例如创建一个名为mytable的表,mysql会在myta ...

  8. php如何应对秒杀抢购高并发思路

    我们常用QPS(Query Per Second,每秒处理请求数)来衡量一个web应用的吞吐率,解决每秒数万次的高并发场景,这个指标非常关键. 举个栗子:假设一个业务请求平均为100ms,同时系统内有 ...

  9. Fragment回调接口应用间分享数据

    package com.example.mydemo; import java.util.List; import android.app.Activity; import android.app.A ...

  10. Principal Components Regression, Pt.1: The Standard Method

    In this note, we discuss principal components regression and some of the issues with it: The need fo ...