热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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日志如下(请忽略黄色日志):

  Android学习笔记(六)Fragment的生命周期

  2、息屏状态下:

  Android学习笔记(六)Fragment的生命周期

  3、重新点亮屏幕:

  Android学习笔记(六)Fragment的生命周期

  4、退出:

  Android学习笔记(六)Fragment的生命周期

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


推荐阅读
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
author-avatar
U友50140932
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有