首页 > 代码库 > Fragment生命周期(转)
Fragment生命周期(转)
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