Android類參考---FragmentManager

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.