利用Fragment创建动态UI 之 创建一个Fragment

我们如果把activity界面分割为多个模块,那么一个fragment就可以认为是其中的一个模块,这个模块有着自己的生命周期,可以接收自己的输入事件,而且在activity运行的时候,你可以动态的增加或者移除它(就好像一个"子activity”,你可以在不同的activity里面来使用它)。这一节我们就来学习如何利用Support Library来扩展Fragment 类,让你的app可以在跑着android 1.6老版本的android机器上保持兼容。

注意:如果因为某些原因,你将你的APP支持的最小的API版本为11或者之上,那么你不需要使用Support Library 里面的,可以直接使用frameworkd层的Fragment 类和对于的android.jar包提供的API函数。要知道,我们在这一节里面只是学习如何使用Support Library里面的API函数,这些函数使用了特别的包名,API的名字也和平台里面所包含的名称有些略微不同。

创建一个Fragment类

创建一个由Fragment扩展的fragment,你要去重写它里面的生命周期函数,在里面实现你的APP的逻辑,就像重写Activity里面的生命周期方法一样。

另外一个不同之处是,当你创一个Fragment的时候,你必须使用onCreateView()这个回调函数在定义layout。实际上,这个函数也是如果仅仅是为了让你的fragment运行,唯一需要的回调函数。下面就是一个简单的例子,定义它的layout.

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在不同状态转换的时候,这些函数管理着你的fragment的状态。例如,如果activity的onPause函数被调用,那么它里面的fragment也会收到系统对它的onPause的调用。

要查看更多的关于fragment生命周期和回调函数的信息,请阅读:Fragments

使用XML为一个Activity添加一个Fragment

fragment是一个可重复利用,独立的UI模块组件,每一个Fragment类的实例都必须和FragmentActivity关联。你可以在activity的layout的xml文件里面,添加fragment来实现这种关联。

注意:FragmentActivity 是Support Library 里面针对系统API 版本在11之下的时候,来处理fragment的类。如果你的APP支持的最小API版本在11或者之上,那就可以直接用Activity来处理fragment。

下面的这个例子就是在large屏幕下的layout xml文件里面添加了2个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>
提示:关于更多的创建不同屏幕下的layout文件,请阅读 Supporting Different Screen ,或者我们前面已经翻译的章节。

下面是activity如何使用这个layout.

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的方式给一个activity添加一个fragment,那么,我们无法在activity运行的时候动态的移除这个fragment。如果你想在用户使用期间让你的fragment动态在展示或者移除之间乱换,那么你必须在activity第一次开始的添加fragment到activity。我们在下一节中很快就讲解。

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值