1.Fragment的生命週期:java
簡單在新建一個MyFragment繼承自Fragment,重寫各個生命週期回調方法,各個方法中直接輸出標識相關函數被調用的信息。android
重寫MainActivity的各個生命週期回調方法,一樣輸出標識信息。ide
MyFragment.java:函數
1 public class MyFragment extends Fragment { 2 3 @Override 4 5 public void onActivityCreated(Bundle savedInstanceState) { 6 7 // TODO Auto-generated method stub 8 9 super.onActivityCreated(savedInstanceState); 10 11 Log.i("FRAGMENT","onActivityCreated()"); 12 13 } 14 15 @Override 16 17 public View onCreateView(LayoutInflater inflater, ViewGroup container, 18 19 Bundle savedInstanceState) { 20 21 // TODO Auto-generated method stub 22 23 Log.i("FRAGMENT","onCreateView()"); 24 25 TextView textView = new TextView(getActivity()); 26 27 textView.setText("This is a fragment"); 28 29 return textView; 30 31 } 32 33 @Override 34 35 public void onDestroyView() { 36 37 // TODO Auto-generated method stub 38 39 super.onDestroyView(); 40 41 Log.i("FRAGMENT","onDestroyView()"); 42 43 } 44 45 @Override 46 47 public void onAttach(Activity activity) { 48 49 // TODO Auto-generated method stub 50 51 super.onAttach(activity); 52 53 Log.i("FRAGMENT","onAttach()"); 54 55 } 56 57 @Override 58 59 public void onCreate(Bundle savedInstanceState) { 60 61 // TODO Auto-generated method stub 62 63 super.onCreate(savedInstanceState); 64 65 Log.i("FRAGMENT","onCreate()"); 66 67 } 68 69 @Override 70 71 public void onStart() { 72 73 // TODO Auto-generated method stub 74 75 super.onStart(); 76 77 Log.i("FRAGMENT","onStart()"); 78 79 } 80 81 @Override 82 83 public void onResume() { 84 85 // TODO Auto-generated method stub 86 87 super.onResume(); 88 89 Log.i("FRAGMENT","onResume()"); 90 91 } 92 93 @Override 94 95 public void onPause() { 96 97 // TODO Auto-generated method stub 98 99 super.onPause(); 100 101 Log.i("FRAGMENT","onPause()"); 102 103 } 104 105 @Override 106 107 public void onStop() { 108 109 // TODO Auto-generated method stub 110 111 super.onStop(); 112 113 Log.i("FRAGMENT","onStop()"); 114 115 } 116 117 @Override 118 119 public void onDestroy() { 120 121 // TODO Auto-generated method stub 122 123 super.onDestroy(); 124 125 Log.i("FRAGMENT","onDestroy()"); 126 127 } 128 129 @Override 130 131 public void onDetach() { 132 133 // TODO Auto-generated method stub 134 135 super.onDetach(); 136 137 Log.i("FRAGMENT","onDetach()"); 138 139 } 140 141 }
注意:onCreateView()方法中需返回一個View對象。佈局
MainActivity.java:學習
1 public class MainActivity extends ActionBarActivity { 2 3 @Override 4 5 protected void onCreate(Bundle savedInstanceState) { 6 7 super.onCreate(savedInstanceState); 8 9 setContentView(R.layout.activity_main); 10 11 Log.i("ACTIVITY","onCreate()"); 12 13 } 14 15 @Override 16 17 protected void onStop() { 18 19 // TODO Auto-generated method stub 20 21 super.onStop(); 22 23 Log.i("ACTIVITY","onStop()"); 24 25 } 26 27 @Override 28 29 protected void onDestroy() { 30 31 // TODO Auto-generated method stub 32 33 super.onDestroy(); 34 35 Log.i("ACTIVITY","onDestroy()"); 36 37 } 38 39 @Override 40 41 protected void onPause() { 42 43 // TODO Auto-generated method stub 44 45 super.onPause(); 46 47 Log.i("ACTIVITY","onPause()"); 48 49 } 50 51 @Override 52 53 protected void onResume() { 54 55 // TODO Auto-generated method stub 56 57 super.onResume(); 58 59 Log.i("ACTIVITY","onResume()"); 60 61 } 62 63 @Override 64 65 protected void onStart() { 66 67 // TODO Auto-generated method stub 68 69 super.onStart(); 70 71 Log.i("ACTIVITY","onStart()"); 72 73 } 74 75 @Override 76 77 protected void onRestart() { 78 79 // TODO Auto-generated method stub 80 81 super.onRestart(); 82 83 Log.i("ACTIVITY","onRestart()"); 84 85 } 86 87 }
佈局文件:this
1 <fragment 2 3 android:id="@+id/frag" 4 5 android:name="cn.csc.fragment.MyFragment" 6 7 android:layout_width="wrap_content" 8 9 android:layout_height="wrap_content"/>
注意,添加的fragment須要經過name屬性指定本身新建的fragment的權限定名。spa
運行結果:3d
按下模擬器的BACK按鈕:code
中間插入了dalvik的垃圾回收,不過總體的順序是沒有改變的:
整個生命週期各個回調函數的調用過程以下:
顯示到前臺:
MyFragment onAttach() 附加到activity上
MyFragment onCreate() fragment建立
MyFragment onCreateView() fragment建立本身的視圖
MainActivity onCreate() activity建立
MyFragment onActivityCreated()
MainActivity onStart()
MyFragment onStart()
MainActivity onResume()
MyFragment onResume()
按後退鍵
MyFragment onPause()
MainActivity onPause()
MyFragment onStop()
MainActivity onStop()
MyFragment onDestoryView() 銷燬掉本身的視圖
MyFragment onDestory()
MyFragment onDetach() 解除和activity的關係
MainActivity onDetory()
2.一個簡單的兩個Fragmet聯繫的示例,點擊其中一個另外一個發生變化:
1)新建MyFragment繼承自ListFragment:
public class MyFragment extends ListFragment { @Override public void onActivityCreated(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onActivityCreated(savedInstanceState); setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_activated_1, android.R.id.text1, new String[]{"6:00","6:30","7:20","8:00","8:40"})); } @Override public void onListItemClick(ListView l, View v, int position, long id) { // TODO Auto-generated method stub super.onListItemClick(l, v, position, id); //設置爲單選模式,單擊選中 getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); getListView().setItemChecked(position, true); FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); Fragment fr = new TmpFragment(position); ft.replace(R.id.frame, fr); ft.commit(); } }
2)新建TmpFragment繼承自Fragment:
1 public class TmpFragment extends Fragment { 2 3 private int index; 4 5 private static String[] items = new String[]{"起牀洗漱","打拳散步","吃早飯","等公交","打卡"}; 6 7 public TmpFragment(int index) { 8 9 super(); 10 11 this.index = index; 12 13 } 14 15 @Override 16 17 public View onCreateView(LayoutInflater inflater, ViewGroup container, 18 19 Bundle savedInstanceState) { 20 21 // TODO Auto-generated method stub 22 23 TextView tv = new TextView(getActivity()); 24 25 tv.setText(items[index]); 26 27 return tv; 28 29 } 30 31 }
3)佈局文件:
1 <fragment 2 3 android:id="@+id/frag" 4 5 android:name="cn.csc.fragment1.MyFragment" 6 7 android:layout_width="0dp" 8 9 android:layout_height="match_parent" 10 11 android:layout_weight="1" 12 13 /> 14 15 <FrameLayout 16 17 android:id="@+id/frame" 18 19 android:layout_width="0dp" 20 21 android:layout_height="wrap_content" 22 23 android:layout_weight="1"> 24 25 </FrameLayout>
4)運行結果:
以上就是Fragment的簡單學習,須要時再認真學下……