zoukankan      html  css  js  c++  java
  • Android学习笔记(六)Fragment的生命周期

      在上一篇博文中对Fragment做了简单的介绍,现在再来探讨一下Fragment的生命周期。

    一、Fragment的几种状态:  

      与Activity类似,Fragment也有一下几种状态:

      · 活动状态:当前Fragment位于前台,可见,可获得焦点。

      · 暂停状态:其他Activity位于前台,该Fragment可见,不可获得焦点。

      · 停止状态:不可见,失去焦点。

      · 销毁状态:该Fragment被完全删除或被结束。

    二、Fragment的回调方法:

      在Fragment的生命周期中,有一下方法会被回调:

      · onAttach():当Fragment被添加到Activity时被回调,只回调一次。

      · onCreate(Bundle savedStatus):创建Fragment时被回调,一次。

      · onCreateView(): 每次创建、绘制该Fragment的View组件时回调,Fragment将会显示该方法返回的View组件。

      · onActivityCreated():Fragment所在的Activity启动完成后回调。

      · onStart():每次启动或恢复Fragment时被回调。

      · onResume():每次启动或恢复Fragment时被回调,onStart()回调后就会回调此方法。

      · onPause():暂停时回调。

      · onStop():停止Fragment时回调。

      · onDestroyView():销毁Fragment的View组件时回调。

      · onDestroy():销毁Fragment时调用,一次。

      · onDetach():将Fragment从Activity中删除、被替换完成时回到该方法,在onDestroy()之后回调。

      根据以上方法被回调的时机,我们可以根据需要选择性的覆盖指定方法。从而实现相关需求。

    三、Fragment生命周期实例

      下面代码是Fragment生命周期的例子,重写了以上十一个生命周期方法:

     1 @SuppressLint("NewApi")
     2 public class MyFragment extends Fragment {
     3     Button bnOk;
     4     TextView tvShow;
     5     private final String TAG = "MyFragment";
     6     
     7     public MyFragment(){
     8         System.out.println(TAG + ":MyFragment()");
     9     }
    10     
    11     @Override
    12     public void onAttach(Activity activity) {
    13         super.onAttach(activity);
    14         System.out.println(TAG + ":onAttach()");
    15     }
    16     
    17     @Override
    18     public void onCreate(Bundle savedInstanceState) {
    19         super.onCreate(savedInstanceState);
    20         System.out.println(TAG + ":onCreate()");
    21         
    22     }
    23     //重写改方法,返回值View将作为Fragment显示的组件
    24     @Override
    25     public View onCreateView(LayoutInflater inflater, ViewGroup container,
    26             Bundle savedInstanceState) {
    27         System.out.println(TAG + ":onCreateView()");
    28         //加载fragment_main.xml布局文件
    29         View rootView = inflater.inflate(R.layout.fragment_main, container, false);
    30         return rootView;
    31     }
    32     
    33     @Override
    34     public void onActivityCreated(Bundle savedInstanceState) {
    35         super.onActivityCreated(savedInstanceState);
    36         System.out.println(TAG + ":onActivityCreated()");
    37     }
    38     
    39     @Override
    40     public void onStart() {
    41         super.onStart();
    42         System.out.println(TAG + ":onStart()");
    43     }
    44     
    45     @Override
    46     public void onResume() {
    47         super.onResume();
    48         System.out.println(TAG + ":onResume()");
    49     }
    50     
    51     @Override
    52     public void onPause() {
    53         super.onPause();
    54         System.out.println(TAG + ":onPause()");
    55     }
    56     
    57     @Override
    58     public void onStop() {
    59         super.onStop();
    60         System.out.println(TAG + ":onStop()");
    61     }
    62     
    63     @Override
    64     public void onDestroyView() {
    65         super.onDestroyView();
    66         System.out.println(TAG + ":onDestroyView()");
    67     }
    68     
    69     @Override
    70     public void onDestroy() {
    71         super.onDestroy();
    72         System.out.println(TAG + ":onDestroy()");
    73     }
    74     
    75     @Override
    76     public void onDetach() {
    77         super.onDetach();
    78         System.out.println(TAG + ":onDetach()");
    79     }
    80     
    81 }

      下面我们来试验一下并看日志结果:

      1、启动Fragment日志如下(请忽略黄色日志):

      

      2、息屏状态下:

      

      3、重新点亮屏幕:

      

      4、退出:

      

      其实还有更多的情况,着这里就不一一试验了。这个例子虽然很简单,但能很好的反映了Fragment生命周期中各方法的回调时机。

  • 相关阅读:
    Windows Server 2008 R2域控组策略设置禁用USB
    Windows Server 2008 R2组策略设置计算机配置和用户配置
    Windows Server 2008 R2父域管理员与子域管理员相互登录访问
    转载:如何处理浏览器的断网情况?
    转载:浏览器缓存库设计总结(localStorage/indexedDB)
    手写启动一个本地服务器的命令行工具
    Node.js-核心模块-zlib
    使用console.log打印公司招聘信息和字符画
    转载:准备刷 leetcode 了,才发现自己连时间复杂度都不懂
    转载:前端通信那些事儿
  • 原文地址:https://www.cnblogs.com/codingblock/p/4789539.html
Copyright © 2011-2022 走看看