`
lj_gzy2014
  • 浏览: 16590 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Fragment的生命周期

 
阅读更多



 

                  自从android4.0之后,fragment就被广泛使用,我们知道Fragment与Activity有所不同,也有相似之处。Activity有生命周期,Fragment也有生命周期,了解了Fragmnet的生命周期,我们才能在控制程序时游刃有余。

           先来看看官方给出的fragment的生命周期图:

 

        从上面可以看出Fragment有11个状态,测试代码如下:

public class RightFragment extends  Fragment{
	public static final String TAG = "RightFragment";

	@Override
	public void onAttach(Activity activity) {
		super.onAttach(activity);
		Log.d(TAG, "onAttach");
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Log.d(TAG, "onCreate");
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		Log.d(TAG, "onCreateView");
		View view = inflater.inflate(R.layout.right_fragment, container, false);
		return view;
	}

	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		super.onActivityCreated(savedInstanceState);
		Log.d(TAG, "onActivityCreated");
	}

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

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

	@Override
	public void onPause() {
		super.onPause();
		Log.d(TAG, "onPause");
	}

	@Override
	public void onStop() {
		super.onStop();
		Log.d(TAG, "onStop");
	}

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

	@Override
	public void onDestroy() {
		super.onDestroy();
		Log.d(TAG, "onDestroy");
	}

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


}

 运行程序,控制台输出:

跳到别的fragment时:


 

 

再次启动fragment时:(注意这里你不是按回退键)

      

Fragment之间是独立的,那么如何实现切换时前一个Fragment就会销毁,再次启动时,重新创建。那么如何实现类似activity的回退效果呢?

看下面的代码:

     Fragment1 fragment1 = new Fragment1();
     FragmentManager fragmentManager1 = getFragmentManager();
     FragmentTransaction transaction1 = fragmentManager1. beginTransaction();
     transaction1.replace(R.id.right_layout, fragment1);
     transaction1.addToBackStack(null);
     transaction1.commit();

实现回退效果,就需要添加 transaction1.addToBackStack(null);这一句,那么切换Fragment时,fragment不是被销毁,而是进入回退栈,当点击回退键时,栈顶fragment被销毁,之前的fragment替代栈顶fragment,显示在界面上。

   有了activity的生命周期作为基础,Fragment的生命周期就容易理解多了。接下来就可以愉快的和代码玩耍了!

  • 大小: 14.2 KB
  • 大小: 16.5 KB
  • 大小: 7.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics