Fragment 整个生命周期演示

Fragment生命周期主要体现在以下表中13个方法里,以下是按照Fragment从开始到销毁的先后执行顺序排序。


序号


方法名称


描述


1


public void onInflate(Activity activity, AttributeSet attrs,BundlesavedInstanceState)


在Activity.onCreate方法之前调用,可以获取除了View之外的资源


2


public void onAttach(Activity activity)


当fragment第一次与Activity产生关联时就会调用,以后不再调用


3


public void onCreate(Bundle savedInstanceState)


在onAttach执行完后会立刻调用此方法,通常被用于读取保存的状态值,获取或者初始化一些数据,但是该方法不执行,窗口是不会显示的,因此如果获取的数据需要访问网络,最好新开线程。


4


public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState)


作用:创建Fragment中显示的view,其中inflater用来装载布局文件,container表示<fragment>标签的父标签对应的ViewGroup对象,savedInstanceState可以获取Fragment保存的状态


5


public void onViewCreated(View view, Bundle savedInstanceState)


继上面后就会调用此方法


6


public void onActivityCreated(Bundle savedInstanceState)


在Activity.onCreate方法调用后会立刻调用此方法,表示窗口已经初始化完毕,此时可以调用控件了


7


public void onStart()


开始执行与控件相关的逻辑代码,如按键点击


8


public void onResume()


这是Fragment从创建到显示的最后一个回调的方法


9


public void onPause()


当发生界面跳转时,临时暂停,暂停时间是500ms,0.5s后直接进入下面的onStop方法


10


public void onStop()


当该方法返回时,Fragment将从屏幕上消失


11


public void onDestroyView()


当fragment状态被保存,或者从回退栈弹出,该方法被调用


12


public void onDestroy()


当Fragment不再被使用时,如按返回键,就会调用此方法


13


public void onDetach()


Fragment生命周期的最后一个方法,执行完后将不再与Activity关联,将释放所有fragment对象和资源

下面进行一个demo来观察fragment生命周期,

(1)从启动到显示整个界面:

点击跳转到第二个Actvity时的情况——

可以看到,依次调用onPause() 和
onStop()方法;观察其时间,可以发现就是相差500ms ;

当再次返回到这两个fragment

当点击返回键,直接回到主界面时,可以看到fragment销毁并退出了

至此,Fragment的生命周期一览无余。

代码如下:

public class MyFragment1 extends Fragment
{
	private Button button1;
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState)
	{
		Log.d("Fragment1", "onCreateView");

		View view = inflater.inflate(R.layout.my_fragment1, null);
		Log.d("Fragment1_onCreateView_getActivity_edittext1",
				String.valueOf(getActivity().findViewById(R.id.edittext1)));
		Log.d("Fragment1_onCreateView_view_edittext1",
				String.valueOf(view.findViewById(R.id.edittext1)));
		button1 = (Button)view.findViewById(R.id.button1);

		button1.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(getActivity(), MainActivity.class);
				startActivity(intent);
			}
		});
		return view;
	}

	@Override
	public void onInflate(Activity activity, AttributeSet attrs,
			Bundle savedInstanceState)
	{

		Log.d("Fragment1", "onInflate");
		Log.d("Fragment1_onInflate_activity_stringResource", activity
				.getResources().getString(R.string.app_name));
		Log.d("Fragment1_onInflate_class",
				attrs.getAttributeValue(null, "class"));
		Log.d("Fragment1_onInflate_getActivity", String.valueOf(getActivity()));
		Log.d("Fragment1_onInflate_activity_edittext1",
				String.valueOf(activity.findViewById(R.id.edittext1)));
		Log.d("Fragment1_onInflate_savedInstanceState",
				String.valueOf(savedInstanceState));
		super.onInflate(activity, attrs, savedInstanceState);
	}

	@Override
	public void onAttach(Activity activity)
	{
		Log.d("Fragment1", "onAttach");
		Log.d("Fragment1_onAttach_activity_edittext1",
				String.valueOf(activity.findViewById(R.id.edittext1)));
		Log.d("Fragment1_onAttach_getActivity_edittext1",
				String.valueOf(getActivity().findViewById(R.id.edittext1)));
		super.onAttach(activity);
	}

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		Log.d("Fragment1", "onCreate");
		Log.d("Fragment1_onCreate_getActivity", String.valueOf(getActivity()));
		super.onCreate(savedInstanceState);

	}

	@Override
	public void onViewCreated(View view, Bundle savedInstanceState)
	{
		Log.d("Fragment1", "onViewCreated");
		Log.d("Fragment1_onViewCreated_getActivity_edittext1",
				String.valueOf(getActivity().findViewById(R.id.edittext1)));
		Log.d("Fragment1_onViewCreated_view_edittext1",
				String.valueOf(view.findViewById(R.id.edittext1)));

		super.onViewCreated(view, savedInstanceState);
	}

	@Override
	public void onActivityCreated(Bundle savedInstanceState)
	{
		Log.d("Fragment1", "onActivityCreated");
		Log.d("Fragment1_onActivityCreated_getActivity_edittext1",
				String.valueOf(getActivity().findViewById(R.id.edittext1)));
		super.onActivityCreated(savedInstanceState);
	}

	@Override
	public void onStart()
	{
		Log.d("Fragment1", "onStart");
		super.onStart();
	}

	@Override
	public void onResume()
	{
		Log.d("Fragment1", "onResume");
		super.onResume();
	}

	@Override
	public void onPause()
	{
		Log.d("Fragment1", System.currentTimeMillis()+"onPause");
		super.onPause();
	}

	@Override
	public void onStop()
	{
		Log.d("Fragment1", System.currentTimeMillis()+"onStop");

		super.onStop();
	}

	@Override
	public void onDestroyView()
	{
		Log.d("Fragment1", "onDestroyView");
		super.onDestroyView();
	}

	@Override
	public void onDestroy()
	{
		Log.d("Fragment1", System.currentTimeMillis()+"onDestroy");
		super.onDestroy();
	}

	@Override
	public void onDetach()
	{
		Log.d("Fragment1", "onDetach");
		super.onDetach();
	}

}

演示Demo 下载

使用Fragmen的好处就是可以把业务逻辑和UI封装在一起,与外部关联系不大,其他程序也可以用该组件,从而实现复用最大化。

Fragment 整个生命周期演示,布布扣,bubuko.com

时间: 2024-10-10 23:52:50

Fragment 整个生命周期演示的相关文章

Fragment传值为什么要通过setArguments()和Fragment的生命周期

在Fragment2中,新建一个函数:newInstance(String  text)来接收传过来的参数: 新建一个Fragment2实例,然后将参数通过SetArguments设置到其中: public static Fragment2 newInstance(String text) {        Fragment2 fragment = new Fragment2();        Bundle args = new Bundle();        args.putString(

Fragment的生命周期

Fragment的生命周期有11个,比Activity的生命周期会复杂不少,而且Fragment的生命周期同Activity的生命周期的穿插的执行的,看图: 其中背景为蓝色的为Activity的生命周期,其他的为Fragment周期,由图可以看出,在Fragment初始化完成前,相同的生命周期都是Activity先执行的,而进入销毁的周期时,就变成了Fragment的先执行. 1.  public void onAttach(Activity activity)方法 执行完该方法,Fragmen

【Android】11.4 Fragment及其生命周期

分类:C#.Android.VS2015: 创建日期:2016-02-22 一.简介 Android从3.0开始引入了fragment的概念,主要是为了支持在大屏幕上实现更为动态和灵活的UI设计,比如平板电脑等.由于平板电脑的屏幕要比手机屏幕大许多,这样就有更多的空间去组合和交换UI组件. 也许这样比喻你能更快地理解它:和WPF相比,如果将Activity的作用看作类似于WPF的Window或者Page:那么Fragments的作用就类似于WPF在Window或者Page中包含的一个或多个Fra

Fragment的生命周期&amp;同一Activity下不同Fragment之间的通信

Android开发:碎片Fragment完全解析(2) Fragment的生命周期 和Activity一样,Fragment也有自己的生命周期,理解Fragment的生命周期非常重要,我们通过代码的方式来瞧一瞧Fragment的生命周期是什么样的: 1 publicclass Fragment1 extends Fragment { 2 publicstaticfinal String TAG = "Fragment1"; 3 @Override 4 public View onCre

友盟页面统计 - 关于Viewpager中的Fragment的生命周期

Activity和Fragment各自理论上的生命周期 Activity的生命周期是较为经典也最清晰的.在此不表: Fragment从出现到广泛运用也有一段时间了.其标准生命周期也仅比Activity多出一些流程,如onCreateView(); Activity和Fragment在实际编码中必然是结合出现的,表现为Activity作为容器,装载有一个或若干个Fragment: 装载多个Fragment时,常常使用TabHost和Viewpager作为载体: 在实际编码中发现,Activity和

详解fragment(一):从源代码看fragment的生命周期

前面讲了那么多xml,我们缓一下,现在讲从代码角度来看fragment的创建. 我们通常会在FragmentActivity中通过如下方法: getSupportFragmentManager().beginTransaction().replace(R.id.content, fragment, tag).commit(); getSupportFragmentManager().beginTransaction().add(R.id.content, fragment, tag).commi

Activity和Fragment的生命周期

Activity和Fragment的生命周期

死磕 Fragment 的生命周期

死磕 Fragment 的生命周期 本文原创,转载请注明出处. 欢迎关注我的 简书 ,关注我的专题 Android Class 我会长期坚持为大家收录简书上高质量的 Android 相关博文. 本文例子中 github 地址: github 项目链接 曾经在北京拥挤的13号线地铁上,一名背着双肩包穿着格子衫带着鸭舌帽脚踏帆布鞋的程序员讲了一句: "我觉得 Fragment 真的太难用了".从而引起一阵躁动激烈的讨论. 正方观点: Fragment 真的太好用了.要知道因为 Activi

Android高级编程笔记(六)Fragment的生命周期

在上一篇博文中对Fragment做了简单的介绍,现在再来探讨一下Fragment的生命周期. 一.Fragment的几种状态: 与Activity类似,Fragment也有一下几种状态: · 活动状态:当前Fragment位于前台,可见,可获得焦点. · 暂停状态:其他Activity位于前台,该Fragment可见,不可获得焦点. · 停止状态:不可见,失去焦点. · 销毁状态:该Fragment被完全删除或被结束. 二.Fragment的回调方法: 在Fragment的生命周期中,有一下方法