COCO的android学习之路第2章(7)—Fragment生命周期以及fragment之间的数据传递

在看本文前,请参考这篇讲解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输出,如下:

1 2 3 4

总结下,我们发现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的布局文件加入一些组件

5

5_2

 

2:对Fragment2重写onStart()方法,用来加入对Fragment2上面的按钮的监听事件;6

7

8

3:下面便是演示的效果,点击Fragment2的按钮,然后获取到Fragment1中的TextView内容并通过Toast来显示。9

10学完这节要掌握的是:

1:Fragment的生命周期;

2:Fragment之间如何数据传递;

3:Fragment2中的按键监听事件通过匿名内部类来实现,也是一种新的按键click事件处理方法。

 

文章的脚注信息由WordPress的wp-posturl插件自动生成



|2|left
打赏

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: