1. 繼承關係
java.lang.Object
|____android.app.FragmentManager
2. 類概要
這個類提供了與Activity內部的Fragment對象進行互動的介面。
雖然FragmentManager的API是在HONEYCOMB的版本中被引入的,但是在舊的平台上還有一個通過FragmentActivity類來使用的API版本。
HONEYCOMB:http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#HONEYCOMB
3. 類說明
嵌套(內部)類
interface FragmentManager.BackStackEntry
代表了Fragment回退堆棧的一個項目實體,調用FragmentTransaction.addToBackStack()方法時會建立這個項目實體。
interface FragmentManager.OnBackStackChangedListener
觀察回退堆棧變化的介面
常量
public static final int POP_BACK_STACK_INCLUSIVE
針對popBackStack(String, int)和popBackStack(int, int)方法所設定的標記。如果在調用這兩個方法時,設定了這個標記,並且已經提供了回退堆棧中項目實體的名稱或ID,那麼堆棧中所有匹配的項目實體都會被消耗,直到沒有匹配的,或到達堆棧的底部為止。
常量值:1(0x00000001)
Public 構造器
FragmentManager()
Public 方法
public abstract void addOnBackStackChanageListener(FragmentManager.OnBackStackChangedListener)
添加一個新的監聽器,用於監聽Fragment回退堆棧的變化。
public abstract FragmentTransaction beginTransaction()
啟動一個跟FragmentManager關聯的一系列的與Fragment對象相關的編輯操作。
注意:一個Fragment事務只能在Activity儲存其狀態期間被建立/被提交。如果在Activity.onSaveInstanceState()方法調用之後,提交事務則會發生錯誤。這是因為系統架構需要儲存當前Fragment對象的狀態,並且如果在狀態儲存之後來改變Fragment,那麼改變的結果也會丟失。
public abstract void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args)
把FragmentManager的狀態列印輸出到給定的流中。
參數:
prefix--->在每行文本的前面要列印輸出的文本。
fd--->要輸出的轉存檔案的描述。
writer--->給轉存操作設定的一個PrintWriter對象。
args--->給轉存請求提供一組額外的參數。
public static void enableDebugLogging(boolean enabled)
控制是否開啟架構內Fragment管理器的調試日誌(log)。如果開啟調試日誌,那麼就會在Logcat中看到架構執行Fragment操作的日誌資訊。
public abstract boolean executePendingTransactions()
在用FragmentTransaction.commit()方法提交FragmentTransaction對象後,會在進程的主線程中,用非同步方式來執行。如果想要立即執行這個等待中的操作,就要調用這個方法(只能在主線程中調用)。要注意的是,所有的回調和相關的行為都會在這個調用中被執行完成,因此要仔細確認這個方法的調用位置。
傳回值:如果等待中的事務被執行,那麼就會返回true。
public abstract Fragment findFragmentById(int id)
這個方法用於尋找由給定的id所標識的那個Fragment對象。這個id既可以是源自布局填充時的XML,也可以是添加事務時的容器ID。這個方法首先會搜尋被添加到當前管理的Activity中的Fragment對象,如果沒有找到,它會搜尋當前回退堆棧中所有的Fragment對象,以便找到跟這個ID匹配的Fragment對象。
傳回值:如果找到,則返回一個Fragment對象,否則返回null。
public abstract Fragment findFragmentByTag(String tag)
這個方法用於尋找由給定的標籤所標識的一個Fragment對象,這個標籤既可以源自布局填充時XML,也可以是在添加事務時所提供的。這個方法首先會搜尋被添加到當前管理的Activity中的Fragment對象,如果沒有找到,它會搜尋當前回退堆棧中所有的Fragment對象,以便找到跟這個標籤匹配的Fragment對象。
傳回值:如果找到,則返回一個Fragment對象,否則返回null。
public abstract FragmentManager.BackStackEntry getBackStackEntryAt(int index)
這個方法返回回退堆棧中由index索引所標識的BackStackEntry對象,索引0指向堆棧底部的實體物件。
public abstract int getBackStackEntryCount()
返回回退堆棧中當前實體物件的數量。
public abstract Fragment getFragment(Bundle bundle, String key)
返回最近一次用putFragment(Bundle, String, Fragment)方法放置的Fragment對象執行個體。
參數:
bundle--->制指定要從哪個Bundle對象中擷取Fragment引用。
key--->指定Bundle對象中實體物件的名稱。
傳回值:返回跟給定引用關聯的當前Fragment對象執行個體。
public void invalidateOptionsMenu()
必要的時候,讓依附於Activity的選項菜單失效。直到Activity轉移到恢複(resumed)狀態,這種失效狀態才會被終止。
public abstract void popBackStack()
把頂部的狀態彈出回退堆棧。這個方法是非同步執行的。它會按照請求的順序來執行彈出操作,但是這個操作直到應用程式把控制權返回給事件迴圈之後,才能夠執行這個操作。
public abstract void popBackStack(String name, int flags)
從管理器的Fragment回退堆棧中把最後放入的由name參數所指定的Fragment對象彈出。這個函數是非同步,它會按照請求的順序來執行彈出操作,但是直到應用程式把控制權返回給事件迴圈之後,才會執行這個操作。
參數:
name--->如果這個參數是非空的,那麼就要在回退堆棧中尋找這個名稱所指向的Fragment對象。如果找到,那麼這個狀態之上的所有狀態都會被彈出。POP_BACK_STACK_INCLUSIVE標記能夠用於控制命名狀態本身是否要被彈出。如果這個參數是null,則只有頂部狀態會被彈出。
flags--->既可以是0,也可以是POP_BACK_STACK_INCLUSIVE。
public abstract void popBackStack(int id, int flags)
把給定ID標識所指定的狀態之上的所有狀態都彈出回退堆棧。這個方法是非同步,它會按照請求的順序來執行彈出操作。但是直到應用程式把控制權返回個事件迴圈之後才會執行這個操作。
參數:
id--->這個參數設定了要彈出的狀態的標識。如果被標識的狀態不存在,則什麼也不做。POP_BACK_STACK_INCLUSIVE標記能夠用於控制id所標識的狀態本身是否會被彈出堆棧。
flags--->即可以是0,也可以是POP_BACK_STACK_INCLUSIVE。
public abstract boolean popBackStackImmediate(int id, int flags)
與popBackStack(int, int)方法類似,但是在這個調用的內部,會立即執行彈出操作。就像調用executePendingTransactions()方法之後的效果一樣。
傳回值:如果彈出了某些狀態,則返回true,否則返回false。
public abstract boolean popBackStackImmediate(String name, int flags)
與popBackStack(String, int)方法類似,但是在這個調用的內部,會立即執行彈出操作。就像調用executePendingTransactions()方法之後的效果一樣。
傳回值:如果彈出了某些狀態,則返回true,否則返回false。
public abstract boolean popBackStackImmediate()
與popBackStack()方法類似,但是在這個調用的內部,會立即執行彈出操作。就像調用executePendingTransactions()方法之後的效果一樣。
傳回值:如果彈出了某些狀態,則返回true,否則返回false。
public abstract void putFragment(Bundle bundle, String key, Fragment fragment)
把一個指定的Fragment對象放入一個Bundle對象中。這個Bundle對象能夠作為持久的狀態來儲存,並且在後續的調用getFragment(Bundle, String)方法來恢複的時候,它會返回一個與當前執行個體相同的Fragment對象。
參數:
bundle--->這個參數指定了一個Bundle對象,方法執行時,會把指定的Fragment對象引用放到這個Bundle對象中。
key--->這參數指定在Bundle對象中這個實體的名稱。
fragment--->這個參數指定要儲存的Fragment對象的引用。
public abstract void removeOnBackStackChangedListener(FragmentManager.OnBackStackChangedListener listener)
刪除之前用addOnBackStackChangedListener(OnBackStackChangedListener)方法添加的一個監聽器。
public abstract Fragment.SavedState saveFragmentInstanceState(Fragment f)
儲存給定的Fragment對象的目前狀態。在建立一個新的Fragment對象執行個體,並且把它添加到Fragment管理器中之後,能夠使用這個方法來建立一個跟Fragment對象的目前狀態匹配的狀態物件。使用這個方法時要注意以下限制:
1. Fragment對象必須跟當前的FragmentManager對象綁定;
2. 使用這個被儲存的狀態來建立一個新的Fragment對象,必須與建立這個狀態的Fragment對象有相同的類類型。
3. 被儲存的狀態不能包含對其他的Fragment對象依賴,也就是說,不能使用putFragment(Bundle, String, Fragment)方法來儲存一個Fragment對象的引用,因為這個引用這個引用在後續使用時可能是無效的。同樣Fragment對象的目標和結果代碼也不能包含在這個要儲存的狀態中。
參數:
f--->要儲存狀態的Fragment對象。
傳回值:
產生的狀態物件,如果沒有感興趣的由Fragment所建立的狀態,那麼這個方法會返回null。
摘自 FireOfStar的專欄