Android Fragment 剖析 - 01

       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的动态使用。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值