注:本文翻译自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中,这是下节课将会展示的内容。

更多相关文章

  1. android自定义相机添加自定义水印
  2. Android(安卓)Design新控件之TextInputLayout 文本输入布局与自
  3. Android,一个函数实现摇一摇
  4. 动态添加权限
  5. android fragments
  6. Groovy 使用完全解析
  7. Android下实现injectso
  8. android 动态加载布局文件三种方法
  9. 《Android(安卓)JNI》05 在JNI中调用Java的函数

随机推荐

  1. JavaScript相当于Ruby的字符串#扫描
  2. HTML/JS作为本地SQLite数据库的接口
  3. 如何在Javascript中重新抛出异常,但保留堆
  4. js点击button按钮跳转到另一个新页面
  5. Emberjs应用程序加载除Index之外的所有路
  6. JS DOM 编程艺术(第2版)读书笔记 第5章
  7. 从服务器(任何服务器)获取当前日期和时间。
  8. 前端开发:从哪里开始?
  9. 加载外部站点并更改其可视化
  10. 错误对象,本机和自定义,如何区分?