Fragment 的存在必须依附于 Activity,并且与 Activity 一样,拥有自己的生命周期,同时处理用户的交互动作。同一个 Activity 可以有一个或多个 Fragment 作为界面内容,并且可以动态添加、删除 Fragment,灵活控制 UI 内容,也可以用来解决部分屏幕适配问题。
另外,support v4 包中也提供了 Fragment,兼容 Android 3.0 之前的系统(当然,现在 3.0 之前的系统在市场上已经很少见了,可以不予考虑),使用兼容包需要注意两点:
FragmentActivity是为了兼容4.0以下版本的Fragment使用的。所以如果想兼容4.0以下Android版本使用Fragment的话,框架Activity需要继承FragmentActivity,该类在android.support.v4.app.FragmentActivity里的。它提供了操作fragment的一些方法,其功能跟4.0及以后的版本的Activity的功能一样。
1.Activity 必须继承自 FragmentActivity;
2.使用 getSupportFragmentManager() 方法获取 FragmentManager 对象;
Fragment 生命周期介绍:
onAttach(Context context):当Fragment和Activity发生关联时使用,在Fragment于窗口关联后立刻调用。从该方法开始,就可以通过Fragment.getActivity方法获取与Fragment关联的窗口对象,但因为Fragment的控件未初始化,所以不能够操作控件。
onCreate(Bundle savedInstanceState)在调用完onAttach执行完之后立刻调用onCreate方法,可以在Bundle对象中获取一些在Activity中传过来的数据。通常会在该方法中读取保存的状态,获取或初始化一些数据。在该方法中不要进行耗时操作,不然窗口不会显示。
onCreateView(LayoutInflater, ViewGroup, Bundle):创建该Fragment的视图,该方法是Fragment很重要的一个生命周期方法,因为会在该方法中创建在Fragment显示的View,其中inflater是用来装载布局文件的,container是<fragment>标签的父标签对应对象, savedInstanceState参数可以获取Fragment保存的状态,如果未保存那么就为null。
onViewCreated(View view,Bundle savedInstanceState) Android在创建完Fragment中的View对象之后,会立刻回调该方法。其种view参数就是onCreateView中返回的view,而bundle对象用于一般用途。
onActivityCreate(Bundle):当Activity的onCreate方法返回时调用,在Activity的onCreate方法执行完之后,Android系统会立刻调用该方法,表示窗口已经初始化完成,从这一个时候开始,就可以在Fragment中使用getActivity().findViewById(Id);来操控Activity中的view了。
onStart() 这个没啥可讲的,但有一个细节需要知道,当系统调用该方法的时候,fragment已经显示在ui上,但还不能进行互动,因为onResume方法还没执行完。
onResume() 该方法为fragment从创建到显示Android系统调用的最后一个生命周期方法,调用完该方法时候,fragment就可以与用户互动了。
onPause() fragment由活跃状态变成非活跃状态执行的第一个回调方法,通常可以在这个方法中保存一些需要临时暂停的工作。如保存音乐播放进度,然后在onResume中恢复音乐播放进度。
onStop() 当onStop返回的时候,fragment将从屏幕上消失。
onDestoryView() 与onCreateView相对应,当该Fragment的视图被移除时调用, 该方法的调用意味着在 onCreateView 中创建的视图都将被移除。
onDestroy() Android在Fragment不再使用时会调用该方法,要注意的是~这时Fragment还和Activity藕断丝连!并且可以获得Fragment对象,但无法对获得的Fragment进行任何操作。
onDetach():与onAttach相对应,当Fragment与Activity关联被取消时调用.为Fragment生命周期中的最后一个方法,当该方法执行完后,Fragment与Activity不再有关联
来自:https://blog.csdn.net/osle123/article/details/52756424
Fragment 与 Activity 生命周期交互:
一张图了解下:
执行代码过程了解下:
1. -- fragmentTransaction.addToBackStack("blank");//加入回退栈 按两次返回按键 07-18 20:15:50.912 17903-17903/? E/MainActivity: onCreate 07-18 20:15:50.914 17903-17903/? E/BlankFragment: onAttach 07-18 20:15:50.914 17903-17903/? E/BlankFragment: onCreate 07-18 20:15:50.914 17903-17903/? E/BlankFragment: onCreateView 07-18 20:15:50.918 17903-17903/? E/BlankFragment: onActivityCreated 07-18 20:15:50.918 17903-17903/? E/BlankFragment: onStart 07-18 20:15:50.918 17903-17903/? E/MainActivity: onStart 07-18 20:15:50.921 17903-17903/? E/MainActivity: onResume 07-18 20:15:50.921 17903-17903/? E/BlankFragment: onResume //按返回键 07-18 20:16:39.838 17903-17903/com.example.administrator.testapplication E/BlankFragment: onPause 07-18 20:16:39.838 17903-17903/com.example.administrator.testapplication E/BlankFragment: onCreate 07-18 20:16:39.839 17903-17903/com.example.administrator.testapplication E/BlankFragment: onDestroyView 07-18 20:16:39.842 17903-17903/com.example.administrator.testapplication E/BlankFragment: onDestroy 07-18 20:16:39.842 17903-17903/com.example.administrator.testapplication E/BlankFragment: onDetach //按返回键 07-18 20:16:42.771 17903-17903/com.example.administrator.testapplication E/MainActivity: onPause 07-18 20:16:43.157 17903-17903/com.example.administrator.testapplication E/MainActivity: onStop 07-18 20:16:43.158 17903-17903/com.example.administrator.testapplication E/MainActivity: onDestroy
2. //---------------------------------------------------------------------------------// //按物理home键 07-18 20:17:06.215 17903-17903/com.example.administrator.testapplication E/MainActivity: onCreate 07-18 20:17:06.216 17903-17903/com.example.administrator.testapplication E/BlankFragment: onAttach 07-18 20:17:06.216 17903-17903/com.example.administrator.testapplication E/BlankFragment: onCreate 07-18 20:17:06.217 17903-17903/com.example.administrator.testapplication E/BlankFragment: onCreateView 07-18 20:17:06.220 17903-17903/com.example.administrator.testapplication E/BlankFragment: onActivityCreated 07-18 20:17:06.221 17903-17903/com.example.administrator.testapplication E/BlankFragment: onStart 07-18 20:17:06.221 17903-17903/com.example.administrator.testapplication E/MainActivity: onStart 07-18 20:17:06.223 17903-17903/com.example.administrator.testapplication E/MainActivity: onResume 07-18 20:17:06.223 17903-17903/com.example.administrator.testapplication E/BlankFragment: onResume //按home键 07-18 20:17:10.213 17903-17903/com.example.administrator.testapplication E/BlankFragment: onPause 07-18 20:17:10.213 17903-17903/com.example.administrator.testapplication E/MainActivity: onPause 07-18 20:17:10.538 17903-17903/com.example.administrator.testapplication E/MainActivity: onSaveInstanceState 07-18 20:17:10.540 17903-17903/com.example.administrator.testapplication E/BlankFragment: onCreate 07-18 20:17:10.540 17903-17903/com.example.administrator.testapplication E/MainActivity: onStop
3. //fragmentTransaction.addToBackStack("blank"); 注释该行代码运行 //-----------------------------------------------------------------------------// 07-18 20:21:12.098 18226-18226/com.example.administrator.testapplication E/MainActivity: onCreate 07-18 20:21:12.100 18226-18226/com.example.administrator.testapplication E/BlankFragment: onAttach 07-18 20:21:12.100 18226-18226/com.example.administrator.testapplication E/BlankFragment: onCreate 07-18 20:21:12.101 18226-18226/com.example.administrator.testapplication E/BlankFragment: onCreateView 07-18 20:21:12.105 18226-18226/com.example.administrator.testapplication E/BlankFragment: onActivityCreated 07-18 20:21:12.105 18226-18226/com.example.administrator.testapplication E/BlankFragment: onStart 07-18 20:21:12.105 18226-18226/com.example.administrator.testapplication E/MainActivity: onStart 07-18 20:21:12.109 18226-18226/com.example.administrator.testapplication E/MainActivity: onResume 07-18 20:21:12.109 18226-18226/com.example.administrator.testapplication E/BlankFragment: onResume //按返回键 07-18 20:21:16.642 18226-18226/com.example.administrator.testapplication E/BlankFragment: onPause 07-18 20:21:16.642 18226-18226/com.example.administrator.testapplication E/MainActivity: onPause 07-18 20:21:17.020 18226-18226/com.example.administrator.testapplication E/BlankFragment: onCreate 07-18 20:21:17.020 18226-18226/com.example.administrator.testapplication E/MainActivity: onStop 07-18 20:21:17.022 18226-18226/com.example.administrator.testapplication E/BlankFragment: onDestroyView 07-18 20:21:17.023 18226-18226/com.example.administrator.testapplication E/BlankFragment: onDestroy 07-18 20:21:17.024 18226-18226/com.example.administrator.testapplication E/BlankFragment: onDetach 07-18 20:21:17.024 18226-18226/com.example.administrator.testapplication E/MainActivity: onDestroy
相关调用代码:
BlankFragment fragment = new BlankFragment(); android.support.v4.app.FragmentManager fragmentManager; android.support.v4.app.FragmentTransaction fragmentTransaction; fragmentManager = getSupportFragmentManager(); fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.ll_fragment,fragment,"blank"); fragmentTransaction.addToBackStack("blank"); fragmentTransaction.commit();