Android3.0 Fragment詳解一(文章最後有源代碼)

廢話不多說了,直接進入主題了:

首先需要注意,Fragment是在3.0版本引入的,如果你使用的是3.0之前的系统,需要先导入android-support-v4的jar包才能使用Fragment功能。

 

先來幾個效果圖:

Android3.0 Fragment詳解一(文章最後有源代碼)_第1张图片

fragment1.xml的代碼如下:

 

 

<>

    </>

</>

fragment2.xml的代碼和fragment1差不多,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:background="#ffff00">

    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="This is fragment 2"
       android:textColor="#000000"
       android:textSize="25sp" />

</LinearLayout>

activity_main.xml代碼入下:

<>

    </>

    </>

</>

新建一個Fragment1.java,繼承與Fragment,

com.yaowen.fragments;

android.app.Activity;
android.app.Fragment;
android.os.Bundle;
;

android.view.LayoutInflater;
android.view.View;
android.view.ViewGroup;

Fragment1 Fragment {


    View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        inflater.inflate(R.layout., container, );
    }


}

Fragment2.java也是如法炮製,代碼如下:

com.yaowen.fragments;

android.app.;
android.os.Bundle;
;
android.view.LayoutInflater;
android.view.View;
android.view.ViewGroup;

Fragment2  {
    View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        inflater.inflate(R.layout., container, );
    }
}

MainActivity.java的代碼如下:(代碼很簡單,就是初始化新建的代碼。)

com.yaowen.fragments;

android.os.Bundle;
android.support.v7.app.AppCompatActivity;

MainActivity AppCompatActivity {

    onCreate(Bundle savedInstanceState) {
        .onCreate(savedInstanceState);
        setContentView(R.layout.);
}
}

 

》》》》》》》上面的例子已經簡單地介紹了Fragment啦,接下來要講的是動態添加Fragment了

在原先的項目中,修改activity_main.xml文件的代碼,在最外層的LinearLayout 里設置一個id,把裡面的控件都刪除了:

<>

</>

修改主活動類,如下:

com.yaowen.fragments;

android.os.Bundle;
android.support.v7.app.AppCompatActivity;
android.view.;

MainActivity AppCompatActivity {

    onCreate(Bundle savedInstanceState) {
        .onCreate(savedInstanceState);
        setContentView(R.layout.);
        display = getWindowManager().getDefaultDisplay();
        (display.getWidth() > display.getHeight()) {
            Fragment1 fragment1 = Fragment1();
            getFragmentManager().beginTransaction().replace(R.id., fragment1)
                    .commit();} {
            Fragment2 fragment2 = Fragment2();
            getFragmentManager().beginTransaction().replace(R.id., fragment2).commit();
        }
    }
}

 

Android3.0 Fragment詳解一(文章最後有源代碼)_第2张图片Android3.0 Fragment詳解一(文章最後有源代碼)_第3张图片

上面兩張圖就是動態添加Fragment的運行效果圖。

》》》》》》接下來,我們來研究下Fragment的生命週期:

修改Fragment1的代碼如下:

com.yaowen.fragments;

android.app.Activity;
android.app.Fragment;
android.os.Bundle;
;
android.util.Log;
android.view.LayoutInflater;
android.view.View;
android.view.ViewGroup;

Fragment1 Fragment {
    String = ;

    View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Log.(, );
        inflater.inflate(R.layout., container, );
    }

    onAttach(Activity activity) {
        .onAttach(activity);
        Log.(, );
    }

    onCreate(Bundle savedInstanceState) {
        .onCreate(savedInstanceState);
        Log.(, );
    }

    onActivityCreated(Bundle savedInstanceState) {
        .onActivityCreated(savedInstanceState);
        Log.(, );
    }

    onStart() {
        .onStart();
        Log.(, );
    }

    onResume() {
        .onResume();
        Log.(, );
    }

    onPause() {
        .onPause();
        Log.(, );
    }

    onStop() {
        .onStop();
        Log.(, );
    }

    onDestroyView() {
        .onDestroyView();
        Log.(, );
    }

    onDestroy() {
        .onDestroy();
        Log.(, );
    }

    onDetach() {
        .onDetach();
        Log.(, );
    }
}

可以看到,上面的代码在每个生命周期的方法里都打印了日志,然后我们来运行一下程序,可以看到打印日志如下:

Android3.0 Fragment詳解一(文章最後有源代碼)_第4张图片

这时点击一下home键,打印日志如下:

如果你再重新进入进入程序,打印日志如下:

然后点击back键退出程序,打印日志如下:

Android3.0 Fragment詳解一(文章最後有源代碼)_第5张图片

看到这里,我相信大多数朋友已经非常明白了,因为这和Activity的生命周期太相似了。只是有几个Activity中没有的新方法,这里需要重点介绍一下:

onAttach方法:Fragment和Activity建立关联的时候调用。

onCreateView方法:为Fragment加载布局时调用。

onActivityCreated方法:当Activity中的onCreate方法执行完后调用。

onDestroyView方法:Fragment中的布局被移除时调用。

onDetach方法:Fragment和Activity解除关联的时候调用。

 

補充:不知道為什麼代碼貼上去,發表后會丟失部分代碼,我把我的源代碼發出來吧

https://github.com/yaowen613/Fragment_oschina.git 這里是本教程的所有源代碼,需要的朋友就上去看看吧。

 

你可能感兴趣的:(Android3.0 Fragment詳解一(文章最後有源代碼))