Android類參考—FragmentManager

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的專欄

發佈留言