首先這裏不準備論述fragment和activity的具體定義,用法和概念。只是建立在瞭解這兩個東西的基礎上談區別。
在理解二者之間的區別的時候,只需要不斷的問自己一個問題,就是fragment能做到的Activity能做到嗎?可以做到的話沒問題,不可以做到的話,爲什麼不可以呢?這個爲什麼就是區別。先來看兩者的生命週期,這個不必多說。
1.fragment顯得更加靈活。可以直接在XML文件中添加<fragment/>,Activity則不能。
eg:
<fragment
Android:id="@+id/left_fragment"
Android:name="com.example.fragmenttest.LeftFragment"
…
…
…/>
<fragment
Android:id="@+id/right_fragment"
Android:name="com.example.fragmenttest.rightFragment"
…
…
…/>
2.可以在一個界面上靈活的替換一部分頁面,Activity不可以,做不到。
替換的時候注意要將這個fragment放在返回棧上。
3.fragment和Activity之間的通信:(也就是控件的相互操控)
fragment控制fragment:得到一個Activity,然後通過這個Activity的getFragmentManager()獲得該Fragment的實例。
fragment控制Activity:這個很簡單。每個Fragment都有getActivity()得到一個Activity。
MainActivity activity=getActivity();
Activity控制fragment:xxxFragment xxx=getFragmentManager().findFragmentById();
Activity控制Activity:這個顯然是通過Intent Activity之間的通信完成。別忘了在被打開的活動中創建Intent和得到Intent一起進行,寫個靜態的actionStart()。
4.fragment和Activity中控件的加載
Fragment的載入是通過OnCreateView的時候通過inflater.inflate()加載佈局,然後通過修改main.xml,在main.xml上增加註冊fragment標籤,然後通過android:name來載入你已經通過inflater加載的隱藏佈局。
有幾個關鍵點:fragment是通過inflater加載View然後在main.xml中註冊得到的。當然如果你可以在fragment中得到View那就可以通過View.findViewId()來操控fragment上的具體控件。
5.動態加載不同的fragment:
首先,監聽你的按鈕。
1.創建待加載fragment的實例
2.得到FragmentManager,在活動中可以直接調用getFragmentManager()方法獲得。
3.調用Manager的BeginTansation()
4.用replace()改變不同的Fragment
5.commit事務。
6.碎片的生命週期