1.为什么需要Fragment

在 Android UI 开发中,Fragment 是一个非常重要的概念。为了给Android应用创建动态的,多版块的用户UI界面,必须把UI组件和Activity的行为封装成一个独立模块,这样就可以在多个Activity中使用这个模块。封装模块的一种方法就是使用fragment,fragment在某种程度上表现得就像一个嵌套的Activity,同时fragment还能够定义自己的布局,实现生命周期的自我管理。Fragment能够提升应用程序在不同尺寸的设备上得用户交互体验。比如在手机及PAD上支持不同的布局形式,提升操作体验。

2.Fragment的支持库

Fragment并不是Android最初的版本就支持的,Android从3.0版本开始才支持fragment,也就是说如果您使用的版本在1.6-3.0之间,您需要使用support library来实现fragment。使用支持库的支持可以参照下列步骤:

A)使用Android sdk 下的 SDK Manager工具下载 Android Support Package

B)在您的Android工程的顶级目录下创建一个libs目录

C)将JAR文件拷贝到您创建的libs目录下,通常在<sdk>/extras/android/support/v4/android-support-v4.jar

D)更新Manifest.xml文件,在<manifest>配置节下增加或者更新

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />

E)引入jar包,选中这个jar包 → 右键 → Build Path → Add to Build Path

F)Import jar 包到项目

import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;...

注意:在使用FragmentActivity继承FragmentActivity而不是Activity。如果系统是3.0或以上版本,可以使用普通的Activity

3.创建Fragment

在使用Fragment的时候,可以把Fragment当做Activity的一部分,Fragment拥有自己的生命周期,能够独立地接受输入并且激发输入事件对输入进行处理。在Activity运行的过程中,可以动态地增加或者删除Activity包含的Fragment。创建一个fragment需要继承fragment类,然后重写主要的fragment的生命周期事件来插入相关的业务逻辑,这非常类似于创建Activity类。

与创建Activity唯一不同的是需要重写OnCreateView()事件的回调函数来返回一个View,这也是创建一个可运行的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);    }}

就像Acivity一样,如果你想通过代码来管理fragment的生命周期的详细状态,那么就要实现fragment其他的生命周期事件。举例来说,Activity调用onPause()的时候,也会自动去调用Activity包含的fragment的onPause()事件,如果你希望在fragment 调用onPause()的时候做一些个性化的处理,那么就要实现fragment的onPause()事件的回调函数。
4.通过XML定义Fragment的布局

由于fragment是可重用的,模块化的UI组件,那么任何一个fragment的实例必须关联到一个父级FragmentActivity.Fragmenet与Activity的这种关联关系正是通过XML来定义的。需要注意的是FragmentActivity是一种特殊的Activity来处理fragment的,最低版本大于或者等于API 11的系统可以使用常规的Activity。下面是一个例子,在屏幕被认为是“较大尺寸”时在一个Activity里面加了两个fragment。(尺寸大小的判别是根据目录来区分的),例如 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);    }}

注意:将fragment的布局定义在XML中时,在Activity中将无法在Activity运行过程中动态地增加或者删除fragment.如果你期望动态操作fragment,请关注下一个章节关于fragment的动态使用。



更多相关文章

  1. Android自学笔记(4)
  2. 简单分析Android里面的TimePicker控件
  3. Android开发四年相关面试知识整理
  4. Android常见的Event-driven方案
  5. Android之LayoutInflater加载布局及原理分析
  6. 阿里HR: 你会 Android(安卓)实现侧滑菜单-design吗? CN看了,原来这
  7. ANDROID中点击事件的实现方式
  8. Android的5种基本布局
  9. Android(安卓)FlexboxLayout 聪明的UI布局

随机推荐

  1. git 获取android source
  2. Android笔记1
  3. Android(安卓)创建自定义View 实现TopBar
  4. Android笔记 - 常见错误解决方法 | Andro
  5. Android启动脚本init.rc(2)
  6. Android(安卓)消息传递机制分析
  7. 详解 Android(安卓)的 Activity 组件
  8. Android(安卓)中如何获取editText文本信
  9. Android(安卓)- menu 相关
  10. Android(安卓)Canvas绘图详解(图文)