android菜鳥學習筆記27----Fragment的簡單使用

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的簡單學習,須要時再認真學下……

相關文章
相關標籤/搜索