Fragment的概念
Fragment是Android honeycomb 3.0新增的概念,你可以将Fragment类比为Activity的一部分,它拥有自己的生命周期,接收自己的输入,你可以在Activity运行的时加入或者移除Fragment.(或者我们也可以将Fragment类比为一个可以在不同的Activity中重用的子Activity。
Fragment总是嵌入在Activity中,同时Fragment的生命周期受Activity影响,当Activity 暂停,所有在这个Activity中的Fragments将被释放。然而当一个Activity在运行比如resume时,你可以单独的操控每个Fragment。
如何创建一个Fragment
创建Fragment时需要继承Fragment基类,并且重载关键的生命周期方法来加入你的应用逻辑,类似你创建Activity的方法
Fragment与Activity不同的地方在于其必须通过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 ViewonCreateView(LayoutInflater inflater, ViewGroup container,
- BundlesavedInstanceState) {
- // Inflatethe layout for this Fragment
- returninflater.inflate(R.layout.article_view, container, false);
- }
- }
就像其他的Activity一样,Fragment应该事先其他的生命周期回调函数以便于控制其在Activity中的添加与移除,以及控制其本身在各个生命周期状态之间的迁移。当Fragment所在的Activity的onPause方法被调用,Fragment的onPause方法也应该被调用。
利用XML在Activity中添加一个Fragment
因为Fragment是可重用的,模块化的UI组件,任何一个Fragment的实例必须有继承自FragmentActivty父类。你可以通过将Fragment定义在Activity的布局XML文件中实现这一点。
注意:FragmentActivity是一个为支持API11以前的版本所提供特别的Activity。如果你支持的设备的版本高于API11,你可以直接使用Activity
以下是一个布局文件,实现了将两个Fragment添加到一个Activity中:
res/layout-large/news_articles.xml:
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <Fragmentandroid:name="com.example.android.Fragments.HeadlinesFragment"
- android:id="@+id/headlines_Fragment"
- android:layout_weight="1"
- android:layout_width="0dp"
- android:layout_height="match_parent" />
- <Fragmentandroid: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 voidonCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.news_articles);
-
}
-
}
注意:当你将一个Fragment通过布局文件添加到Activity中的的时候,你不能再运行时将Fragment移除。如果你需要通过用户的互动自由切入切出,你必须在Activity启动的时候添加Activity。