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

1

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

Activity的生命周期

Fragment生命周期

Activity的生命周期影响Fragment的生命周期

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

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

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

 123456789
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" ><fragmentandroid:id="@+id/fragment"android:layout_width="match_parent"android:layout_height="match_parent"class="cn.eoe.leigo.lifecycle.MyFragment" /></RelativeLayout>

第三步:编写MainActivity类:

 123456789
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";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.d(TAG, "-----Activity onCreate-----");}@Overrideprotected void onStart() {super.onStart();Log.d(TAG, "-----Activity onStart-----");}@Overrideprotected void onRestart() {super.onRestart();Log.d(TAG, "-----Activity onRestart-----");}@Overrideprotected void onResume() {super.onResume();Log.d(TAG, "-----Activity onResume-----");}@Overrideprotected void onPause() {super.onPause();Log.d(TAG, "-----Activity onPause-----");}@Overrideprotected void onStop() {super.onStop();Log.d(TAG, "-----Activity onStop-----");}@Overrideprotected void onDestroy() {super.onDestroy();Log.d(TAG, "-----Activity onDestroy-----");}
}

第四步:编写MyFragment类:

 123456789
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";@Overridepublic void onAttach(Activity activity) {super.onAttach(activity);Log.d(TAG, "----------Fragment onAttach----------");}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.d(TAG, "----------Fragment onCreate----------");}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {Log.d(TAG, "----------Fragment onCreateView----------");TextView textView = new TextView(getActivity());textView.setText("欢迎来到石头的博客");return textView;}@Overridepublic void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);Log.d(TAG, "----------Fragment onActivityCreated----------");}@Overridepublic void onStart() {super.onStart();Log.d(TAG, "----------Fragment onStart----------");}@Overridepublic void onResume() {super.onResume();Log.d(TAG, "----------Fragment onResume----------");}@Overridepublic void onPause() {super.onPause();Log.d(TAG, "----------Fragment onPause----------");}@Overridepublic void onStop() {super.onStop();Log.d(TAG, "----------Fragment onStop----------");}@Overridepublic void onDestroyView() {super.onDestroyView();Log.d(TAG, "----------Fragment onDestroyView----------");}@Overridepublic void onDestroy() {super.onDestroy();Log.d(TAG, "----------Fragment onDestroy----------");}@Overridepublic void onDetach() {super.onDetach();Log.d(TAG, "----------Fragment onDetach----------");}}

通过查看Log可以看到
显示到前台时:

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

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

MainActivity onStart()
MyFragment onStart()

MainActivity onResume()
MyFragment onResume()

按后退键时:

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

转载于:https://www.cnblogs.com/YangBinChina/p/3699866.html

Fragment生命周期(转)相关推荐

  1. Lifecycle Activity和Fragment生命周期感知组件 LifecycleObserver MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  2. Fragment生命周期详解

    关于Fragment的生命周期,博主写过Activity与Fragment生命周期详解,基本上把Fragment的生命周期详细介绍过,但是那仅仅是创建一个Fragmnet时的生命周期,而事实上Frag ...

  3. 对Fragment生命周期的理解以及其与Activity的关联

    Fragment生命周期的四种状态 Fragment和Activity类似,也存在运行状态.暂停状态.停止状态和销毁状态. 运行状态:当前Fragment位于前台展示,可见,可获取焦点. 暂停状态:其 ...

  4. Fragment 生命周期的详情

    Fragment每个生命周期方法的意义.作用(注意红色的不是生命周期方法): setUserVisibleHint():设置Fragment可见或者不可见时会调用此方法.在该方法里面可以通过调用get ...

  5. Fragment 生命周期:

    Fragment每个生命周期方法的意义.作用(注意红色的不是生命周期方法): setUserVisibleHint():设置Fragment可见或者不可见时会调用此方法.在该方法里面可以通过调用get ...

  6. Fragment生命周期与Fragment执行hide、show后的生命周期探讨

    一.Fragment 生命周期中的每个方法的意义与作用: 1.setUserVisibleHint()(此方法不属于生命周期方法):设置Fragment 用户可见或不可见时调用此方法,此方法在Frag ...

  7. android fragment 生命周期

    今天,简单讲讲fragment 的生命周期. 其实,对于fragment ,大家都很熟悉.我也经常使用,但是最近做一个功能时,在activity里面调用fragment 的函数,发现变量居然没有初始化 ...

  8. Android Fragment 生命周期及其正确使用(建议使用自定义View替换Fragment)

    使用Fragment 官方例子中显示: 例如:一个学生Fragment,需要传入studentId,进行http请求显示,那么setArguments后防止杀掉Fragment后,参数为0,显示不了数 ...

  9. Fragment生命周期及其使用

    Fragment是随着Android 3.0推出时携带的一部分,若是在1.6版本中使用,必须引入相应的支持包.Fragment最大的优点是你可以根据不同设备的屏幕大小创建动态的UI.Fragment有 ...

  10. 项目疑难杂症记录(五):fragment生命周期都回调了,却不见其页面展示

    继续记录我的疑难bug解决过程,这次要说的bug相比前几篇来说,更难定位,因为影响较大,直接导致不解决这个bug,根本就没有办法出版本,两三个同事定位了半天也没有结果,最后我自告奋勇的暂时放下手中的工 ...

最新文章

  1. CentOS开启与关闭防火墙
  2. Javascript实现信息滚动效果的方法
  3. linux教程:配置Tomcat开机启动
  4. 计算机改成服务器,旧电脑主机如何改成服务器
  5. 岑崟:手把手教你走好从技术转管理的第一步
  6. AndroidDeveloper Weekly No.3
  7. sobel算子进行边缘检测
  8. 7、Lctech Pi(F1C200S)开启RNDIS,通过USB与电脑联网(CherryPi,Mangopi,F1C100S)
  9. html怎么使表格居中,html怎么使表格居中
  10. iphone通用设置里显示UDID(tweak)
  11. html表单的put方法,form表单put、delete方式提交处理
  12. ROS学习笔记8 —— 状态机在ROS中的实现
  13. 从Ajax聊一聊Jsonp hijacking
  14. 7-3 找零钱***分数 20作者 李祥单位 湖北经济学院
  15. 或许,这是最好的一款微信公众号编辑器!
  16. 计算机硬件知识总结,计算机硬件知识总结(二)
  17. SignalTap II 之 Power-Up Trigger
  18. MySQL 不等于null或空格
  19. 新手程序员如何快速成长?
  20. ip地址分类及各网段私有地址

热门文章

  1. Android开发中如何加载API源码帮助开发
  2. Spring声明式事务管理示例——MyBatis学习笔记之十六
  3. intellij 出现“Usage of API documented as @since 1.8+”的解决办法
  4. 解决问题--mysql可以远程通过IP访问,不能通过localhost与127.0.0.1访问
  5. Mac python入门:安装python并新建python项目
  6. 数据库之互联网常用架构方案一览
  7. 外企的溃败:Oracle中国研发中心裁员,1600人,补偿为N+6
  8. Redis深入之道:原理解析、场景使用以及视频解读
  9. 如何拯救「大泥球」架构?人人车Android客户端架构演进实录
  10. 浅谈几种常见 RAID 的异同