Fragment 整个生命周期演示

来源:互联网 发布:php rsasig 编辑:程序博客网 时间:2024/05/22 17:49
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的生命周期一览无余。

代码如下:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public class MyFragment1 extends Fragment  
  2. {  
  3.     private Button button1;  
  4.     @Override  
  5.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  6.             Bundle savedInstanceState)  
  7.     {  
  8.         Log.d("Fragment1""onCreateView");  
  9.   
  10.         View view = inflater.inflate(R.layout.my_fragment1, null);  
  11.         Log.d("Fragment1_onCreateView_getActivity_edittext1",  
  12.                 String.valueOf(getActivity().findViewById(R.id.edittext1)));  
  13.         Log.d("Fragment1_onCreateView_view_edittext1",  
  14.                 String.valueOf(view.findViewById(R.id.edittext1)));  
  15.         button1 = (Button)view.findViewById(R.id.button1);  
  16.   
  17.         button1.setOnClickListener(new OnClickListener() {  
  18.               
  19.             @Override  
  20.             public void onClick(View v) {  
  21.                 // TODO Auto-generated method stub  
  22.                 Intent intent = new Intent(getActivity(), MainActivity.class);  
  23.                 startActivity(intent);  
  24.             }  
  25.         });  
  26.         return view;  
  27.     }  
  28.   
  29.     @Override  
  30.     public void onInflate(Activity activity, AttributeSet attrs,  
  31.             Bundle savedInstanceState)  
  32.     {  
  33.   
  34.         Log.d("Fragment1""onInflate");  
  35.         Log.d("Fragment1_onInflate_activity_stringResource", activity  
  36.                 .getResources().getString(R.string.app_name));  
  37.         Log.d("Fragment1_onInflate_class",  
  38.                 attrs.getAttributeValue(null"class"));  
  39.         Log.d("Fragment1_onInflate_getActivity", String.valueOf(getActivity()));  
  40.         Log.d("Fragment1_onInflate_activity_edittext1",  
  41.                 String.valueOf(activity.findViewById(R.id.edittext1)));  
  42.         Log.d("Fragment1_onInflate_savedInstanceState",  
  43.                 String.valueOf(savedInstanceState));  
  44.         super.onInflate(activity, attrs, savedInstanceState);  
  45.     }  
  46.   
  47.     @Override  
  48.     public void onAttach(Activity activity)  
  49.     {  
  50.         Log.d("Fragment1""onAttach");  
  51.         Log.d("Fragment1_onAttach_activity_edittext1",  
  52.                 String.valueOf(activity.findViewById(R.id.edittext1)));  
  53.         Log.d("Fragment1_onAttach_getActivity_edittext1",  
  54.                 String.valueOf(getActivity().findViewById(R.id.edittext1)));  
  55.         super.onAttach(activity);  
  56.     }  
  57.   
  58.     @Override  
  59.     public void onCreate(Bundle savedInstanceState)  
  60.     {  
  61.         Log.d("Fragment1""onCreate");  
  62.         Log.d("Fragment1_onCreate_getActivity", String.valueOf(getActivity()));  
  63.         super.onCreate(savedInstanceState);  
  64.           
  65.     }  
  66.   
  67.     @Override  
  68.     public void onViewCreated(View view, Bundle savedInstanceState)  
  69.     {  
  70.         Log.d("Fragment1""onViewCreated");  
  71.         Log.d("Fragment1_onViewCreated_getActivity_edittext1",  
  72.                 String.valueOf(getActivity().findViewById(R.id.edittext1)));  
  73.         Log.d("Fragment1_onViewCreated_view_edittext1",  
  74.                 String.valueOf(view.findViewById(R.id.edittext1)));  
  75.   
  76.         super.onViewCreated(view, savedInstanceState);  
  77.     }  
  78.   
  79.     @Override  
  80.     public void onActivityCreated(Bundle savedInstanceState)  
  81.     {  
  82.         Log.d("Fragment1""onActivityCreated");  
  83.         Log.d("Fragment1_onActivityCreated_getActivity_edittext1",  
  84.                 String.valueOf(getActivity().findViewById(R.id.edittext1)));  
  85.         super.onActivityCreated(savedInstanceState);  
  86.     }  
  87.   
  88.     @Override  
  89.     public void onStart()  
  90.     {  
  91.         Log.d("Fragment1""onStart");  
  92.         super.onStart();  
  93.     }  
  94.   
  95.     @Override  
  96.     public void onResume()  
  97.     {  
  98.         Log.d("Fragment1""onResume");  
  99.         super.onResume();  
  100.     }  
  101.   
  102.     @Override  
  103.     public void onPause()  
  104.     {  
  105.         Log.d("Fragment1", System.currentTimeMillis()+"onPause");  
  106.         super.onPause();  
  107.     }  
  108.   
  109.     @Override  
  110.     public void onStop()  
  111.     {  
  112.         Log.d("Fragment1", System.currentTimeMillis()+"onStop");  
  113.           
  114.         super.onStop();  
  115.     }  
  116.   
  117.     @Override  
  118.     public void onDestroyView()  
  119.     {  
  120.         Log.d("Fragment1""onDestroyView");  
  121.         super.onDestroyView();  
  122.     }  
  123.   
  124.     @Override  
  125.     public void onDestroy()  
  126.     {  
  127.         Log.d("Fragment1", System.currentTimeMillis()+"onDestroy");  
  128.         super.onDestroy();  
  129.     }  
  130.   
  131.     @Override  
  132.     public void onDetach()  
  133.     {  
  134.         Log.d("Fragment1""onDetach");  
  135.         super.onDetach();  
  136.     }  
  137.   
  138. }  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public class MyFragment1 extends Fragment  
  2. {  
  3.     private Button button1;  
  4.     @Override  
  5.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  6.             Bundle savedInstanceState)  
  7.     {  
  8.         Log.d("Fragment1""onCreateView");  
  9.   
  10.         View view = inflater.inflate(R.layout.my_fragment1, null);  
  11.         Log.d("Fragment1_onCreateView_getActivity_edittext1",  
  12.                 String.valueOf(getActivity().findViewById(R.id.edittext1)));  
  13.         Log.d("Fragment1_onCreateView_view_edittext1",  
  14.                 String.valueOf(view.findViewById(R.id.edittext1)));  
  15.         button1 = (Button)view.findViewById(R.id.button1);  
  16.   
  17.         button1.setOnClickListener(new OnClickListener() {  
  18.               
  19.             @Override  
  20.             public void onClick(View v) {  
  21.                 // TODO Auto-generated method stub  
  22.                 Intent intent = new Intent(getActivity(), MainActivity.class);  
  23.                 startActivity(intent);  
  24.             }  
  25.         });  
  26.         return view;  
  27.     }  
  28.   
  29.     @Override  
  30.     public void onInflate(Activity activity, AttributeSet attrs,  
  31.             Bundle savedInstanceState)  
  32.     {  
  33.   
  34.         Log.d("Fragment1""onInflate");  
  35.         Log.d("Fragment1_onInflate_activity_stringResource", activity  
  36.                 .getResources().getString(R.string.app_name));  
  37.         Log.d("Fragment1_onInflate_class",  
  38.                 attrs.getAttributeValue(null"class"));  
  39.         Log.d("Fragment1_onInflate_getActivity", String.valueOf(getActivity()));  
  40.         Log.d("Fragment1_onInflate_activity_edittext1",  
  41.                 String.valueOf(activity.findViewById(R.id.edittext1)));  
  42.         Log.d("Fragment1_onInflate_savedInstanceState",  
  43.                 String.valueOf(savedInstanceState));  
  44.         super.onInflate(activity, attrs, savedInstanceState);  
  45.     }  
  46.   
  47.     @Override  
  48.     public void onAttach(Activity activity)  
  49.     {  
  50.         Log.d("Fragment1""onAttach");  
  51.         Log.d("Fragment1_onAttach_activity_edittext1",  
  52.                 String.valueOf(activity.findViewById(R.id.edittext1)));  
  53.         Log.d("Fragment1_onAttach_getActivity_edittext1",  
  54.                 String.valueOf(getActivity().findViewById(R.id.edittext1)));  
  55.         super.onAttach(activity);  
  56.     }  
  57.   
  58.     @Override  
  59.     public void onCreate(Bundle savedInstanceState)  
  60.     {  
  61.         Log.d("Fragment1""onCreate");  
  62.         Log.d("Fragment1_onCreate_getActivity", String.valueOf(getActivity()));  
  63.         super.onCreate(savedInstanceState);  
  64.           
  65.     }  
  66.   
  67.     @Override  
  68.     public void onViewCreated(View view, Bundle savedInstanceState)  
  69.     {  
  70.         Log.d("Fragment1""onViewCreated");  
  71.         Log.d("Fragment1_onViewCreated_getActivity_edittext1",  
  72.                 String.valueOf(getActivity().findViewById(R.id.edittext1)));  
  73.         Log.d("Fragment1_onViewCreated_view_edittext1",  
  74.                 String.valueOf(view.findViewById(R.id.edittext1)));  
  75.   
  76.         super.onViewCreated(view, savedInstanceState);  
  77.     }  
  78.   
  79.     @Override  
  80.     public void onActivityCreated(Bundle savedInstanceState)  
  81.     {  
  82.         Log.d("Fragment1""onActivityCreated");  
  83.         Log.d("Fragment1_onActivityCreated_getActivity_edittext1",  
  84.                 String.valueOf(getActivity().findViewById(R.id.edittext1)));  
  85.         super.onActivityCreated(savedInstanceState);  
  86.     }  
  87.   
  88.     @Override  
  89.     public void onStart()  
  90.     {  
  91.         Log.d("Fragment1""onStart");  
  92.         super.onStart();  
  93.     }  
  94.   
  95.     @Override  
  96.     public void onResume()  
  97.     {  
  98.         Log.d("Fragment1""onResume");  
  99.         super.onResume();  
  100.     }  
  101.   
  102.     @Override  
  103.     public void onPause()  
  104.     {  
  105.         Log.d("Fragment1", System.currentTimeMillis()+"onPause");  
  106.         super.onPause();  
  107.     }  
  108.   
  109.     @Override  
  110.     public void onStop()  
  111.     {  
  112.         Log.d("Fragment1", System.currentTimeMillis()+"onStop");  
  113.           
  114.         super.onStop();  
  115.     }  
  116.   
  117.     @Override  
  118.     public void onDestroyView()  
  119.     {  
  120.         Log.d("Fragment1""onDestroyView");  
  121.         super.onDestroyView();  
  122.     }  
  123.   
  124.     @Override  
  125.     public void onDestroy()  
  126.     {  
  127.         Log.d("Fragment1", System.currentTimeMillis()+"onDestroy");  
  128.         super.onDestroy();  
  129.     }  
  130.   
  131.     @Override  
  132.     public void onDetach()  
  133.     {  
  134.         Log.d("Fragment1""onDetach");  
  135.         super.onDetach();  
  136.     }  
  137.   
  138. }  


演示Demo 下载


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

 

0 0
原创粉丝点击