Android学习路线(二十一)运用Fragment构建动态UI——创建一个Fragment

时间:2022-10-06 08:24:56

你能够把fragment看成是activity的模块化部分。它拥有自己的生命周期,接受它自己的输入事件,你能够在activity执行时加入或者删除它(有点像是一个“子activity”。你能够在不同的activity中重用它)。本课将向你展示怎样使用Support Libaray继承 Fragment 类来让你的应用能够兼容正在执行Android
1.6的设备。

Demo下载:http://download.csdn.net/detail/sweetvvck/7757891

提示: 假设你决定你的应用需求的最低API级别是11或者更高,那么你不须要使用Support Library,你能够直接使用包括Fragment类的平台相关的APIs。

本课主要重点是使用Support Library的APIs。这和已经包括了Fragment类的平台版本号的差别是使用了一个指定的包签名以及一些略微不同的API名称。

在你開始这堂课之前,你必需要设置好你的项目,让他使用Support Library。假设你之前没有使用过Support Library。跟着Support Library Setup 文档来设置你的项目使用v4库。你也能够使用v7
appcompat
 库让你的应用activity可以使用action bar,它可以兼容到Android 2.1 (API level 7) 而且相同包括Fragment APIs。

创建一个Fragment


要创建一个Fragment,首先继承Fragment 类。然后覆盖基本的生命周期方法来插入了你的应用逻辑,类似你在Activity 类中所做的。

创建一个Fragment 与activity的一个不同点是,你必须使用onCreateView() 回调方法来定义布局。其实。你仅仅须要覆盖这一个回调方法就行让这个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);
    }
}

就像是一个activity。fragment须要实现其它的回调方法。这样就行同意你在它在actvity中被加入或移除时管理它的状态,就像是activity切换时它的生命周期状态。比如,当activity的onPause() 方法被调用。全部它内部的fragment都会收到onPause()方法的回调。

很多其它关于fragment生命周期以及回调方法的信息,请查看Fragments 开发向导。

使用XML向activity中加入一个fragment


因为fragment是可重用的,模块化UI组件。它的每一个实例都必须和一个父FragmentActivity关联。你能够通过在你的activity的XML布局文件里定义fragment来获取这个关联。

提示: FragmentActivity 是在Support
Library中提供的特殊的activity,用于处理在低于API级别为11的系统上使用fragment。假设你支持的最低系统版本号的API级别是11或者更高。那么你能够直接使用普通的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);
    }
}

假设你使用的是v7 appcompat library,你的activity中应该要使用ActionBarActivity。它是FragmentActivity 的子类(很多其它信息。请查看Android学习路线(七)设置Action
Bar
)。

提示: 当你在activity的XML布局文件里加入一个fragment时,你不能再执行时移除这个fragment。

假设你希望在用户交互中隐藏于现实你的fragment,你就必须在activity第一次启动时将fragment加入到activity中,在下堂课中会讲到。