在看本文前,请参考这篇讲解Activity生命周期的博客:
COCO的android学习之路第2章(1)—活动的生命周期
http://www.jyguagua.com/?p=1464
这一节我们主要来探索下fragment的生命周期,同样的,在上一节的代码中,我们对Fragment1.java加入如下代码,重写父类的方法,代码如下:
1:重写父类的onActivityCreated,onAttach,onCreate,onDestroy,onDestroyView,onDetach方法;
package com.example; import com.example.fragments.R; 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; public class Fragment1 extends Fragment { String tag = "fragment1"; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.d(tag, "onCreateView"); // TODO Auto-generated method stub return inflater.inflate(R.layout.fragment1, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { Log.d(tag, "onActivityCreated"); // TODO Auto-generated method stub super.onActivityCreated(savedInstanceState); } @Override public void onAttach(Activity activity) { Log.d(tag, "onAttach"); // TODO Auto-generated method stub super.onAttach(activity); } @Override public void onCreate(Bundle savedInstanceState) { Log.d(tag, "onCreate"); // TODO Auto-generated method stub super.onCreate(savedInstanceState); } @Override public void onDestroy() { Log.d(tag, "onDestroy"); // TODO Auto-generated method stub super.onDestroy(); } @Override public void onDestroyView() { Log.d(tag, "onDestroyView"); // TODO Auto-generated method stub super.onDestroyView(); } @Override public void onDetach() { Log.d(tag, "onDetach"); // TODO Auto-generated method stub super.onDetach(); } @Override public void onPause() { Log.d(tag, "onPause"); // TODO Auto-generated method stub super.onPause(); } @Override public void onResume() { Log.d(tag, "onResume"); // TODO Auto-generated method stub super.onResume(); } @Override public void onStart() { Log.d(tag, "onStart"); // TODO Auto-generated method stub super.onStart(); } @Override public void onStop() { Log.d(tag, "onStop"); // TODO Auto-generated method stub super.onStop(); } }
2:运行程序,然后我们在模拟器分别点击home键,点击返回键然后观察log输出,如下:
总结下,我们发现fragment的生命周期是这样的:
当创建一个Fragment的时候,会调用如下函数:
➤ onAttach()
➤ onCreate()
➤ onCreateView()
➤ onActivityCreated()
当Fragment被切换至后台不可见的话,调用如下:
➤ onStart()
➤ onResume()
当Fragment从后台重新调到前台时,调用如下:
➤ onPause()
➤ onStop()
当Fragment被返回键销毁时调用如下:
➤ onPause()
➤ onStop()
➤ onDestroyView()
➤ onDestroy()
➤ onDetach()
然后下面我们再来演示下fragment之间的组件数据信息传递,我们需要做的是在Fragment2的界面放置一个按钮,然后将Fragment1中的一个label上内容获取到,具体方法如下所示:
1:对Fragment1,fragment2的布局文件加入一些组件
2:对Fragment2重写onStart()方法,用来加入对Fragment2上面的按钮的监听事件;
3:下面便是演示的效果,点击Fragment2的按钮,然后获取到Fragment1中的TextView内容并通过Toast来显示。
1:Fragment的生命周期;
2:Fragment之间如何数据传递;
3:Fragment2中的按键监听事件通过匿名内部类来实现,也是一种新的按键click事件处理方法。
文章的脚注信息由WordPress的wp-posturl插件自动生成