码迷,mamicode.com
首页 > 其他好文 > 详细

Fragment 整个生命周期演示

时间:2014-05-23 00:18:29      阅读:485      评论:0      收藏:0      [点我收藏+]

标签:java   android   

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)从启动到显示整个界面:

bubuko.com,布布扣

 

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

bubuko.com,布布扣

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

当再次返回到这两个fragment

bubuko.com,布布扣

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


 bubuko.com,布布扣

 至此,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

Fragment 整个生命周期演示

标签:java   android   

原文地址:http://blog.csdn.net/linfeng24/article/details/26491407

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!