Android 四大组件 (五) 第五大组件 - Fragment 使用

    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();

 

posted @ 2018-07-19 09:20  FreeFunCode  阅读(999)  评论(0编辑  收藏  举报