• Fragment生命周期(转)


        Android在3.0中引入了fragments的概念,主要目的是用在大屏幕设备上--例如平板电脑上,支持更加动态和灵活的UI设计.平板电脑的屏幕要比手机的大得多,有更多的空间来放更多的UI组件,并且这些组件之间会产生更多的交互.Fragment允许这样的一种设计,而不需要你亲自来管理viewhierarchy的复杂变化. 通过将activity的布局分散到fragment中, 你可以在运行时修改activity的外观,并在由activity管理的back stack中保存那些变化。
       例如, 一个新闻应用可以在屏幕左侧使用一个fragment来展示一个文章的列表,然后在屏幕右侧使用另一个fragment来展示一篇文章 – 2个fragment并排显示在相同的一个activity中,并且每一个fragment拥有它自己的一套生命周期回调方法,并且处理它们自己的用户输入事件. 因此, 取代使用一个activity来选择一篇文章,而另一个activity来阅读文章 的方式,用户可以在相同的activity中选择一篇文章并且阅读, 如图所示: 
    

    fragments.png

    1
      和Activity一样,Fragment也有自己的生命周期。 一个Fragment必须总是嵌入在一个Activity中,同时Fragment的生命周期受Activity而影响。
    

    Activity的生命周期

    activity_lifecycle.png

    Fragment生命周期

    fragment_lifecycle.png

    Activity的生命周期影响Fragment的生命周期
    activity_fragment_lifecycle.png

    下面通过程序来观察Fragment的生命周期

    第一步:新建一个Android工程命名为FragmentLifecycle目录结构如下图:
    360截图20130419225140074.jpg

    第二步:修改activity_main.xml布局文件代码如下:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity" >
    
        <fragment
            android:id="@+id/fragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            class="cn.eoe.leigo.lifecycle.MyFragment" />
    
    </RelativeLayout>
    

    第三步:编写MainActivity类:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    package cn.eoe.leigo.lifecycle;
    
    import cn.eoe.leigo.fragment.R;
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    
    public class MainActivity extends Activity {
        private static final String TAG = "MainActivity";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Log.d(TAG, "-----Activity onCreate-----");
        }
    
        @Override
        protected void onStart() {
            super.onStart();
            Log.d(TAG, "-----Activity onStart-----");
        }
    
        @Override
        protected void onRestart() {
            super.onRestart();
            Log.d(TAG, "-----Activity onRestart-----");
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            Log.d(TAG, "-----Activity onResume-----");
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            Log.d(TAG, "-----Activity onPause-----");
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            Log.d(TAG, "-----Activity onStop-----");
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            Log.d(TAG, "-----Activity onDestroy-----");
        }
    }
    

    第四步:编写MyFragment类:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    package cn.eoe.leigo.lifecycle;
    
    import android.app.Activity;
    import android.app.Fragment;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    public class MyFragment extends Fragment {
        private static final String TAG = "MyFragment";
    
        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            Log.d(TAG, "----------Fragment onAttach----------");
        }
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.d(TAG, "----------Fragment onCreate----------");
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            Log.d(TAG, "----------Fragment onCreateView----------");
            TextView textView = new TextView(getActivity());
            textView.setText("欢迎来到石头的博客");
            return textView;
        }
    
        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            Log.d(TAG, "----------Fragment onActivityCreated----------");
        }
    
        @Override
        public void onStart() {
            super.onStart();
            Log.d(TAG, "----------Fragment onStart----------");
        }
    
        @Override
        public void onResume() {
            super.onResume();
            Log.d(TAG, "----------Fragment onResume----------");
        }
    
        @Override
        public void onPause() {
            super.onPause();
            Log.d(TAG, "----------Fragment onPause----------");
        }
    
        @Override
        public void onStop() {
            super.onStop();
            Log.d(TAG, "----------Fragment onStop----------");
        }
    
        @Override
        public void onDestroyView() {
            super.onDestroyView();
            Log.d(TAG, "----------Fragment onDestroyView----------");
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            Log.d(TAG, "----------Fragment onDestroy----------");
        }
    
        @Override
        public void onDetach() {
            super.onDetach();
            Log.d(TAG, "----------Fragment onDetach----------");
        }
    
    }
    

    通过查看Log可以看到
    显示到前台时:
    360截图20130419213010781.jpg

    MyFragment onAttach() fragment关联到activity上
    MyFragment onCreate() fragment创建
    MyFragment onCreateView() fragment创建自己的视图

    MainActivity onCreate()
    MyFragment onActivityCreated() 可以处理fragment数据的初始化

    MainActivity onStart()
    MyFragment onStart()

    MainActivity onResume()
    MyFragment onResume()

    按后退键时:
    360截图20130419213059550.jpg
    MyFragment onPause()
    MainActivity onPause()

    MyFragment onStop()
    MainActivity onStop()

    MyFragment onDestoryView() 销毁掉自己的视图
    MyFragment onDestory()
    MyFragment onDetach() 解除和activity的关联

    MainActivity onDetory()

    声明:eoe文章著作权属于作者,受法律保护,转载时请务必以超链接形式附带如下信息

    原文作者: gaolei_xj

    原文地址: http://my.eoe.cn/657912/archive/2808.html

  • 相关阅读:
    起步X5 UI模型使用的新的JAVASCRIPT UI库 DHTMLX (简称DHX)
    行车记录仪
    牛客网——华为机试(题9:提取不重复的整数)(Java)
    牛客网——华为机试(题8:合并表记录)(Java)
    牛客网——华为机试(题7:取近似值)(Java)
    牛客网——华为机试(题6:质数因子)(Java)
    牛客网——华为机试(题5:进制转换)(Java)
    牛客网——华为机试(题4:字符串分隔)(Java)
    牛客网——华为机试(题2:计算字符个数)(Java)
    牛客网——华为机试(题1:字符串最后一个单词的长度)(Java)
  • 原文地址:https://www.cnblogs.com/YangBinChina/p/3699866.html
Copyright © 2020-2023  润新知