Fragment 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
此類別在 API 等級 28 時被棄用。
[Android.Runtime.Register("android/app/Fragment", DoNotGenerateAcw=true)]
public class Fragment : Java.Lang.Object, Android.Content.IComponentCallbacks2, Android.Views.View.IOnCreateContextMenuListener, IDisposable
[<Android.Runtime.Register("android/app/Fragment", DoNotGenerateAcw=true)>]
type Fragment = class
inherit Object
interface IComponentCallbacks2
interface IComponentCallbacks
interface IJavaObject
interface IDisposable
interface IJavaPeerable
interface View.IOnCreateContextMenuListener
- 繼承
- 衍生
- 屬性
- 實作
備註
此類別在 API 等級 28 時被棄用。 使用 Jetpack Fragment Library 片段,讓所有裝置的行為一致,並存取生命週期。
片段是應用程式使用者介面或行為中可放置於活動中的一個片段。 與片段的互動是透過 FragmentManager 進行,該功能可透過 Activity.getFragmentManager() 和 Fragment.getFragmentManager() 取得。 Fragment 類別有多種使用方式,以達成多種結果。 在核心中,它代表在較大活動中執行的特定操作或介面。 碎片與其所處的活動緊密相連,且無法單獨使用。 雖然 Fragment 定義了自身的生命週期,但該生命週期依賴於其活動:若活動停止,內部的 fragment 將無法啟動;當活動被摧毀時,所有碎片也會被摧毀。 Fragment 的所有子類別都必須包含一個公開的無參數建構子。 框架通常會在需要時重新實例化片段類別,特別是在狀態還原時,且需要找到這個建構子來實例化它。 若無參數建構子不可用,在某些情況下,狀態還原時會出現執行時例外。 此處涵蓋主題:舊平台生命週期佈局後堆開發者指南 欲了解更多關於片段使用資訊,請閱讀碎片開發者指南。
雖然碎片的生命週期與其擁有活動相關,但它在標準活動生命週期中也有自己的變化。 它包含基本的活動生命週期方法,如 onResume(),但同時也重要的是與活動互動及使用者介面產生相關的方法。 用於將片段恢復狀態(與使用者互動)的核心生命週期方法系列包括:當片段與其活動關聯時,會呼叫 onAttach(Activity)。 onCreate(Bundle) 呼叫來進行片段的初始建立。 onCreateView(LayoutInflater, ViewGroup, Bundle) 會建立並回傳與該片段相關的視圖階層。 onActivityCreated(Bundle) 告訴片段其活動已完成 Activity.onCreate()。 onViewStateRestored(Bundle) 告訴該片段其視圖階層中所有已儲存的狀態都已被恢復。 onStart() 使該片段對使用者可見(根據其包含的活動被啟動)。 onResume() 會讓片段開始與使用者互動(根據其包含的活動被恢復)。 當片段不再被使用時,會經歷一連串反向回調:onPause() 片段不再與使用者互動,可能是因為其活動被暫停,或是片段操作在活動中修改了它。 onStop() 片段不再對使用者可見,可能是因為其活動被停止,或是片段操作在活動中修改了它。 onDestroyView() 允許片段清理與其 View 相關的資源。 onDestroy() 呼叫以進行碎片狀態的最終清理。 onDetach() 在片段不再與其活動相關聯之前,立即呼叫。 版面片段可以作為應用程式版面配置的一部分,讓你能更好地模組化程式碼,並更輕鬆地調整使用者介面以配合執行的螢幕。 舉例來說,我們可以看一個簡單的程式,包含一份項目清單,並顯示每個項目的詳細資料。
活動的版面 XML 可以包含 <片段> 標籤,將片段實例嵌入版面中。 例如,這裡有一個簡單的佈局,嵌入了一個片段:
該佈局以正常方式安裝於活動中:
標題片段顯示標題列表,結構相當簡單,大部分工作依賴 ListFragment。 請注意點擊項目的實作:根據當前活動的佈局,它可以建立並顯示一個新片段以顯示已到位的細節(稍後會詳細說明),或是啟動新活動以顯示細節。
顯示所選項目內容的細節片段,僅顯示一串基於應用程式內建字串陣列索引的文字串:
此時使用者點擊標題時,當前活動中沒有詳細容器,因此標題片段的點擊代碼會啟動新活動以顯示詳細片段:
不過螢幕可能足夠大,同時顯示書名列表及目前選擇的書名細節。 若要在橫向螢幕上使用此配置,可將此替代配置置於 layout-land:
請注意先前程式碼如何調整以適應這個替代的 UI 流程:標題片段現在會將細節片段嵌入此活動中,若細節活動在可原地顯示的配置中執行,細節活動會自行完成。 當設定變更導致這些片段的活動重新啟動時,其新實例可能會使用不同的版面配置,該配置不包含與先前版面相同的片段。 在這種情況下,所有先前的片段仍會被實例化並在新實例中執行。 然而,任何不再與視圖階層中分 <段> 標籤相關聯的檔案,其內容檢視將不會被建立,並會從 isInLayout() 回傳 false。 (這裡的程式碼也說明了如何判斷放置在容器中的片段是否不再與該容器同框執行,並避免建立其視圖階層。)片段>標籤的<屬性用於控制將片段視圖附加到父容器時所提供的 LayoutParams。 它們也可以被 onInflate(Activity, AttributeSet, Bundle) 中的片段作為參數解析。 被實例化的片段必須具備某種唯一識別碼,以便在需要銷毀並重建父活動時,能重新關聯到先前的實例。 這可以透過以下方式提供:如果沒有明確提供,則會使用容器的視圖 ID。 android:tag 可以在 <fragment> 中提供特定標籤名稱。 Android:ID 可用於 <fragment> 中,提供該 fragment 的特定識別碼。 後端堆疊 修改片段的交易可置於擁有活動的內部後堆疊中。 當使用者按下活動時,後堆疊中的任何交易會在活動結束前被彈出。 例如,考慮這個簡單的片段,它以整數參數實例化,並在其介面中的 TextView 中顯示:
一個函式可以建立一個新的片段實例,替換目前顯示的片段實例並將該變更推送到後堆疊堆疊,可以寫成:每次呼叫該函式後,堆疊上都會有一個新條目,按下返回鍵會彈出該條目,讓使用者回到活動介面之前的狀態。 片段的出現或消失不會產生無障礙的系統事件,因此請使用 View.setAccessibilityPaneTitle(CharSequence) 在片段上設定標題,以通知無障礙使用者這些 UI 轉換。
Android 參考資料。android.app.Fragment
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
建構函式
| 名稱 | Description |
|---|---|
| Fragment() |
預設建構函式。 |
| Fragment(IntPtr, JniHandleOwnership) |
初始化現有 Java 原生介面物件的受管理表示。 |
屬性
| 名稱 | Description |
|---|---|
| Activity |
回歸該片段目前所關聯的活動。 |
| AllowEnterTransitionOverlap |
無論退出轉換與進入轉換是否重疊,都會回傳。 |
| AllowReturnTransitionOverlap |
無論返回轉換與再入轉換是否重疊,都會回傳。 |
| Arguments |
如果有的話,回傳 setArguments(Bundle) 所提供的參數。 |
| ChildFragmentManager |
回傳一個私有的 FragmentManager,用於將碎片置入並管理該碎片。 |
| Class |
回傳此 |
| Context |
回傳該片段目前所關聯的上下文。 |
| EnterTransition |
回傳將用於將視圖移入初始場景的過渡。 |
| ExitTransition |
回傳將用於在移除、隱藏或分離片段時,將視圖移出場景的轉換,且不彈出後堆疊。 |
| FragmentManager |
回傳 FragmentManager,用於與該片段活動相關的片段互動。 |
| Handle |
底層 Android 實例的帳號。 (繼承來源 Object) |
| Host |
回傳這個片段的宿主物件。 |
| Id |
回傳該片段所識別的識別碼。 |
| IsAdded |
如果該片段目前已加入其活動,則回傳 true。 |
| IsDetached |
如果該片段已明確從 UI 分離,則回傳 true。 |
| IsHidden |
如果該片段已被隱藏,則返回 true。 |
| IsInLayout |
如果該版面是透過 <片段> 標籤作為活動檢視階層的一部分,則回傳 true。 |
| IsRemoving |
如果該片段目前正被移除,則返回 true。 |
| IsResumed |
若片段處於恢復狀態,則回傳真。 |
| IsStateSaved |
如果加入此片段且其狀態已被主機保存,則回傳為真。 |
| IsVisible |
如果該片段目前對使用者可見,則回傳 true。 |
| JniIdentityHashCode |
取得由互通執行時指派給此 Java 對等端的身份雜湊碼。 (繼承來源 Object) |
| JniManagedPeerState |
此類別在 API 等級 28 時被棄用。 (繼承來源 JavaObject) |
| JniPeerMembers |
提供 Android.App.Fragment 的 JNI 綁定基礎架構。 |
| LayoutInflater |
回傳用於膨脹此片段視圖的快取 LayoutInflater。 |
| LoaderManager |
此方法已被取代。 |
| ParentFragment |
回傳包含該片段的父片段。 |
| PeerReference |
取得這個 Java 節點的 JNI 物件參考。 (繼承來源 Object) |
| ReenterTransition |
回傳將用於在回放時將視圖移入場景的轉換,因為會彈出後方堆疊。 |
| Resources |
回傳 getActivity().getResources()。 |
| RetainInstance |
控制片段實例是否在活動重建過程中(例如設定變更後)被保留。 |
| ReturnTransition |
回傳將用於在碎片準備被移除、隱藏或因後堆疊而分離時,將視圖移出場景的轉換。 |
| SharedElementEnterTransition |
回傳用於轉移到內容場景的共享元素的轉換。 |
| SharedElementReturnTransition |
回傳將用於後堆疊彈出時傳回的共享元素的轉換。 |
| Tag |
如果有指定,請取得碎片的標籤名稱。 |
| TargetFragment |
回傳由 setTargetFragment(Fragment, int) 設定的目標片段。 |
| TargetRequestCode |
回傳由 setTargetFragment(Fragment, int) 設定的目標請求代碼。 |
| ThresholdClass |
提供 Android.App.Fragment 的 JNI 綁定基礎架構。 |
| ThresholdType |
提供 Android.App.Fragment 的 JNI 綁定基礎架構。 |
| UserVisibleHint |
另請參閱: |
| View |
取得片段版面的根視圖(由 onCreateView(LayoutInflater, ViewGroup, Bundle)回傳的),如果有提供。 |
方法
| 名稱 | Description |
|---|---|
| Clone() |
建立並回傳此物件的副本。 (繼承來源 Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
此類別在 API 等級 28 時被棄用。 (繼承來源 JavaObject) |
| Dispose() |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| Dispose(Boolean) |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| DisposeUnlessReferenced() |
此類別在 API 等級 28 時被棄用。 (繼承來源 JavaObject) |
| Dump(String, FileDescriptor, PrintWriter, String[]) |
將碎片的狀態印入給定的串流中。 |
| Equals(Object) |
已淘汰.
子類別無法覆蓋等值()。 |
| Equals(Object) |
此類別在 API 等級 28 時被棄用。 (繼承來源 JavaObject) |
| GetHashCode() |
已淘汰.
子類別無法覆寫 hashCode()。 |
| GetString(Int32, Object[]) |
從應用程式套件的預設字串表回傳一個本地化格式化的字串,並以 Formatter 和 String.format(String, Object) 中定義的格式參數替換。 |
| GetString(Int32) |
從應用程式套件預設字串表回傳一個在地字串。 |
| GetText(Int32) |
從應用程式套件預設字串表回傳一個本地化且有樣式的 CharSequence。 |
| GetTextFormatted(Int32) |
從應用程式套件預設字串表回傳一個本地化且有樣式的 CharSequence。 |
| Instantiate(Context, String, Bundle) |
建立一個帶有該類別名稱的 Fragment 新實例。 |
| Instantiate(Context, String) |
就像 instantiate(Context, String, Bundle),但用空參數 Bundle。 |
| JavaFinalize() |
當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。 (繼承來源 Object) |
| Notify() |
喚醒一個正在該物件監視器上等待的執行緒。 (繼承來源 Object) |
| NotifyAll() |
喚醒所有等待該物件監視器的執行緒。 (繼承來源 Object) |
| OnActivityCreated(Bundle) |
當該片段的活動已建立且該片段的視圖階層實例化時,會被呼叫。 |
| OnActivityResult(Int32, Result, Intent) |
接收先前呼叫 startActivityForResult(Intent,int) 的結果。 |
| OnAttach(Activity) |
此方法在 API 等級 23 中被棄用。 |
| OnAttach(Context) |
當一個片段首次連接到其上下文時,會被呼叫。 |
| OnAttachFragment(Fragment) |
當碎片被附加為該碎片的子節點時,該名稱被召喚。 |
| OnConfigurationChanged(Configuration) |
當裝置設定變更時,系統會呼叫它,而你的元件正在運行。 |
| OnContextItemSelected(IMenuItem) |
每當選擇右鍵選單中的項目時,就會呼叫這個鉤子。 |
| OnCreate(Bundle) |
被召喚去做碎片的初始創建。 |
| OnCreateAnimator(FragmentTransit, Boolean, Int32) |
當片段載入動畫時會被呼叫。 |
| OnCreateContextMenu(IContextMenu, View, IContextMenuContextMenuInfo) |
當視圖的右鍵選單即將顯示時會被呼叫。 |
| OnCreateOptionsMenu(IMenu, MenuInflater) |
初始化活動標準選項選單的內容。 |
| OnCreateView(LayoutInflater, ViewGroup, Bundle) |
被呼叫讓 fragment 實例化其使用者介面視圖。 |
| OnDestroy() |
當該碎片不再使用時會被呼叫。 |
| OnDestroyOptionsMenu() |
當該片段的選項選單項目不再包含在整體選項選單中時,會呼叫此訊息。 |
| OnDestroyView() |
當先前由 onCreateView(LayoutInflater、ViewGroup、Bundle)建立的視圖與片段分離時,會呼叫此檢視。 |
| OnDetach() |
當碎片不再與其活動相連時,會被召喚。 |
| OnGetLayoutInflater(Bundle) |
回傳用於膨脹此片段視圖的 LayoutInflater。 |
| OnHiddenChanged(Boolean) |
當片段的隱藏狀態(由 isHidden() 回傳)改變時呼叫。 |
| OnInflate(Activity, IAttributeSet, Bundle) |
此方法在 API 等級 23 中被棄用。 |
| OnInflate(Context, IAttributeSet, Bundle) |
當片段作為檢視版面膨脹的一部分被建立時,通常是透過設定活動的內容檢視而呼叫。 |
| OnInflate(IAttributeSet, Bundle) |
已淘汰.
此方法在 API 等級 15 中被棄用。 |
| OnLowMemory() |
當整體系統記憶體不足時,當正在執行的程序應該會修剪記憶體使用時,就會呼叫這個動作。 |
| OnMultiWindowModeChanged(Boolean, Configuration) |
當碎片的活動從全螢幕模式切換到多視窗模式,反之亦然時,會被呼叫。 |
| OnMultiWindowModeChanged(Boolean) |
此方法在 API 等級 26 中被淘汰。 |
| OnOptionsItemSelected(IMenuItem) |
每當你在選項選單中選取某項時,就會呼叫這個鉤子。 |
| OnOptionsMenuClosed(IMenu) |
當選項選單關閉時(使用者用返回/選單按鈕取消選單,或選取項目時)會呼叫這個鉤子。 |
| OnPause() |
當碎片不再恢復時會被召喚。 |
| OnPictureInPictureModeChanged(Boolean, Configuration) |
系統在活動切換至畫中畫模式時呼叫。 |
| OnPictureInPictureModeChanged(Boolean) |
此方法在 API 等級 26 中被淘汰。 |
| OnPrepareOptionsMenu(IMenu) |
請準備螢幕的標準選項選單顯示。 |
| OnRequestPermissionsResult(Int32, String[], Permission[]) |
請求權限後回撥結果。 |
| OnResume() |
當該片段對使用者可見且正在執行時呼叫。 |
| OnSaveInstanceState(Bundle) |
當被呼叫請求片段儲存其當前動態狀態,以便之後能在新的程序實例中重建時,該程序會重新啟動。 |
| OnStart() |
當 Fragment 對使用者可見時,會被呼叫。 |
| OnStop() |
當碎片不再啟動時呼叫。 |
| OnTrimMemory(TrimMemory) |
當作業系統判斷程序是刪除其程序中不需要記憶體的好時機時,會被呼叫。 |
| OnViewCreated(View, Bundle) |
在 onCreateView(LayoutInflater, ViewGroup, Bundle) 返回後立即呼叫,但尚未將任何儲存狀態還原到檢視中。 |
| OnViewStateRestored(Bundle) |
當所有儲存狀態都已恢復到片段的視圖階層時,才會被呼叫。 |
| PostponeEnterTransition() |
延後進入片段的轉換,直到 startPostponedEnterTransition() 或 FragmentManager.executePendingTransactions() 被呼叫完成。 |
| RegisterForContextMenu(View) |
註冊一個右鍵選單,顯示給定視圖(多個視圖可顯示該右鍵選單)。 |
| RequestPermissions(String[], Int32) |
請求授權給此應用程式。 |
| SetEnterSharedElementCallback(SharedElementCallback) |
當使用自訂轉換時,當該片段連接或分離且未彈出後堆疊時,會呼叫 Enter 轉換回撥。 |
| SetExitSharedElementCallback(SharedElementCallback) |
當使用自訂轉換時,當該片段在彈出後堆疊時被連接或分離時,會呼叫退出轉換回撥。 |
| SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
| SetHasOptionsMenu(Boolean) |
報告此片段希望透過呼叫 onCreateOptionsMenu(Menu, MenuInflater) 及相關方法來參與填充選項選單。 |
| SetInitialSavedState(Fragment+SavedState) |
設定初始儲存狀態,讓該碎片從建構時應自行恢復,該狀態由 FragmentManager.saveFragmentInstanceState 回傳。 |
| SetMenuVisibility(Boolean) |
設定提示,判斷該片段選單是否應該顯示。 |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
此類別在 API 等級 28 時被棄用。 (繼承來源 JavaObject) |
| SetTargetFragment(Fragment, Int32) |
此片段的可選目標。 |
| ShouldShowRequestPermissionRationale(String) |
判斷你是否應該在申請許可前先展示 UI。 |
| StartActivity(Intent, Bundle) |
從包含 Activity 的片段中呼叫 Activity.startActivity(Intent,Bundle)。 |
| StartActivity(Intent) |
從包含 Activity 的片段呼叫 Activity.startActivity(Intent)。 |
| StartActivityForResult(Intent, Int32, Bundle) |
從包含 Activity 的片段呼叫 Activity.startActivityForResult(Intent, int, Bundle)。 |
| StartActivityForResult(Intent, Int32) |
從包含 Activity 的片段呼叫 Activity.startActivityForResult(Intent,int)。 |
| StartIntentSenderForResult(IntentSender, Int32, Intent, ActivityFlags, ActivityFlags, Int32, Bundle) |
從包含 Activity 的片段呼叫 Activity.startIntentSenderForResult(IntentSender, int, Intent, int, int, Bundle)。 |
| StartPostponedEnterTransition() |
在 postponeEnterTransition() 被呼叫後開始延遲的過渡。 |
| ToArray<T>() |
從這個 Java 陣列包裝器建立一個受管理陣列。 (繼承來源 Object) |
| ToString() |
回傳物件的字串表示。 (繼承來源 Object) |
| UnregisterForContextMenu(View) |
阻止顯示該視圖的右鍵選單。 |
| UnregisterFromRuntime() |
將此 Java 節點從互通執行時中取消註冊。 (繼承來源 Object) |
| Wait() |
導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。 (繼承來源 Object) |
| Wait(Int64, Int32) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
| Wait(Int64) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
明確介面實作
| 名稱 | Description |
|---|---|
| IJavaPeerable.Disposed() |
此類別在 API 等級 28 時被棄用。 (繼承來源 JavaObject) |
| IJavaPeerable.Finalized() |
此類別在 API 等級 28 時被棄用。 (繼承來源 JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
此類別在 API 等級 28 時被棄用。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
此類別在 API 等級 28 時被棄用。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
此類別在 API 等級 28 時被棄用。 (繼承來源 JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
此類別在 API 等級 28 時被棄用。 (繼承來源 JavaObject) |
| IJavaPeerable.UnregisterFromRuntime() |
此類別在 API 等級 28 時被棄用。 |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
此類別在 API 等級 28 時被棄用。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |