Fragment详解(三):创建Fragment

创建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)