廢話不多說了,直接進入主題了:
首先需要注意,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 這里是本教程的所有源代碼,需要的朋友就上去看看吧。