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生命周期中各方法的回调时机。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏分享达人秀

Activity状态和生命周期方法

前面两期我们学习了Activity的创建和注册、以及启动和关闭,也学会了重写onCraete方法,这些知识在实际开发中远远不够,还需要学习了解更多。 ...

1966
来自专栏技术小黑屋

关于获取当前Activity的一些思考

在Android开发过程中,我们有时候需要获取当前的Activity实例,比如弹出Dialog操作,必须要用到这个。关于如何实现由很多种思路,这其中有的简单,有...

513
来自专栏向治洪

ViewPager 实现 Galler 效果, 中间大图显示,两边小图展示(优化篇)

上一张效果图: ? ? ? 之前的项目有一个Galley的项目,但是代码结构特别乱,别问我为什么,我也是刚接手这个项目,为了方便以后阅读和维护我对一些模块进行了...

2449
来自专栏云加新鲜事儿

Android 基础:Fragment,看这篇就够了 (上)

本文从为什么出现Fragment开始,介绍了Fragment相关的方方面面,包括Fragment的基本定义及使用、回退栈的内部实现、Fragment通信、Dia...

1.9K4
来自专栏向治洪

android横竖屏切换activity生命周期变化

1、新建一个Activity,并把各个生命周期打印出来 2、运行Activity,得到如下信息 onCreate--> onStart--> onRe...

2008
来自专栏Android-薛之涛

Android - 懒加载

如果我们的项目中使用了ViewPager+Framgment实现底部Tab可点可滑,那么我们都知道ViewPager有预加载功能,通过viewpager.set...

572
来自专栏吴小龙同學

Android通讯录索引效果

通讯录索引效果,网上很多了,我这里做个记录。 效果预览 ? SideBar 此类自定义索引的字母 1 2 3 4 5 6 7 8 9 10 11 12 ...

2746
来自专栏吴小龙同學

Activity生命周期和启动模式

Activity生命周期 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 2...

3497
来自专栏向治洪

ViewPager 实现 Galler 效果, 中间大图显示,两边小图展示

正常情况下, ViewPager 一页只能显示一项数据, 但是我们常常看到网上,特别是电视机顶盒的首页经常出现中间大图显示两端也都露出一点来,这种效果怎么实现呢...

3995
来自专栏Android源码框架分析

ViewPager刷新问题原理分析及解决方案(FragmentPagerAdapter+FragementStatePagerAdapter)ViewPager+FragmentPagerAdapte

2102

扫码关注云+社区