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布局文件代码如下:

 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可以看到
显示到前台时:

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

Fragment生命周期(转)的更多相关文章

  1. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

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

    我为什么不主张使用Fragment Fragment:( Fragment就相当于一个有生命周期的View,它的生命周期被所在的Activity的生命周期管理 ) 生命周期回调说明: onAttach ...

  3. Android之Fragment学习笔记②(Fragment生命周期)

    一. Fragment生命周期图                                  二.Fragment生命周期方法介绍 Fragment的生命周期和activity生命周期很像,其生 ...

  4. Android Activity生命周期以及Fragment生命周期的区别与分析

    Android Fragment生命周期图: Activity生命周期图: 对照图: Fragment生命周期分析: 1. 当一个fragment被创建的时候,它会经历以下状态. onAttach() ...

  5. Fragment(四)Fragment生命周期分析(转)

    Fragment(四)Fragment生命周期分析 转载请注明:http://blog.csdn.net/liaoqianchuan00/article/details/24271607   例子一 ...

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

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

  7. Fragment生命周期以及使用时的小问题

    前言- 昨天在写UI的时候用到了FRAGMENT,发现自己对此还不是非常了解,借此机会记录一下 Fragment的生命周期- 官方生命周期图: Fragment每个生命周期方法的意义.作用- onVi ...

  8. Fragment 生命周期的详情

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

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

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

  10. 面试 -- fragment生命周期

    Android 3.0 (Api 11)引入: Fragment具有重用,易适配(平板和手机之间的)优点: 依赖Activity,生命周期受到Activity的生命周期影响: fragment生命周期 ...

随机推荐

  1. HDU 4635

    http://acm.hdu.edu.cn/showproblem.php?pid=4635 问:最多加多少条边,使得原图不是强连通图 正向考虑有困难,不妨反向思考,既最少去掉几条边使得原图不是强连通 ...

  2. 使用 Windows 10 中的加速度计(Accelerometer,重力传感器)

    在做 UWP 应用开发的时候还有什么理由可以用到加速度计呢?场景很多啦,比如做游戏,做类似 Surface Hub 那种一边旋转,一边所有内容跟着一起转的效果. Windows 10 UWP 中的加速 ...

  3. Redis学习笔记-安装篇(Centos7)

    1.安装 这里使用源代码安装的方式,如果你希望使用yum或者rpm包安装的方式,可以百度一下,安装方法可谓多如牛毛. # 下载安装包 # wget http://download.redis.io/r ...

  4. TCP/IP分析

    TCP/IP四层模型 TCP/IP参考模型 ISO制定的OSI参考模型的过于庞大.复杂招致了许多批评.与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用.如图2-1所示,是TCP/I ...

  5. oracle中union和minus的用法【oracle技术】

    UNION是将两个或者两个以上的搜索结果集合并在一起!这个合并是有条件滴!记录的类型要匹配啦,记录的列数要一样啦!看看下面简单的例子: 有的朋友会说为什么要用union呢,直接用txt3 in ('I ...

  6. A*专题训练

    POJ2449 Remmarguts' Date UDF's capital consists of N stations. The hall is numbered S, while the sta ...

  7. swagger api 转graphql npm 包试用

    graphql 比较方便的进行api 的查询,操作,swagger 是一个方便的open api 描述标准,当前我们有比较多的 restapi 但是转换为graphql 是有成本的,还好swagger ...

  8. QQ空间点赞代码

    jQuery("a.qz_like_btn_v3[data-clicklog='like']").each(function(index,item){ console.log(it ...

  9. Hive之 hive-1.2.1 + hadoop 2.7.4 集群安装

    一. 相关概念 Hive Metastore有三种配置方式,分别是: Embedded Metastore Database (Derby) 内嵌模式Local Metastore Server 本地 ...

  10. git push 免密码

    git push 免密码 通用情况 使用ssh协议 git add 使用tab键自动补全的中文文件名乱码 jupyter notebook 创建密码 git push 免密码 通用情况 1.使用文件创 ...