您的位置:首页 > 其它

Fragment的生命周期

2015-06-03 12:51 134 查看



 

                  自从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的生命周期就容易理解多了。接下来就可以愉快的和代码玩耍了!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: