您的位置:首页 > 移动开发 > Android开发

Fragment详解(三):创建Fragment

2016-03-23 14:30 309 查看

创建Fragment

要想创建Fragment,必须创建Fragment的子类或Fragment的子类。但这里需要注意一下如我我们的APP需要兼容Android3.0一下的版本,需要引入v4的包,然后使用v4包中的Fragment。

系统提供的Fragment 为 android.app.Fragment

v4提供的Fragment 为 android.support.v4.app.Fragment

这里我们只讨论系统提供的Fragment,v4中的Fragment与其大同小异,我们就不在描述了。

接下来我们就通过实际的代码来说明一下如何创建Fragment。

我们新建一个工程,然后在其中创建一个类继承android.app.Fragment(之后简称Fragment)。

import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
* 继承android.app.Fragment
*/
public class FragmentA extends Fragment {

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// 要返回Fragment的视图布局
View rootView = inflater.inflate(R.layout.fragment_a, container, false);

// 获取视图中的子控件
Button button = (Button) rootView.findViewById(R.id.button);

//  ...

return rootView;
}
}


这里我们通过onCreateView参数中的inflater的inflate方法来加载一个布局,其第一个参数为我们为Fragment指定的布局参数,第二个参数是onCreateView中的第二个参数,这个参数是我们为Fragment视图指定的父视图,第三个参数指定我们是否将Fragment布局视图添加到container中,这里是false,因为系统已经为我添加了,所以这里我们就不用再次添加了。

关于LayoutInflater可参数解释我们可以参照之前的博文《LayoutInflater详解》。

如代码所示我们创建一个FragmentA继承了Fragment,并重写了它的onCreateView生命周期方法,这个方法返回一个视图,作为Fragment的视图,通常情况下我们会在这个方法中通过findViewById来初始化视图中的控件,关于Fragment的生命周期方法我们稍后再讲解。

这样我们就创建好了一个简单的Fragment,接下来我们看看如何使用Fragment。

如何使用Fragment

使用Fragment通常有如下两种方式:

1.在xml布局中直接使用

2.在代码中使用

下面我们分别讲解一下具体的用法。

1)在xml布局中使用

在xml布局中使用Fragment与使用其他控件基本相同,我们通过具体的代码来体会一下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">

<fragment android:name="com.todo.fragmentdemo.FragmentA"
android:id="@+id/fragmentA"
android:layout_width="match_parent"
android:layout_height="500dp"/>

</LinearLayout>


我们使用标签来表示一个fragment,然后指定其android:name属性为具体Fragment类的全路径即可。是不是很简单啊。

2)在代码中使用Fragment

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">

</LinearLayout>


首先我们看到上面是一个activity的布局,其id为content。我们在来看看activity的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// 创建一个fragment对象
Fragment fragment = new FragmentA();
// 获取FragmentManager
FragmentManager manager = getFragmentManager();
// 获取FragmentTransaction
FragmentTransaction ft = manager.beginTransaction();
// 将fragment对象添加到布局id为content的ViewGroup中
ft.add(R.id.content, fragment);
// 提交事务
ft.commit();
}


这里我们解释一下Activity中的代码,首先我们创建一个FragmentA对象,然后调用getFragmentManager方法来获取FragmentManager对象,(

如果使用Android3.0以下的版本,需要引入v4的包,然后Activity继承FragmentActivity,然后通过getSupportFragmentManager获得FragmentManager。不过还是建议版Menifest文件的uses-sdk的minSdkVersion和targetSdkVersion都改为11以上,这样就不必引入v4包了。)

FragmentManager是系统为我们提供用于在Activity中操作Fragment使用的一个工具类。接着我们通过FragmentManager对象来获取FragmentTransaction对象。FragmentTransaction是操作Framgent事务使用,例如添加、移除、替换Fragment等等操作都是用FragmentTransaction来完成,我们后面会详细的讲解。接下来我们调用了FragmentTransaction的add方法,其中add的第一个参数是我们activity不中根布局的id,第二个参数是我们创建的FragmentA对象。这个方法的作用就是将Fragment的视图添加到id位content的布局当中,然后调用FragmentTransaction的commit提交事务,运行上面两种方式的代码效果是一样的,效果如下:

现在来总结一下从创建到使用Fragment的具体步骤:

创建一个class继承Fragment。

重写Fragment的onCreateView方法,并返回一个布局视图。

使用Fragment分为两种方式

在布局中使用标签指定其android:name属性为具体Fragment类的全路径。

在代码中使用Fragment

new一个Fragment实例

调用getFragmentManager获取FragmentManager。// v4中调用getSupportFragmentManager

获取FragmentTransaction

调用FragmentTransaction的add方法将fragment添加到指定的布局当中

调用commit方法提交事务

一般情况下,我们通过上面的步骤即可完成Fragment的使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android fragment v4 v7 教程