碎片的生命周期

作者:追风剑情 发布于:2015-10-22 23:00 分类:Android

和活动一样,Android中的碎片也有自己的生命周期。

当碎片被创建时,会经历以下状态:

onAttach()

onCreate()

onCreateView()

onActivityCreated()

当碎片变得可见时,会经历以下状态:

onStart()

onResume()

当碎片进入后台模式时,会经历以下状态:

onPause()

onStop()

当碎片被销毁(它当前所在的活动被销毁)时,会经历以下状态:

onPause()

onStop()

onDestroyView()

onDestroy()

onDetach()

与活动一样,可以使用Bundle对象在以下状态中还原碎片的实例:

onCreate()

onCreateView()

onActivityCreated()

注意: 可以在onSaveInstanceState()方法中保存碎片的状态。

碎片经历的状态大多数与活动类似。但是,有一些新状态是碎片独有的:

onAttached()——当碎片与活动建立关联时调用。

onCreateView()——用于创建碎片的视图。

onActivityCreated——当活动的onCreate()方法被返回时调用。

onDestroyView()——当碎片的视图被移除时调用。

onDetach()——当碎片与活动的关联被移除时调用。

注意,活动与碎片之间存在一个主要的区别:当活动进入后台时,会被放到back stack中。这样当用户按Back按钮时,活动可以恢复。但是,碎片在进入后台时不会被自动放到back stack中。要实现这一目的,需要在碎片处理期间显式调用addToBackStack()方法。如:

fragmentTransaction.addToBackStack(null);

fragmentTransaction.commit();

这段代码确保了当把碎片添加到活动中后,用户可以单击Back按钮移除它。


示例代码:

  1. package com.example.androidtest;
  2.  
  3. import android.app.Activity;
  4. import android.app.Fragment;
  5. import android.os.Bundle;
  6. import android.util.Log;
  7. import android.view.LayoutInflater;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10.  
  11. public class Fragment1 extends Fragment{
  12. @Override
  13. public View onCreateView(LayoutInflater inflater,
  14. ViewGroup container,
  15. Bundle savedInstanceState)
  16. {
  17. Log.d("Fragment1", "onCreateView");
  18. return inflater.inflate(R.layout.fragment1, container, false);
  19. }
  20. @Override
  21. public void onAttach(Activity activity)
  22. {
  23. super.onAttach(activity);
  24. Log.d("Fragment1", "onAttach");
  25. }
  26. @Override
  27. public void onCreate(Bundle savedInstanceState)
  28. {
  29. super.onCreate(savedInstanceState);
  30. Log.d("Fragment1", "onCreate");
  31. }
  32. @Override
  33. public void onActivityCreated(Bundle savedInstanceState)
  34. {
  35. super.onActivityCreated(savedInstanceState);
  36. Log.d("Fragment1", "onActivityCreated");
  37. }
  38. @Override
  39. public void onStart()
  40. {
  41. super.onStart();
  42. Log.d("Fragment1", "onStart");
  43. }
  44. @Override
  45. public void onResume()
  46. {
  47. super.onResume();
  48. Log.d("Fragment1", "onResume");
  49. }
  50. @Override
  51. public void onPause()
  52. {
  53. super.onPause();
  54. Log.d("Fragment1", "onPause");
  55. }
  56. @Override
  57. public void onStop()
  58. {
  59. super.onStop();
  60. Log.d("Fragment1", "onStop");
  61. }
  62. @Override
  63. public void onDestroyView()
  64. {
  65. super.onDestroyView();
  66. Log.d("Fragment1", "onDestroyView");
  67. }
  68. @Override
  69. public void onDetach()
  70. {
  71. super.onDetach();
  72. Log.d("Fragment1", "onDetach");
  73. }
  74. }

标签: Android

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号