• Android 四大组件 (五) 第五大组件


        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();
  • 相关阅读:
    Ext js必包含的几个文件
    设计模式之三:装饰者模式(简单实现(星巴兹咖啡))
    SQLSERVER排查CPU占用高的情况
    函数题练习52找两个数中最大者
    函数题练习53数字金字塔
    JavaScript面向对象tab栏增删改查操作
    JavaScriptObject.defineProperty方法
    Javascript面向对象迭代forEach、some、filter方法以及查询商品案例
    函数题练习51符号函数
    Javascript构造函数和原型
  • 原文地址:https://www.cnblogs.com/bugzone/p/fragment.html
Copyright © 2020-2023  润新知