廢話不多說了,直接進入主題了:
首先需要注意,Fragment是在3.0版本引入的,如果你使用的是3.0之前的系统,需要先导入android-support-v4的jar包才能使用Fragment功能。
先來幾個效果圖:
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();
}
}
}
上面兩張圖就是動態添加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.(, );
}
}
可以看到,上面的代码在每个生命周期的方法里都打印了日志,然后我们来运行一下程序,可以看到打印日志如下:
这时点击一下home键,打印日志如下:
如果你再重新进入进入程序,打印日志如下:
然后点击back键退出程序,打印日志如下:
看到这里,我相信大多数朋友已经非常明白了,因为这和Activity的生命周期太相似了。只是有几个Activity中没有的新方法,这里需要重点介绍一下:
onAttach方法:Fragment和Activity建立关联的时候调用。
onCreateView方法:为Fragment加载布局时调用。
onActivityCreated方法:当Activity中的onCreate方法执行完后调用。
onDestroyView方法:Fragment中的布局被移除时调用。
onDetach方法:Fragment和Activity解除关联的时候调用。
補充:不知道為什麼代碼貼上去,發表后會丟失部分代碼,我把我的源代碼發出來吧
https://github.com/yaowen613/Fragment_oschina.git 這里是本教程的所有源代碼,需要的朋友就上去看看吧。