Fragment的父類有兩個,分別爲android.app.Fragment和android.support.v4.app.Fragment。建議使用android.support.v4.app.Fragment。由於此Fragment在全部的android版本中能夠保持一致。java
在builid.gradle中添加了appcompat-v7庫,v4也一塊兒被添加了。因此不用重複添加android
注意:在使用<fragment>標籤在佈局中添加fragment的時候,必定要設置id屬性,不然會出現問題app
注意:fragment所要佔據的位置,不能夠使用<fragment>標籤。不然沒法達到想要的效果ide
a、建立待添加的fragment實例佈局
b、獲取FragmentManager,能夠調用Activity對象的getSupportFragmentManager()gradle
c、開啓一個事務,經過調用fragmentManager對象的beginTransaction()開啓ui
d、向容器中添加或者替換fragment,調用replace()this
e、提交事務。調用commit()spa
具體的代碼:code
/** * * @param flag 是否將fragment添加到BackStack中 * 以實現相似於Activity返回鍵,能夠返回上一個Activity的效果 * @param fragment 新fragment */ public void replaceFragment(boolean flag,Fragment fragment){ FragmentManager fragmentManager = this.getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.fragment_simple,fragment); if(flag) { fragmentTransaction.addToBackStack(null); } fragmentTransaction.commit(); }
對於效果的說明:
相似於Activity,點擊返回鍵,能夠返回到上一個Activity
具體的實現方法:
在動態添加fragment後,調用fragmentTransaction.addToBackStack(null)便可
a、在Activity中,使用FragmentManager對象的fragmentManager.findFragmentById()方法便可
b、在Fragment中,調用getActivity()得到Activity對象
c、Fragment之間,能夠調用getActivity()得到Activity對象,而後在經過Activity對象使用FragmentManager對象的fragmentManager.findFragmentById()
a、運行狀態:Fragment與Activity都處於運行狀態
b、暫停狀態:Activity處於暫停狀態,或者是另外一個未佔滿屏幕的Activity位於棧頂,Fragment也處於暫停狀態
c、中止狀態:Activity處於中止狀態,Fragment也處於中止狀態。或者是Fragment被顯示調用replace或remove方法,從Activity中移除,並調用了addToBackStack(null)。處於中止狀態的Fragment對用戶不可見,可能會被銷燬。
d、銷燬狀態:Activity被銷燬,與之關聯的Fragment也會被銷燬。或者Fragment被顯示調用replace或者remove方法,並無調用addToBackStack(null)
參考地址:https://developer.android.com/guide/components/fragments?hl=zh-cn
保存數據:調用onSaveInstanceState()方法
恢復數據:調用onCreate()、onCreateView()和onActivityCreated()方法