片段
| 最近更新時間 | 穩定版 | 候選版 | Beta 版 | Alpha 版 | 
|---|---|---|---|---|
| 2025 年 8 月 13 日 | 1.8.9 | - | - | - | 
宣告依附元件
如果要為 Fragment 新增依附元件,您必須將 Google Maven 存放區新增至專案。詳情請參閱「Google 的 Maven 存放區」一節。
在應用程式或模組的 build.gradle 檔案中,新增所需構件的依附元件:
Groovy
dependencies { def fragment_version = "1.8.9" // Java language implementation implementation "androidx.fragment:fragment:$fragment_version" // Kotlin implementation "androidx.fragment:fragment-ktx:$fragment_version" // Compose implementation "androidx.fragment:fragment-compose:$fragment_version" // Testing Fragments in Isolation debugImplementation "androidx.fragment:fragment-testing-manifest:$fragment_version" androidTestImplementation "androidx.fragment:fragment-testing:$fragment_version" }
Kotlin
dependencies { val fragment_version = "1.8.9" // Java language implementation implementation("androidx.fragment:fragment:$fragment_version") // Kotlin implementation("androidx.fragment:fragment-ktx:$fragment_version") // Compose implementation("androidx.fragment:fragment-compose:$fragment_version") // Testing Fragments in Isolation debugImplementation("androidx.fragment:fragment-testing:$fragment_version") }
如要進一步瞭解依附元件,請參閱「新增建構依附元件」一文。
意見回饋
您的意見可協助我們改善 Jetpack。如果您發現新問題,或是有改進這個程式庫的建議,請告訴我們。回報新問題前,請先查看這個程式庫的現有問題。只要按一下星號按鈕,即可投票給現有的問題。
詳情請參閱 Issue Tracker 說明文件。
1.8 版
1.8.9 版
2025 年 8 月 13 日
發布 androidx.fragment:fragment-*:1.8.9。1.8.9 版包含這些修訂項目。
修正錯誤
- 修正問題:取消會填入隱藏作業的預測返回手勢時,後續手勢無法在使用動畫師時正確產生動畫。(I0a400、b/384765586)
- 修正錯誤:setMaxLifecycle和popBackStack的組合可能無法將頂端片段移至 RESUMED。(I3448b、b/406127576)
1.8.8 版
2025 年 6 月 4 日
發布 androidx.fragment:fragment-*:1.8.8。1.8.8 版包含這些修訂項目。
修正錯誤
- 修正問題:嘗試儲存透過 setMaxLifecycle(Lifecycle.State.INITIALIZED)新增的片段狀態時,FragmentManager會異常終止。這些片段從未經歷onCreate(),因此不會再儲存任何狀態或呼叫onSaveInstanceState()。(I6e37a)
1.8.7 版
2025 年 5 月 20 日
發布 androidx.fragment:fragment-*:1.8.7。1.8.7 版包含這些修訂項目。
修正錯誤
- 修正問題:在同一個影格中執行彈出和取代作業後,FragmentManager狀態不正確,可能導致與透過popBackStack或預測返回手勢彈出返回堆疊時發生當機。(I50ad1)
- 修正了使用 AndroidX Transitions 時發生的當機問題。在這種情況下,快速連續的片段交易會嘗試取消未啟動的轉換,而 AndroidX Transition 程式庫無法正確清除轉換狀態。(請參閱 b/414612221)。(Ib5235)
1.8.6 版
2025 年 2 月 12 日
發布 androidx.fragment:fragment-*:1.8.6。1.8.6 版包含這些修訂項目。
修正錯誤
- FragmentContainerView的- setOnApplyWindowInsetsListener覆寫現在會採用空值監聽器,與架構允許的內容相符。(I575f0、b/282790626)
1.8.5 版
2024 年 10 月 30 日
發布 androidx.fragment:fragment-*:1.8.5。1.8.5 版包含這些修訂項目。
修正錯誤
- 修正問題:只有在取消或中斷「預測返回」手勢後,才會由 saveBackStack觸發IllegalStateException。(I3387d、b/342419080)
1.8.4 版
2024 年 10 月 2 日
發布 androidx.fragment:fragment-*:1.8.4。1.8.4 版包含這些修訂項目。
修正錯誤
- 修正快速按下系統返回按鈕或快速執行手勢返回時,使用 Androidx Transitions 會導致 Fragment 當機的問題。(Ibc038、b/364804225)
- 修正片段中的問題:中斷預測返回手勢會導致片段管理工具進入未定義狀態,甚至顯示錯誤的片段。(If82e2、b/338624457)
- 修正動態替換 AndroidFragment例項所用類別時,AndroidFragment中產生的UninitializedPropertyAccessException(I12dea)
1.8.3 版
2024 年 9 月 4 日
發布 androidx.fragment:fragment-*:1.8.3。1.8.3 版包含這些修訂項目。
修正錯誤
- 現在處理預測返回手勢時,FragmentManager會正確考量待處理的作業。這樣應該就能確保系統返回操作不會再導致IndexOutOfBoundsException。(I9ba32、b/342316801)
- 如果將 AndroidFragment新增至組合,且內含活動/片段的狀態已儲存,系統不會再當機。(I985e9、b/356643968)
1.8.2 版
2024 年 7 月 24 日
發布 androidx.fragment:fragment-*:1.8.2。1.8.2 版包含這些修訂項目。
修正錯誤
- 如果父項片段放在片段返回堆疊中,AndroidFragment現在可以妥善處理這類情況,因此返回該片段時不會發生「找不到 ID 的檢視區塊」問題。(I94608)
- 透過採用 ViewGroup的FragmentTransaction.add方法新增的片段,現在會等待onContainerAvailable,然後再繼續執行onStart()。這會影響該 API 的使用者,例如AndroidFragment,現在會等待AndroidFragment重新進入組合,再透過onStart()移動。(I94608)
1.8.1 版
2024 年 6 月 26 日
發布 androidx.fragment:fragment-*:1.8.1。1.8.1 版包含這些修訂項目。
修正錯誤
- 修正問題:啟動預測返回手勢時,沒有容器的片段會立即 DESTROYED。現在,這些檢視區塊會處於CREATED狀態,直到手勢完成為止。(If6b83、b/345244539)
1.8.0 版
2024 年 6 月 12 日
發布 androidx.fragment:fragment-*:1.8.0。1.8.0 版包含這些修訂項目。
自 1.7.0 版以來的重要變更
- fragment-compose構件現在包含- AndroidFragment- Composable,可透過片段類別名稱將片段新增至 Compose 階層。系統會自動處理片段狀態的儲存和還原作業。建議直接使用這個方法,取代先前建議的- AndroidViewBinding片段膨脹方法。
- 現在,在 FragmentManager中執行作業時,FragmentManager的OnBackStackChangedListener介面上的onBackStackChangeCancelled回呼會觸發,使其時間與onBackStackChangeCommitted回呼的時間更接近。
1.8.0-rc01 版
2024 年 5 月 29 日
發布 androidx.fragment:fragment-*:1.8.0-rc01。1.8.0-rc01 版包含這些修訂項目。
修正錯誤
- 現在,FragmentManagers OnBackStackChangedListener介面上的onBackStackChangeCancelled回呼會在FragmentManager中執行作業時觸發,因此與onBackStackChangeCommitted回呼的觸發時間更接近。(I5ebfb、b/332916112)
1.8.0-beta01 版
2024 年 5 月 14 日
發布 androidx.fragment:fragment-*:1.8.0-beta01。1.8.0-beta01 版包含這些修訂項目。
修正錯誤
- 在 Fragment 1.7.1中:現在只有在所有片段都有 Animator 或可搜尋的 AndroidX 轉換時,才會執行預測返回手勢。修正取消部分可搜尋交易時會出現黑畫面的問題。(I43037、b/339169168)
1.8.0-alpha02 版
2024 年 4 月 17 日
發布 androidx.fragment:fragment-*:1.8.0-alpha02。1.8.0-alpha02 版包含這些修訂項目。
修正錯誤
- 在 Fragment 1.7.0-rc02中:新增記錄,指出為何設定sharedElement但沒有任何其他轉場效果會導致執行失敗。(Iec48e)
- 在 Fragment 1.7.0-rc02中:修正錯誤。如果將無法搜尋的共用元素新增至所有其他轉換都可搜尋的交易,就會發生當機。現在系統會正確將交易視為不可搜尋。(I18ccd)
1.8.0-alpha01 版
2024 年 4 月 3 日
發布 androidx.fragment:fragment-*:1.8.0-alpha01。1.8.0-alpha01 版包含這些修訂項目。
新功能
- 新的 AndroidFragmentComposable可透過片段類別名稱,將片段新增至 Compose 階層。系統會自動處理片段狀態的儲存和還原作業。這項功能可直接取代 AndroidViewBindingComposable。(b/312895363、Icf841)
說明文件變更
- 更新 OnBackStackChangedListenerAPI 的說明文件,說明呼叫時機和使用方式。(I0bfd9)
依附元件更新
- 片段現在依附於設定檔安裝程式 1.3.1。
1.7 版
1.7.1 版
2024 年 5 月 14 日
發布 androidx.fragment:fragment-*:1.7.1。1.7.1 版包含這些修訂項目。
修正錯誤
- 現在只有在所有片段都有 Animator 或可搜尋的 Androidx Transition 時,預測返回手勢才會執行交易。修正取消部分可搜尋交易時,會導致畫面空白的問題。(I43037、b/339169168)
1.7.0 版
2024 年 5 月 1 日
發布 androidx.fragment:fragment-*:1.7.0。1.7.0 版包含這些修訂項目。
預測返回手勢支援
- 使用 Animator或 AndroidX Transition 1.5.0 時,片段現在支援應用程式內預測返回手勢。這樣一來,使用者就能在決定要透過完成手勢或取消手勢來提交交易前,先搜尋 Animator/Transition,然後使用返回手勢查看先前的片段。
| 轉換系統 | XML 資源 | 支援預測返回功能 | 
|---|---|---|
| Animation | R.anim | 否 | 
| Animator | R.animator | 是 | 
| 架構 Transition | R.transition | 否 | 
| AndroidX Transition,搭配 Transition 1.4.1 以下版本 | R.transition | 否 | 
| AndroidX Transition,搭配 Transition 1.5.0 | R.transition | 是 | 
啟用預測返回手勢後,如果發現片段的預測返回功能有任何問題,請針對片段回報問題,並附上重現問題的範例專案。您可以在 Activity 的 onCreate() 中使用 FragmentManager.enabledPredictiveBack(false) 停用預測返回手勢。
FragmentManager.OnBackStackChangedListener() 現在提供 onBackStackChangeProgressed() 和 onBackStackChangeCancelled(),分別用於接收預測返回進度和取消事件。
Fragment Compose 構件
我們建立了新的 fragment-compose 構件,著重於支援從以片段為基礎的架構,遷移至完全以 Compose 為基礎的架構的應用程式。
這個新構件提供的第一項功能是 Fragment 的 content 擴充方法,可為您建立 ComposeView 並設定正確的 ViewCompositionStrategy,讓您更輕鬆地使用 Compose 製作個別 Fragment 的 UI。
  class ExampleFragment : Fragment() {
      override fun onCreateView(
          inflater: LayoutInflater,
          container: ViewGroup?,
          savedInstanceState: Bundle?
      ) = content {
          // Write your @Composable content here
          val viewModel: ExampleViewModel = viewModel()
          // or extract it into a separate, testable method
          ExampleComposable(viewModel)
      }
  }
1.7.0-rc02 版
2024 年 4 月 17 日
發布 androidx.fragment:fragment-*:1.7.0-rc02。1.7.0-rc02 版包含這些修訂項目。
修正錯誤
- 新增記錄,指出為何設定 sharedElement但沒有任何其他轉場效果時,會無法執行。(Iec48e)
- 修正錯誤:如果將無法搜尋的共用元素新增至交易,且所有其他轉換都可搜尋,就會發生當機情形。現在系統會正確將交易視為不可搜尋。(I18ccd)
1.7.0-rc01 版
2024 年 4 月 3 日
發布 androidx.fragment:fragment-*:1.7.0-rc01。1.7.0-rc01 版包含這些修訂項目。
依附元件更新
- 片段現在依附於設定檔安裝程式 1.3.1。
1.7.0-beta01 版
March 20, 2024
發布 androidx.fragment:fragment-*:1.7.0-beta01。1.7.0-beta01 版包含這些修訂項目。
API 變更
- FragmentHostCallback現在是以 Kotlin 編寫,因此 Host 泛型型別是否可為空值,會與- onGetHost()的回傳型別是否可為空值相符。(I40af5)
修正錯誤
- 修正問題:在不在容器中的片段上提交「預測返回」手勢時,該片段永遠不會遭到刪除。現在,系統會立即將片段移至最終狀態。(Ida0d9)
- 修正片段中的問題:以預測返回手勢中斷傳入的轉場效果時,系統會刪除進入的檢視區塊,並留下空白畫面。(Id3f22、b/319531491)
1.7.0-alpha10 版
2024 年 2 月 7 日
發布 androidx.fragment:fragment-*:1.7.0-alpha10。1.7.0-alpha10 版包含此連結所列的修訂項目。
修正錯誤
- 修正先前 Fragment 版本中的已知問題:使用 Fragment 的預測返回手勢支援 Animator或 AndroidX Transition 時,如果從未透過addOnBackStackChangedListener新增任何FragmentManager.OnBackStackChangedListener,Fragment 會從handleOnBackProgressed擲回NullPointerException。(I7c835)
1.7.0-alpha09 版
2024 年 1 月 24 日
發布 androidx.fragment:fragment-*:1.7.0-alpha09。1.7.0-alpha09 版包含此連結所列的修訂項目。
Fragment Compose 構件
我們建立了新的 fragment-compose 構件,著重於支援從以片段為基礎的架構,遷移至完全以 Compose 為基礎的架構的應用程式。
這個新構件提供的第一項功能是 Fragment 上的 content 擴充方法,可為您建立 ComposeView 並設定正確的 ViewCompositionStrategy,讓您更輕鬆地使用 Compose 製作個別 Fragment 的 UI。(561cb7、b/258046948)
class ExampleFragment : Fragment() {
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ) = content {
        // Write your @Composable content here
        val viewModel: ExampleViewModel = viewModel()
        // or extract it into a separate, testable method
        ExampleComposable(viewModel)
    }
}
新功能
- FragmentManager.OnBackStackChangedListener()現在提供- onBackStackChangeProgressed()和- onBackStackChangeCancelled(),分別用於接收預測返回進度和取消事件。(214b87)
已知問題
- 使用 Fragment 的預測返回手勢支援功能處理 Animator或 AndroidX Transition 時,如果從未透過addOnBackStackChangedListener新增任何FragmentManager.OnBackStackChangedListener,Fragment 會從handleOnBackProgressed擲回NullPointerException。手動新增監聽器即可解決當機問題。我們會在下一個 Fragments 版本中修正這個問題。
1.7.0-alpha08 版
2024 年 1 月 10 日
發布 androidx.fragment:fragment-*:1.7.0-alpha08。1.7.0-alpha08 版包含以下修訂項目。
清理
- 已移除 Transition 程式庫的解決方法,因為 Transition 1.5.0-alpha06已修正相關問題。(I04356)
1.7.0-alpha07 版
2023 年 11 月 29 日
發布 androidx.fragment:fragment-*:1.7.0-alpha07。1.7.0-alpha07 版包含此連結所列的修訂項目。
修正錯誤
- 修正因設定共用元素轉換,但未同時設定進入/結束轉換而導致的 NullPointerException。(I8472b)
- 在 Fragment 1.6.2中:加載FragmentContainerView的 Fragment 時,現在可在onInflate回呼中存取其狀態,例如FragmentManager、Host 和 ID。(I1e44c、b/307427423)
- 在 Fragment 1.6.2中:使用clearBackStack移除一組片段時,系統現在會在清除父項片段的ViewModels時,清除任何巢狀 Fragment 的ViewModel。(I6d83c、b/296173018)
1.7.0-alpha06 版
2023 年 10 月 4 日
發布 androidx.fragment:fragment-*:1.7.0-alpha06。1.7.0-alpha06 版包含此連結所列的修訂項目。
依附元件更新
- 片段已更新為依附於 Transition 1.5.0-alpha04中新增的animateToStartAPI。
1.7.0-alpha05 版
2023 年 9 月 20 日
發布 androidx.fragment:fragment-*:1.7.0-alpha05。1.7.0-alpha05 版包含此連結所列的修訂項目。
新功能
- 使用 Androidx 轉換時,片段現在支援預測返回手勢。這樣一來,您就能使用返回手勢,透過自訂 AndroidX 轉換尋找上一個片段,然後決定要透過完成的手勢提交或取消交易。您必須依賴 Transition 1.5.0-alpha03版本,才能啟用這項功能。(Ib49b4、b/285175724)
已知問題
- 目前有項問題:取消一次返回手勢和轉場效果後,下次啟動返回手勢時,系統將無法執行轉場效果,導致畫面空白。這可能是 Transition 程式庫的問題所致。(b/300157785)。如果遇到這個問題,請針對 Fragment 提交問題,並附上可重現問題的範例專案。您可以在 Activity 的 onCreate()中使用FragmentManager.enabledPredictiveBack(false)停用預測返回手勢。
1.7.0-alpha04 版
2023 年 9 月 6 日
發布 androidx.fragment:fragment-*:1.7.0-alpha04。1.7.0-alpha04 版包含此連結所列的修訂項目。
修正錯誤
- 修正取消預測返回手勢時,片段無法進入正確生命週期狀態的問題。(I7cffe、b/297379023)
- 修正迴歸問題:動畫可與轉場效果一起執行。(I59f36)
- 修正問題:使用預測返回功能時,如果返回堆疊中倒數第二個片段嘗試快速連續返回兩次,就會導致當機。(Ifa1a4)
1.7.0-alpha03 版
2023 年 8 月 23 日
發布 androidx.fragment:fragment-*:1.7.0-alpha03。1.7.0-alpha03 版包含此連結所列的修訂項目。
修正錯誤
- 修正使用預測返回手勢時,Fragment 會略過 Fragment 管理工具返回堆疊中的第一個片段,並在透過 3 鍵操作模式或預測返回手勢使用系統返回功能時,導致 Activity 結束的問題。(I0664b、b/295231788)
1.7.0-alpha02 版
2023 年 8 月 9 日
發布 androidx.fragment:fragment-*:1.7.0-alpha02。1.7.0-alpha02 版包含以下修訂項目。
修正錯誤
- 從 API 34 開始,如果使用片段搭配預測返回手勢,且使用的轉場效果系統不支援搜尋 (Animations、Transitions) 或完全沒有轉場效果,片段現在會等到手勢完成後,再執行返回動作。(I8100c)
1.7.0-alpha01 版
2023 年 6 月 7 日
發布 androidx.fragment:fragment-*:1.7.0-alpha01。這個版本是在內部分支版本中開發而成。
新功能
- 使用 Animator時,片段現在支援應用程式內預測返回手勢。這樣一來,您就能使用返回手勢,在決定要透過完成的手勢提交交易或取消交易前,先查看上一個片段和自訂 Animator。您也可以使用實驗性enablePredictiveBack()並傳遞false,停用這項新行為。
1.6 版本
1.6.2 版
2023 年 11 月 1 日
發布 androidx.fragment:fragment-*:1.6.2。1.6.2 版包含以下修訂項目。
修正錯誤
- 加載 FragmentContainerView的 Fragment 時,現在可以在onInflate回呼中存取其狀態,例如FragmentManager、Host 和 ID。(I1e44c、b/307427423)
- 使用 clearBackStack移除一組片段時,系統現在會清除父項片段的ViewModels,同時清除任何巢狀片段的ViewModel。(I6d83c、b/296173018)
1.6.1 版
2023 年 7 月 26 日
發布 androidx.fragment:fragment-*:1.6.1。1.6.1 版包含此連結所列的修訂項目。
修正錯誤
- 修正問題:即使片段例項已移回 RESUMED狀態,系統仍會錯誤地快取活動停止但未刪除時儲存的狀態。如果使用多個返回堆疊 API 儲存及還原該片段,且該片段例項位於返回堆疊上,就會導致系統重複使用快取狀態。(I71288、b/246289075)
依附元件更新
- Fragment 現在依附於 Activity 1.7.2。修正問題:Kotlin 使用者無法擴充 ComponentDialog,且沒有 Activity 的明確依附元件。(b/287509323)
1.6.0 版
2023 年 6 月 7 日
發布 androidx.fragment:fragment-*:1.6.0。1.6.0 版包含以下修訂項目。
自 1.5.0 版以來的重要變更
- Fragment的儲存狀態已全面區分成兩種類型,一種是私人程式庫狀態 (自訂- Parcelable類別),另一種則是開發人員提供的狀態;開發人員提供的狀態現在一律儲存在- Bundle之中,允許判定片段的狀態確切來自於何處。
- FragmentManager.OnBackStackChangedListener介面已擴充,新增了- onBackStackChangeStarted和- onBackStackChangeCommitted這兩個回呼,分別會在每個- Fragment新增/移除片段返回堆疊之前,以及交易完成後呼叫。
- FragmentStrictMode新增了- WrongNestedHierarchyViolation,可偵測子項片段是否以巢狀結構位於其父項的檢視區塊階層中,但不會新增至父項的- childFragmentManager。
- 採用 Intent或IntentSender的Fragment和FragmentManagerAPI 現在可正確加註@NonNull,以免傳遞空值,因為空值一定會立即導致這些方法呼叫的各個 Android 架構 API 發生當機問題。
- DialogFragment現在提供- requireComponentDialog()API,可存取基礎- ComponentDialog。
- Fragment 現在依附於 Lifecycle 2.6.1。
- 片段現在依附於 SavedState 1.2.1。
- Fragment 現在依附於 ProfileInstaller 1.3.0。
- fragment-testing-manifest成果會將資訊清單項目與片段測試元件的其他部分分開。也就是說,您可以執行以下操作:- debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z") androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")- 這可避免因 - fragment-testing與- androidx.test之間的版本偏差而發生衝突
1.6.0-rc01 版
2023 年 5 月 10 日
發布 androidx.fragment:fragment-*:1.6.0-rc01。1.6.0-rc01 版包含以下修訂項目。
修正錯誤
- 修正問題:連續提出多個 startActivityForResult要求時,導致ActivityResult傳送的要求代碼有誤。(If0b9d、b/249519359)
- 修正問題:如果交易與會變更返回堆疊的交易混合,系統會為實際未變更返回堆疊的交易,分派 onBackStackChangeListener回呼。(I0eb5c、b/279306628)
1.6.0-beta01 版
2023 年 4 月 19 日
發布 androidx.fragment:fragment-*:1.6.0-beta01。1.6.0-beta01 版包含以下修訂項目。
修正錯誤
- 使用 postponeEnterTransition設定逾時時間,然後取代延後的片段,就不會再導致延後的片段洩漏。(I2ec7d、b/276375110)
- 即使多筆交易包含相同片段,新的 onBackStackChangeStarted和onBackStackChangeCommitted回呼現在也只會傳送片段一次。(Ic6b69)
1.6.0-alpha09 版
2023 年 4 月 5 日
發布 androidx.fragment:fragment-*:1.6.0-alpha09。1.6.0-alpha09 版包含以下修訂項目。
API 變更
- DialogFragment現在提供- requireComponentDialog()API,可存取基礎- ComponentDialog。(I022e3、b/234274777)
- 片段 commitNow()、executePendingTransactions()和popBackStackImmediate()API 已使用@MainThread註解,表示現在如果不是從主要執行緒呼叫這些 API,系統會擲回建構錯誤,而不是等到執行階段才失敗。(Ic9665、b/236538905)
修正錯誤
- 修正 FragmentManager中的錯誤,在同一影格中儲存及還原可能會導致異常終止。(Ib36af、b/246519668)
- OnBackStackChangedListener、- onBackStackChangeStarted和- onBackStackChangeCommitted回呼現在只會在- FragmentManager返回堆疊變更時執行。(I66055、b/274788957)
1.6.0-alpha08 版
2023 年 3 月 22 日
發布 androidx.fragment:fragment-*:1.6.0-alpha08。1.6.0-alpha08 版包含以下修訂項目。
行為變更
- OnBackStackChangedListener.onBackStackChangeCommited回呼的執行時間已調整為在片段作業執行前。這樣一來,回呼就絕不會收到已卸載的片段。(I66a76、b/273568280)
修正錯誤
- 在 Fragment 1.5.6中:修正如果Lifecycle已是STARTED狀態,且已有結果可用,在setFragmentResultListener內呼叫clearFragmentResultListener時會無法運作的問題。(If7458)
依附元件更新
- Fragment 現在依附於 Lifecycle 2.6.1。(586fe7)
- Fragment 現在依附於 SavedState 1.2.1。(078e4e)
- Fragment 現在依附於 ProfileInstaller 1.3.0。(3fc05b)
1.6.0-alpha07 版
2023 年 3 月 8 日
發布 androidx.fragment:fragment-*:1.6.0-alpha07。1.6.0-alpha07 版包含此連結所列的修訂項目。
修正錯誤
- 在 Fragment 1.5.6中:修正移除任何 Fragment (無論是否已新增選單項目) 都會使活動選單失效的問題。(50f098、b/244336571)
1.6.0-alpha06 版
2023 年 2 月 22 日
發布 androidx.fragment:fragment-*:1.6.0-alpha06。1.6.0-alpha06 版包含以下修訂項目。
行為變更
- FragmentManager的- onBackStackChangedListener上新增的- onBackStackChangedStarted回呼現在會在片段開始移至目標狀態前執行。(I34726)
1.6.0-alpha05 版
2023 年 2 月 8 日
發布 androidx.fragment:fragment-*:1.6.0-alpha05。1.6.0-alpha05 版包含此連結所列的修訂項目。
新功能
- FragmentManager.OnBackStackChagnedListener介面現在提供- onBackStackChangeStarted和- onBackStackChangeCommitted這兩個額外的回呼,可提供更多額外資訊,並控管- FragmentManager中返回堆疊的變更時間 (Ib7ce5、b/238686802)
API 變更
- 採用 Intent或IntentSender的Fragment和FragmentManagerAPI 現在可正確加註@NonNull,以免傳遞空值,因為空值一定會立即導致這些方法呼叫的各個 Android 架構 API 發生當機問題 (I06fd4)
1.6.0-alpha04 版本
2022 年 12 月 7 日
發布 androidx.fragment:fragment-*:1.6.0-alpha04。1.6.0-alpha04 版本包含以下修訂版本。
新功能
- FragmentStrictMode新增了- WrongNestedHierarchyViolation,可偵測子項片段是否以巢狀結構位於其父項的檢視區塊階層中,但不會新增至父項的- childFragmentManager。(I72521, b/249299268)
行為變更
- 片段現在會在 onAttach()之前還原其SavedStateRegistry狀態,以確保可從所有向上生命週期方法中取得。(I1e2b1)
API 變更
- fragment-testing-manifest成果會將資訊清單項目與片段測試元件的其他部分分開。也就是說,您可以執行以下操作:
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
這可避免因 fragment-testing 與 androidx.test 之間的版本偏差而發生衝突。(I8e534、b/128612536)
修正錯誤
- 在 Fragment 1.5.5中:Fragment 不再錯誤地將ViewModel狀態儲存為檢視畫面註冊資料庫儲存狀態的一部分。(I10d2b, b/253546214)
1.6.0-alpha03 版本
2022 年 10 月 5 日
發布 androidx.fragment:fragment:1.6.0-alpha03、androidx.fragment:fragment-ktx:1.6.0-alpha03 和 androidx.fragment:fragment-testing:1.6.0-alpha03。1.6.0-alpha03 版本包含以下修訂項目。
API 變更
- 延伸 DialogFragment的類別現在須在其onDismiss()覆寫中呼叫超級程式庫 (I14798、b/238928865)
修正錯誤
- 修正整合新的供應商回呼介面 (OnConfigurationChangedProvider、OnMultiWindowModeChangedProvider、OnTrimMemoryProvider、OnPictureInPictureModeChangedProvider) 時引發的迴歸問題,確保片段一律會獲得適當的回呼 (I9b380、I34581、(I8dfe6、b/242570955)、If9d6b、Id0096、I690b3、I2cba2)
1.6.0-alpha02 版本
2022 年 8 月 24 日
發布 androidx.fragment:fragment:1.6.0-alpha02、androidx.fragment:fragment-ktx:1.6.0-alpha02 和 androidx.fragment:fragment-testing:1.6.0-alpha02。1.6.0-alpha02 版包含以下修訂項目。
修正錯誤
- 片段1.5.2︰修正同時執行popBackStack()和replace()交易的問題,會導致離開的片段執行錯誤的Animation/Animator(Ib1c07、b/214835303)。
1.6.0-alpha01 版本
2022 年 7 月 27 日
發布 androidx.fragment:fragment:1.6.0-alpha01、androidx.fragment:fragment-ktx:1.6.0-alpha01 和 androidx.fragment:fragment-testing:1.6.0-alpha01。1.6.0-alpha01 版包含以下修訂項目。
行為變更
- Fragment的儲存狀態已全面區分成兩種類型,一種是私人程式庫狀態 (自訂- Parcelable類別),另一種則是開發人員提供的狀態;開發人員提供的狀態現在一律儲存在- Bundle之中,允許判定片段的狀態確切來自於何處 (b/207158202)。
修正錯誤
- 在 Fragment 1.5.1中:修正DialogFragmentCallbacksDetector中的迴歸 (使用 Lint 版本套裝組合與 AGP 7.4 會導致 Lint 當機的問題) (b/237567009)。
依附元件更新
- 在 Fragment 1.5.1中:Fragment 程式庫現在會依附於 Lifecycle2.5.1(Id204c)。
- 在 Fragment 1.5.1中:Fragment 程式庫現在會依附於 Activity1.5.1(I10f07)。
1.5 版本
1.5.7 版
2023 年 4 月 19 日
發布 androidx.fragment:fragment:1.5.7、androidx.fragment:fragment-ktx:1.5.7 和 androidx.fragment:fragment-testing:1.5.7。1.5.7 版包含以下修訂項目。
修正錯誤
- 使用 postponeEnterTransition設定逾時時間,然後取代延後的片段,就不會再導致延後的片段洩漏。(I2ec7d、b/276375110)
1.5.6 版
2023 年 3 月 22 日
發布 androidx.fragment:fragment:1.5.6、androidx.fragment:fragment-ktx:1.5.6 和 androidx.fragment:fragment-testing:1.5.6。1.5.6 版包含以下修訂版本。
修正錯誤
- 修正問題:無論片段是否已新增選單項目,移除任何片段都會導致活動的選單失效。(50f098、b/244336571)
- 修正問題:如果 Lifecycle已是STARTED且已有結果,在setFragmentResultListener內呼叫clearFragmentResultListener無效。(If7458)
1.5.5 版本
2022 年 12 月 7 日
發布 androidx.fragment:fragment:1.5.5、androidx.fragment:fragment-ktx:1.5.5 和 androidx.fragment:fragment-testing:1.5.5。1.5.5 版包含以下修訂版本。
修正錯誤
- Fragment 不再將 ViewModel狀態錯誤儲存為檢視畫面註冊資料庫儲存狀態的一部分。(I10d2b, b/253546214)
1.5.4 版本
2022 年 10 月 24 日
發布 androidx.fragment:fragment:1.5.4、androidx.fragment:fragment-ktx:1.5.4 和 androidx.fragment:fragment-testing:1.5.4。1.5.4 版包含以下修訂項目。
修正錯誤
- 已修正主機未實作提供者回呼介面 (OnConfigurationChangedProvider、OnMultiWindowModeChangedProvider、OnTrimMemoryProvider、OnPictureInPictureModeChangedProvider) 的自訂FragmentController,以及呼叫已淘汰的調度函式可能無法調度至子項片段的錯誤 (I9b380)。
1.5.3 版本
2022 年 9 月 21 日
發布 androidx.fragment:fragment:1.5.3、androidx.fragment:fragment-ktx:1.5.3 和 androidx.fragment:fragment-testing:1.5.3。1.5.3 版包含以下修訂項目。
修正錯誤
- 已修正導致返回堆疊上的片段取得 onMultiWindowModeChanged()、onPictureInPictureModeChanged()、onLowMemory()和onConfigurationChanged()回呼的錯誤 (I34581、I8dfe6、b/242570955)
- 巢狀結構子項片段將不再接收多個 onMultiWindowModeChanged()、onPictureInPictureModeChanged()、onLowMemory()或onConfigurationChanged()回呼 (I690b3、Id0096、If9d6b、I2cba2)
1.5.2 版本
2022 年 8 月 10 日
發布 androidx.fragment:fragment:1.5.2、androidx.fragment:fragment-ktx:1.5.2 和 androidx.fragment:fragment-testing:1.5.2。1.5.2 版包含以下修訂項目。
修正錯誤
- 修正問題:同時執行 popBackStack()和replace()交易,會導致離開的片段執行錯誤的Animation/Animator(Ib1c07、b/214835303)。
1.5.1 版本
2022 年 7 月 27 日
發布了 androidx.fragment:fragment:1.5.1、androidx.fragment:fragment-ktx:1.5.1 和 androidx.fragment:fragment-testing:1.5.1。1.5.1 版包含此連結所列的修訂項目。
修正錯誤
- 修正 DialogFragmentCallbacksDetector中的迴歸 (使用 Lint 版本套裝組合與 AGP 7.4 會導致 Lint 當機的問題) (b/237567009)。
依附元件更新
- Fragment 程式庫現在會依附於 Lifecycle 2.5.1(Id204c)。
- Fragment 程式庫現在會依附於 Activity 1.5.1(I10f07)。
1.5.0 版本
2022 年 6 月 29 日
發布了 androidx.fragment:fragment:1.5.0、androidx.fragment:fragment-ktx:1.5.0 和 androidx.fragment:fragment-testing:1.5.0。1.5.0 版包含以下修訂項目。
自 1.4.0 版本以來的重要異動
- CreationExtras 整合 - Fragment現在可透過 Lifecycle2.5.0的CreationExtras提供無狀態ViewModelProvider.Factory。
- 元件對話方塊整合 - DialogFragment現在會透過 Activity1.5.0使用ComponentDialog做為onCreateDialog()傳回的預設對話方塊。
- 已儲存的執行個體狀態重構 - 片段儲存其執行個體狀態的方式已開始變更,這是為了清楚識別在片段中儲存的狀態,以及狀態的來源。目前的變更項目包括:
- FragmentManager現在會將已儲存的執行個體狀態儲存到- Bundle,而不是直接儲存至自訂的- Parcelable。
- 透過 Fragment Result APIs設定但尚未傳送的結果,現在會與FragmentManager的內部狀態分開儲存。
- 與個別片段相關聯的狀態現在會與 FragmentManager內部狀態分開儲存,方便您將與個別片段相關聯的已儲存狀態數量,與Fragment偵錯記錄中記錄的專屬 ID 建立關聯
 
其他變更
- FragmentStrictMode現在可讓第三方私人片段,使用含有類別名稱的- allowViolation()來略過特定違規行為的懲罰。
- 用於為活動 ActionBar提供選單的 Fragment API 已淘汰。Activity1.4.0中新增的MenuHost和MenuProviderAPI 提供了片段應使用的等同 API 介面,該介面可進行測試,且知道生命週期的情形。
1.5.0-rc01 版本
2022 年 5 月 11 日
發布 androidx.fragment:fragment:1.5.0-rc01、androidx.fragment:fragment-ktx:1.5.0-rc01 和 androidx.fragment:fragment-testing:1.5.0-rc01。1.5.0-rc01 版包含以下修訂項目。
已儲存的執行個體狀態重構
- 與個別片段相關聯的狀態現在會與 FragmentManager內部狀態分開儲存,方便您將與個別片段相關聯的已儲存狀態數量,與片段偵錯記錄中記錄的專屬 ID 建立關聯。(a153e0、b/207158202)。
1.5.0-beta01 版本
2022 年 4 月 20 日
發布了 androidx.fragment:fragment:1.5.0-beta01、androidx.fragment:fragment-ktx:1.5.0-beta01 和 androidx.fragment:fragment-testing:1.5.0-beta01。1.5.0-beta01 版包含以下修訂項目。
API 變更
- DialogFragment新增了新的- dismissNow方法,該方法使用- commitNow來與- showNow函式進行成對。請注意,這樣做不會立即關閉- Dialog,而只會同步更新- FragmentManager的狀態。(I15c36、b/72644830)
已儲存的執行個體狀態重構
- FragmentManager現在會將已儲存的執行個體狀態儲存到- Bundle,而不是直接儲存至自訂的- Parcelable。這是為片段實際儲存的內容提供更高透明度的第一步。(I93807、b/207158202)
- 透過 Fragment Result API 設定但尚未傳送的結果,現在會與 FragmentManager內部狀態分開儲存。這樣一來,就更容易掌握已儲存的執行個體狀態到底儲存了哪些結果。(I6ea12、b/207158202)
1.5.0-alpha05 版本
2022 年 4 月 6 日
發布了 androidx.fragment:fragment:1.5.0-alpha05、androidx.fragment:fragment-ktx:1.5.0-alpha05 和 androidx.fragment:fragment-testing:1.5.0-alpha05。1.5.0-alpha05 版包含以下修訂項目。
API 變更
- Fragment的- setHasOptionsMenu()已淘汰。如要管理選單及其選單項目,請依據 Fragment- 1.5.0-alpha04版本資訊改用新的選單 API。(I7b4b4、b/226438239)
1.5.0-alpha04 版本
2022 年 3 月 23 日
發布了 androidx.fragment:fragment:1.5.0-alpha04、androidx.fragment:fragment-ktx:1.5.0-alpha04 和 androidx.fragment:fragment-testing:1.5.0-alpha04。1.5.0-alpha04 版包含以下修訂項目。
API 變更
- 用於為活動 ActionBar提供選單的 Fragment API 已淘汰,因為這些 API 將片段與活動緊密結合,無法單獨測試。Activity1.4.0-alpha01中新增的MenuHost和MenuProviderAPI 提供了片段應使用的等同 API 介面,該介面可進行測試,且知道生命週期的情形。(I50a59、I20758)
修正錯誤
- SavedStateViewFactory現在支援使用- CreationExtras(即使已透過- SavedStateRegistryOwner初始化)。如果提供額外項目,系統將忽略初始化的引數 (I6c43b、b/224844583)。
1.5.0-alpha03 版
2022 年 2 月 23 日
發布了 androidx.fragment:fragment:1.5.0-alpha03、androidx.fragment:fragment-ktx:1.5.0-alpha03 和 androidx.fragment:fragment-testing:1.5.0-alpha03。1.5.0-alpha03 版包含以下修訂項目。
API 變更
- 您現在可以將 CreationExtras傳送至by viewModels()和by activityViewModels()函式。(Ibefe7、b/217601110)
行為變更
- DialogFragment現在會使用- ComponentDialog做為- onCreateDialog()傳回的預設對話方塊。(If3784、b/217618170)
1.5.0-alpha02 版本
2022 年 2 月 9 日
發布了 androidx.fragment:fragment:1.5.0-alpha02、androidx.fragment:fragment-ktx:1.5.0-alpha02 和 androidx.fragment:fragment-testing:1.5.0-alpha02。1.5.0-alpha02 版包含此連結所列的修訂項目。
新功能
- FragmentStrictMode現在提供私人第三方片段的功能,可讓您使用有類別名稱的- allowViolation()來略過特定違規行為。(I8f678)
1.5.0-alpha01 版本
2022 年 1 月 26 日
發布了 androidx.fragment:fragment:1.5.0-alpha01、androidx.fragment:fragment-ktx:1.5.0-alpha01 和 androidx.fragment:fragment-testing:1.5.0-alpha01。1.5.0-alpha01 版包含此連結所列的修訂項目。
新功能
- Fragment現已整合 ViewModel CreationExtras,並引進做為 Lifecycle- 2.5.0-alpha01的部分元件。(I3060b、b/207012585)
修正錯誤
- 在 Fragment 1.4.1中:當 xml 產生的檢視 ID 為負值時,FragmentContainerView不會再擲回非法狀態例外狀況。(Ic185b、b/213086140)
- 在 Fragment 1.4.1中:搭配by viewModels()延遲函式使用自訂ownerProducerlambda 時,系統現在會在沒有提供自訂ViewModelProvider.Factory的情況下,使用該擁有者所提供的defaultViewModelProviderFactory,而不是一律使用片段的工廠。(I56170、b/214106513)
- 修正從 Fragment的registerForActivityResult()回呼首次存取ViewModel時會停止運作的問題。(Iea2b3)
1.4 版本
1.4.1 版本
2022 年 1 月 26 日
發布 androidx.fragment:fragment:1.4.1、androidx.fragment:fragment-ktx:1.4.1 和 androidx.fragment:fragment-testing:1.4.1。1.4.1 版包含以下修訂項目。
修正錯誤
- 當 xml 產生的檢視畫面 ID 為負值時,FragmentContainerView不會再擲回非法狀態例外狀況。(Ic185b、b/213086140)
- 搭配 by viewModels()延遲函式使用自訂ownerProducerlambda 時,系統現在會在沒有提供自訂ViewModelProvider.Factory的情況下,使用該擁有者所提供的defaultViewModelProviderFactory,而不是一律使用片段的工廠。(I56170、b/214106513)
1.4.0 版本
2021 年 11 月 17 日
發布 androidx.fragment:fragment:1.4.0、androidx.fragment:fragment-ktx:1.4.0 和 androidx.fragment:fragment-testing:1.4.0。1.4.0 版包含以下修訂項目。
自 1.3.0 版以來的重要異動
- FragmentStrictModeAPI 提供的執行階段檢查可讓您驗證依賴的應用程式或程式庫不會呼叫已淘汰的片段 API。當系統偵測到違規項目時,您可以選擇列印記錄訊息、觸發自己的自訂事件監聽器,或是讓應用程式停止運作。您可以透過新的- setStrictModePolicy()方法在- FragmentManager上設定- FragmentStrictMode.Policy,藉此控制要啟用哪些檢查以及觸發哪些「懲罰」。這項政策適用於該- FragmentManager,並會轉移給所有未設定專屬政策的子項片段管理員。請參閱適用於片段的 StrictMode。
- FragmentContainerView現在提供- getFragment()方法,此方法會傳回最近新增至容器的片段。這會使用與- FragmentContainerViewID 相同的- findFragmentById()邏輯,但允許鏈結呼叫。- val navController = binding.container.getFragment<NavHostFragment>().navController
- FragmentScenario現已實作- Closeable,方便您搭配 Kotlin 的- use方法或 try-with-resources 使用。
- 新增 - FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE},以指定是否要啟用在片段轉換效果中擷取自主題的標準「活動轉換」動畫。
- 已移除 - FragmentManager.enableNewStateManager(boolean)的實驗性 API,現在只能使用新狀態管理員。
多個返回堆疊
FragmentManager 會維護使用 addToBackStack() 片段交易組成的返回堆疊。這可以讓您使用以片段儲存狀態機制來填入這些交易並回復先前的狀態,讓片段正確還原狀態。
此版本根據這三個新的 FragmentManager API (saveBackStack(String name)、restoreBackStack(String name) 和 clearBackStack(String name)) 進一步擴充這些機制。這些 API 使用與 addToBackStack() 相同的 name 來儲存 FragmentTransaction 的狀態,以及這些交易中所有新增片段的狀態,方便您日後使用完整的狀態來還原這些交易及其片段。這可讓您透過儲存目前的返回堆疊及還原已儲存的返回堆疊,以有效率的方式在多個返回堆疊之間「切換」。
saveBackStack() 的運作方式與 popBackStack() 類似,差別在於執行非同步動作時,所有片段交易都會傳回至該特定名稱,以便執行反向撤銷 (亦即「填入」) 以及所有即將捨棄的片段,但有以下幾項差異:
- saveBackStack()總是包含在內。
- 如果在返回堆疊中找不到指定的名稱,或者提供的是空值名稱,popBackStack()會在返回堆疊中填入所有交易。反之,如果您先前並未使用addToBackStack()提供確切的非空值名稱來修訂片段交易,saveBackStack()就不會執行任何動作。
- 只要是透過這些交易新增的片段,系統就會儲存其狀態。這表示系統會儲存所有片段的 View 狀態,呼叫每個片段的 onSaveInstanceState()並還原該狀態,並且保留與這些片段相關聯的任何ViewModel執行個體 (且不會對這些片段呼叫onCleared())。
可與 saveBackStack() 搭配使用的片段交易必須符合下列條件:
- 所有片段交易都必須使用 setReorderingAllowed(true),確保交易能夠以單一、不可部分完成的作業進行還原。
- 所儲存的交易組合必須保持獨立 (也就是說,交易不得明確參照該交易組合以外的任何片段),以確保不論返回堆疊日後發生任何變更,交易隨時都能順利還原。
- 所有儲存的片段都不得為保留片段,也不得在其子項片段的過渡組合中建立保留片段,以確保 FragmentManager不會在返回堆疊儲存後將任何參照傳回至已儲存片段。
與 saveBackStack() 類似,restoreBackStack() 和 clearBackStack() 分別會還原先前儲存的返回堆疊,以及清除先前儲存的返回堆疊,但如果您先前不曾使用相同的名稱呼叫 saveBackStack(),它們都不會執行任何動作。
詳情請參閱多個返回堆疊:深入探索一文。
1.4.0-rc01 版本
2021 年 11 月 3 日
發布 androidx.fragment:fragment:1.4.0-rc01,且自 Fragment 1.4.0-beta01 以來皆無變更。1.4.0-rc01 版包含以下修訂項目。
1.4.0-beta01 版本
2021 年 10 月 27 日
發布 androidx.fragment:fragment:1.4.0-beta01、androidx.fragment:fragment-ktx:1.4.0-beta01 和 androidx.fragment:fragment-testing:1.4.0-beta01。1.4.0-beta01 版本包含這些修訂版本。
修正錯誤
- 父項片段現在會分派 onHiddenChanged()至其整個階層,然後再啟動自己的回呼。(Iedc20、b/77504618)
- 現在如果使用開放鍵盤從一個片段前往另一個有回收器檢視畫面的片段,鍵盤會自動關閉。(I8b842、b/196852211)
- DialogFragment現在會在您呼叫- show()、- showNow()或- dismiss()時,針對其所有建立的交易使用- setReorderingAllowed(true)。(Ie2c14)
- DetachAndAttachFragmentInSameFragmentTransaction的極長 Lint 警告已縮短為- DetachAndAttachSameFragment。(e9eca3)
1.4.0-alpha10 版本
2021 年 9 月 29 日
發布 androidx.fragment:fragment:1.4.0-alpha10、androidx.fragment:fragment-ktx:1.4.0-alpha10 和 androidx.fragment:fragment-testing:1.4.0-alpha10。1.4.0-alpha10 版包含以下修訂項目。
Lint
- 新增 DetachAndAttachFragmentInSameFragmentTransactionLint 警告,用於偵測在相同的FragmentTransaction中,於同一個Fragment同時呼叫detach()和attach()的情形,由於這些互補作業會在相同交易中完成時取消彼此,因此必須將它們拆分為不同交易,才能實際執行。(aosp/1832956、b/200867930)
- 使用 MenuHost的addMenuProviderAPI 時,針對 Fragment Lifecycle 的修正功能在 Fragment 檢視畫面 Lifecycle 加入FragmentAddMenuProviderLint 錯誤。(aosp/1830457、b/200326272)
說明文件更新
- API 的淘汰訊息現在已由 Activity Result API (即startActivityForResult、startIntentSenderForResult、onActivityResult、requestPermissions和onRequestPermissionsResult) 處理,並已加以擴充以提供更多詳細資料。(cce80f)
- Fragment和- DialogFragment的- onActivityCreated()淘汰訊息已全部展開,而且提供更多詳細資料。(224db4)
1.4.0-alpha09 版本
2021 年 9 月 15 日
發布 androidx.fragment:fragment:1.4.0-alpha09、androidx.fragment:fragment-ktx:1.4.0-alpha09 和 androidx.fragment:fragment-testing:1.4.0-alpha09。1.4.0-alpha09 版包含以下修訂項目。
新功能
- 您現在可以呼叫 clearBackStack(name)以清除先前使用saveBackStack(name)儲存的任何狀態。(I70cd7)
API 變更
- FragmentContainerView類別已按照 Kotlin 重新編寫,確保- getFragment函式正確遵循空值。(If694a、b/189629145)
- FragmentstrictMode 現已以 Kotlin 編寫 (I11767、b/199183506)
修正錯誤
- 透過 setReorderingAllowed(true)新增片段,並在執行待處理交易前立即移除該片段的情況下,片段的狀態無法正確清理,這個問題現已修正。(I8ccb8)
1.4.0-alpha08 版本
2021 年 9 月 1 日
發布 androidx.fragment:fragment:1.4.0-alpha08、androidx.fragment:fragment-ktx:1.4.0-alpha08 和 androidx.fragment:fragment-testing:1.4.0-alpha08。1.4.0-alpha08 版包含以下修訂項目。
修正錯誤
- 改善 UseRequireInsteadOfGetLint 檢查功能,以更妥善的方式處理冗餘括號。(I2d865)
- 改善 UseGetLayoutInflaterLint 檢查功能,以處理額外的邊緣案例。(Ie5423)
1.4.0-alpha07 版本
2021 年 8 月 18 日
發布 androidx.fragment:fragment:1.4.0-alpha07、androidx.fragment:fragment-ktx:1.4.0-alpha07 和 androidx.fragment:fragment-testing:1.4.0-alpha07,但沒有重大異動。1.4.0-alpha07 版包含以下修訂項目。
1.4.0-alpha06 版本
2021 年 8 月 4 日
發布 androidx.fragment:fragment:1.4.0-alpha06、androidx.fragment:fragment-ktx:1.4.0-alpha06 和 androidx.fragment:fragment-testing:1.4.0-alpha06。1.4.0-alpha06 版包含以下修訂項目。
修正錯誤
- 修正在返回堆疊之間快速切換時,如果還原 FragmentTransaction為顯示片段的第二副本,就會有多個返回堆疊以IllegalStateException顯示的問題。(I9039f)
- 修正即使在還原狀態之後,FragmentManager仍會保留之前透過saveBackStack()儲存狀態副本的問題。(Ied212)
- 透過 show(FragmentTransaction, String)方法明確新增 DialogFragment 時,在狀態儲存完畢後呼叫DialogFragment的dismissAllowingStateLoss()方法不會再導致當機。(I84422)
1.4.0-alpha05 版本
2021 年 7 月 21 日
發布 androidx.fragment:fragment:1.4.0-alpha05、androidx.fragment:fragment-ktx:1.4.0-alpha05 和 androidx.fragment:fragment-testing:1.4.0-alpha05。1.4.0-alpha05 版包含以下修訂項目。
修正錯誤
- 在 Fragment 1.3.6中:當根層級檢視畫面已設定transitionGroup=”true”時,Fragment 的檢視畫面現在會於使用hide()時正確設定為GONE。(aosp/1766655、b/193603427)
- 在 Fragment 1.3.6中:FragmentActivity現在一律會解鎖儲存的狀態為生命週期回呼中覆寫的第一個作業。(I6db7a)
依附元件更新
- 在 Fragment 1.3.6中:片段現在取決於活動1.2.4(I3a66c)
1.4.0-alpha04 版本
2021 年 6 月 30 日
發布 androidx.fragment:fragment:1.4.0-alpha04、androidx.fragment:fragment-ktx:1.4.0-alpha04 和 androidx.fragment:fragment-testing:1.4.0-alpha04。1.4.0-alpha04 版包含此連結所列的修訂項目。
API 變更
- 現在 FragmentManager會在背景中使用SavedStateRegistry儲存狀態。saveAllState()和restoreSavedState()方法現在已於FragmentController中淘汰。如果您要使用FragmentController代管位於FragmentActivity以外的片段,就必須讓FragmentHostCallbacks執行SavedStateRegistryOwner。(Iba68e、b/188734238)
修正錯誤
- 修正問題:執行使用 replace()的FragmentTransaction時如果同時完成,呼叫saveBackStack()做為支援多個返回堆疊的要求會失敗。(I73137)
- 修正如果針對多個返回堆疊支援使用 restoreBackStack()API,就會在手動儲存包含多個交易的返回堆疊後出現NullPointerException的問題。這也修正了系統不會針對所有交易檢查setReorderingAllowed(true)的問題。(I8c593)
- 修正問題:FragmentManager以錯誤的方式繼續還原之前已儲存的片段狀態,即使那些片段已從FragmentManager移除也會如此,因此導致儲存的狀態會隨著時間持續增長。(I1fb8e)
1.4.0-alpha03 版本
2021 年 6 月 16 日
發布 androidx.fragment:fragment:1.4.0-alpha03、androidx.fragment:fragment-ktx:1.4.0-alpha03 和 androidx.fragment:fragment-testing:1.4.0-alpha03。1.4.0-alpha03 版包含以下修訂項目。
新功能
- 所有 Fragment strictMode Violation類別已更新,提供更詳細的錯誤訊息,說明違規問題詳情。(b/187871638)- FragmentTagUsageViolation現在包含更詳細的錯誤訊息,說明容器要插入片段的父項容器。(Ic33a7)
- WrongFragmentContainerViolation現在有更詳細的錯誤訊息,包括要新增片段的容器。(Ib55f8)
- TargetFragmentUsageViolation的用途類別現在包含更詳細的錯誤訊息,說明違規事項和任何其他包含的資訊。(Icc6ac)
- 擴充 RetainInstanceUsageViolation的類別現在有更詳細的錯誤訊息,包含導致違規的片段。(I6bd55)
- FragmentReuseViolation現在提供更多詳細錯誤訊息,包含片段的前一個 ID。(I28ce2)
- SetUserVisibleHintViolation現在會顯示更詳細的錯誤訊息,包含設定的使用者顯示提示。(Ib2d5f)
 
行為變更
- 已還原在 FragmentContainerView上呼叫fitsSystemWindows的限制 - 應用程式不再因此當機。(6b8ddd、b/190622202)
修正錯誤
- 在 Fragment 1.3.5中:修正在 Fragment1.3.4由 aosp/1679887 造成的共用元素轉換中的迴歸。片段現在可以正確地處理轉換群組 (直接透過transitionGroup="true"設定,或透過transitionName或background間接設定),共用元素將不再傳送IndexOutOfBoundsException。(I16484、b/188679569、b/188969304)
- 嘗試隱藏移除的片段時,FragmentManager不會再停止運作 (I573dd、b/183634730)
- 評估最高等級變數時,OnCreateDialogIncorrectCallbackLint 檢查將不再停止運作。(0a9efa、b/189967522)。
1.4.0-alpha02 版本
2021 年 6 月 2 日
發布 androidx.fragment:fragment:1.4.0-alpha02、androidx.fragment:fragment-ktx:1.4.0-alpha02 和 androidx.fragment:fragment-testing:1.4.0-alpha02。1.4.0-alpha02 版包含此連結所列的修訂項目。
新功能
- 現在無論目前使用的嚴格模式政策為何,FragmentStrictMode都會透過FragmentManager進行記錄時一律記錄違規行為。(I02df6、b/187872638)。
- FragmentStrictMode現支援將特定- Fragment類別從嚴格模式- Violation中排除,使該類別略過任何懲處。(Ib4e5d、b/184786736)
- 我們已進一步擴充 - FragmentStrictMode- Violation類別,以根據每項違規加入結構資訊。這可讓您驗證導致違規的確切原因以及違規的片段 (If5118、b/187871150),每個- Violation包含以下項目:- WrongFragmentContainerViolation現在包含- Fragment嘗試加入的目標- ViewGroup。(I83c75、b/187871150)
- TargetFragmentUsageViolation已展開為- SetTargetFragmentUsageViolation、- GetTargetFragmentUsageViolation和- GetTargetFragmentRequestCodeUsageViolation,其中- SetTargetFragmentUsageViolation包含目標片段和要求代碼。(I741b4、b/187871150)
- SetUserVisibleHintViolation現在包含傳送至- setUserVisibleHint()的布林值 (I00585、b/187871150)
- FragmentTagUsageViolation現在包含- <fragment>標記嘗試將片段灌入的 ViewGroup。(I5dbbc、b/187871150)
- FragmentReuseViolation現在包含過去導致 Viotion 的- Fragment執行個體專屬 ID。(I0544d、b/187871150)
- RetainInstanceUsageViolation現在為摘要,且有兩個子類別:- SetRetainInstanceUsageViolation和- GetRetainInstanceUsageViolation,分別代表兩種違規類型的案件。(Ic81e5、b/187871150)
 
行為變更
- FragmentContainerView現在在嘗試以程式控制方式或透過 XML 變更- fitsSystemWindow屬性時,會擲回例外狀況。插邊應由個別片段的檢視畫面處理。(Ie6651、b/187304502)
1.4.0-alpha01 版本
2021 年 5 月 18 日
發布 androidx.fragment:fragment:1.4.0-alpha01、androidx.fragment:fragment-ktx:1.4.0-alpha01 和 androidx.fragment:fragment-testing:1.4.0-alpha01。1.4.0-alpha01 版包含以下修訂版本。
新功能
- FragmentContainerView現在提供- getFragment()方法,此方法會傳回最近新增至容器的片段。這會使用 ID 與- FragmentContainerView相同的- findFragmentById()邏輯,但允許鏈結呼叫。(Ife17a、b/162527857)- val navController = binding.container.getFragment<NavHostFragment>().navController
- 新增 - FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE},以指定是否要啟用在片段轉換效果中擷取自主題的標準「活動轉換」動畫。(I46652)
多個返回堆疊
FragmentManager 會維護使用 addToBackStack() 片段交易組成的返回堆疊。這可以讓您使用以片段儲存狀態機制來填入這些交易並回復先前的狀態,讓片段正確還原狀態。
此版本根據這兩個新的 FragmentManager API (saveBackStack(String name) 和 restoreBackStack(String name)) 進一步擴充這些機制。這些 API 使用與 addToBackStack() 相同的 name 來儲存 FragmentTransaction 的狀態,以及這些交易中所有新增片段的狀態,方便您日後使用完整的狀態來還原這些交易及其片段。這可讓您透過儲存目前的返回堆疊及還原已儲存的返回堆疊,以有效率的方式在多個返回堆疊之間「切換」。
saveBackStack() 的運作方式與 popBackStack() 類似,差別在於執行非同步動作時,所有片段交易都會傳回至該特定名稱,以便執行反向撤銷 (亦即「填入」) 以及所有即將捨棄的片段,但有以下幾項差異:
- saveBackStack()總是包含在內。
- 如果在返回堆疊中找不到指定的名稱,或者提供的是空值名稱,popBackStack()會在返回堆疊中填入所有交易。反之,如果您先前並未使用addToBackStack()提供確切的非空值名稱來修訂片段交易,saveBackStack()就不會執行任何動作。
- 只要是透過這些交易新增的片段,系統就會儲存其狀態。這表示系統會儲存所有片段的 View 狀態,呼叫每個片段的 onSaveInstanceState()並還原該狀態,並且保留與這些片段相關聯的任何ViewModel執行個體 (且不會對這些片段呼叫onCleared())。
可與 saveBackStack() 搭配使用的片段交易必須符合下列條件:
- 所有片段交易都必須使用 setReorderingAllowed(true),確保交易能夠以單一、不可部分完成的作業進行還原。
- 所儲存的交易組合必須保持獨立 (也就是說,交易不得明確參照該交易組合以外的任何片段),以確保不論返回堆疊日後發生任何變更,交易隨時都能順利還原。
- 所有儲存的片段都不得為保留片段,也不得在其子項片段的過渡組合中建立保留片段,以確保 FragmentManager不會在返回堆疊儲存後將任何參照傳回至已儲存片段。
與 saveBackStack() 類似,如果您之前不曾使用相同的名稱呼叫 saveBackStack(),restoreBackStack() 就不會有任何動作。(b/80029773)
Fragment strictMode
FragmentStrictMode API 提供的執行階段檢查可讓您驗證依賴的應用程式或程式庫不會呼叫已淘汰的片段 API。當系統偵測到違規項目時,您可以選擇列印記錄訊息、觸發自己的自訂事件監聽器,或是讓應用程式停止運作。您可以透過新的 setStrictModePolicy() 方法在 FragmentManager 上設定 FragmentStrictMode.Policy,藉此控制要啟用哪些檢查以及觸發哪些「懲罰」。這項政策適用於該 FragmentManager,並會轉移給所有未設定專屬政策的子項片段管理員。(#123、#131、#150、b/143774122)
- 不論先前移除的 Fragment執行個體是否會重新加入至FragmentManager,detectFragmentReuse()都會偵測。在Fragment執行個體已經刪除且從FragmentManager移除後,請勿與其互動或保留其參考。(#142、b/153738653)
- detectFragmentTagUsage()會偵測您是否於版面配置 XML 中使用- <fragment>標記。加載片段為版面配置的部分時,您應總是使用- FragmentContainerView。(#141、b/153738235)
- detectWrongFragmentContainer()會偵測您新增至容器的片段是否不是- FragmentContainerView。建議您一律使用- FragmentContainerView做為版面配置中的片段容器。(#146、b/181137036)
- detectRetainInstanceUsage()會偵測您是否使用已淘汰的- setRetainInstance()或- getRetainInstance()API。(#140、b/153737954)
- detectSetUserVisibleHint()會偵測你是否使用已淘汰的- setUserVisibleHint()API。(#136、b/153738974)
- detectTargetFragmentUsage()會偵測您是否使用已淘汰的- setTargetFragment()、- getTargetFragment()或- getTargetRequestCode()API。(#139、b/153737745)
API 變更
- 已移除 FragmentManager.enableNewStateManager(boolean)的實驗性 API,現在只能使用新狀態管理員。(I90036、b/162776418)
- FragmentScenario現已實作- Closeable,讓您搭配 Kotlin 的- use方法或 try-with-resources 使用。(#121、b/143774122)
新的 Lint 檢查
- 在 DialogFragment中使用LayoutInflater.from(Context)時,UseGetLayoutInflaterLint 檢查現在會顯示警告 - 請務必使用對話方塊片段的getLayoutInflater()方法以取得適合的LayoutInflater。(#156、b/170781346)
- DialogFragmentCallbacksDetectorLint 檢查現在會於- DialogFragment的- onCreateDialog()方法中呼叫- setOnCancelListener或- setOnDismissListener時發出警告 - 這些事件監聽器為- DialogFragment擁有,且您應覆寫- onCancel()和- onDismiss()以接收這些回呼。(#171、b/181780047、b/187524311)
修正錯誤
- 在 Fragment 1.3.4 中:修正搭配 ViewModelProvider或在 Fragment 中 的viewModel()Jetpack Compose 方法使用ViewTreeViewModelStoreOwner.get()時,會在 Fragment1.3.3加入迴歸的問題。如果片段會覆寫getDefaultViewModelProviderFactory(),這些用途現在會正確地使用該片段提供的ViewModelProvider.Factory(與@AndroidEntryPoint使用 Hilt 時註解 Fragment 的方式相同)。如果未覆寫該方法,與 Fragment 檢視畫面一起的儲存和還原狀態的SavedStateViewModelFactory就會建立為預設中心。(I5cbfa、b/186097368)
- 在 Fragment 1.3.4 中:在 API 29 上使用 FragmentContainerView時,插邊不會再無限期地分派,這修正了BottomNavigationBar和FloatingActionButton執行個體的問題。(I1bb78、b/186012452)
- 在 Fragment 1.3.4 中:現在您可以在處理結束後,從片段結果套裝組合中擷取 Parcelable。(I65932、b/187443158)
- 在 Fragment 1.3.4 中:在 ViewGroup 上執行共用元素轉換時,如果 ViewGroup 的 transitionGroup設為 False,就能正確進行轉換。(I99675)
外部貢獻
- 感謝 simonschiller 製作 FragmentScenario實作Closeable。(#121、b/143774122)
- 感謝 simonschiller 加入適合此版本的 FragmentStrictModeAPI 整體!(#123、#131、#150、b/143774122、#142、b/153738653、#141、b/153738235、#146、b/181137036、#140、b/153737954、#136、b/153738974、#139、b/153737745)
- 感謝 tatocaster 加入 UseGetLayoutInflaterLint 檢查。(#156、b/170781346)
- 感謝 tatocaster 加入 DialogFragmentCallbacksDetectorLint 檢查。(#171、b/181780047)
1.3 版本
1.3.6 版本
2021 年 7 月 21 日
發布 androidx.fragment:fragment:1.3.6、androidx.fragment:fragment-ktx:1.3.6 和 androidx.fragment:fragment-testing:1.3.6。1.3.6 版包含以下修訂項目。
修正錯誤
- 在 Fragment 1.4.0-alpha03中:嘗試隱藏移除片段時,FragmentManager不會再停止運作。(I573dd、b/183634730)
- 當根層級畫面檢視已設定 transitionGroup=”true”時,Fragment 的畫面檢視現在會於使用hide()時正確地設為GONE。(aosp/1766655、b/193603427)
- FragmentActivity現在一律會解鎖儲存的狀態為生命週期回呼中覆寫的第一個作業。(I6db7a)
依附元件更新
- 在 Fragment 1.3.6中:片段現在取決於活動1.2.4(I3a66c)
1.3.5 版本
2021 年 6 月 16 日
發布 androidx.fragment:fragment:1.3.5、androidx.fragment:fragment-ktx:1.3.5 和 androidx.fragment:fragment-testing:1.3.5。1.3.5 版包含以下修訂項目。
修正錯誤
- 修正在 Fragment 1.3.4由 aosp/1679887 造成的共用元素轉換中的迴歸。片段現在可以正確地處理轉換群組 (直接透過transitionGroup="true"設定,或透過transitionName或background間接設定),共用元素將不再傳送IndexOutOfBoundsException。(I16484、b/188679569、b/188969304)
1.3.4 版本
2021 年 5 月 18 日
發布 androidx.fragment:fragment:1.3.4、androidx.fragment:fragment-ktx:1.3.4 和 androidx.fragment:fragment-testing:1.3.4。1.3.4 版包含以下修訂項目。
修正錯誤
- 修正搭配 ViewModelProvider或在 Fragment 中 的viewModel()Jetpack Compose 方法使用ViewTreeViewModelStoreOwner.get()時,會在 Fragment1.3.3加入迴歸的問題。如果片段會覆寫getDefaultViewModelProviderFactory(),這些用途現在會正確地使用該片段提供的ViewModelProvider.Factory(與@AndroidEntryPoint註解片段的方式相同)。如果未覆寫該方法,與 Fragment 檢視畫面一起的儲存和還原狀態的SavedStateViewModelFactory就會建立為預設中心。(I5cbfa、b/186097368)
- 在 API 29 上使用 FragmentContainerView時,插邊不會再無限期地分派,這修正了BottomNavigationBar和FloatingActionButton執行個體的問題。(I1bb78、b/186012452)
- 現在您可以在處理結束後,從片段結果套裝組合中擷取 Parcelable。(I65932、b/187443158)
- 在 ViewGroup 上執行共用元素轉換時,如果 ViewGroup 的 transitionGroup設為 False,就能正確進行轉換。(I99675)
1.3.3 版本
2021 年 4 月 21 日
發布 androidx.fragment:fragment:1.3.3、androidx.fragment:fragment-ktx:1.3.3 和 androidx.fragment:fragment-testing:1.3.3。1.3.3 版包含以下修訂項目。
新功能
- 搭配 Fragment 的 View 使用 ViewTreeSavedStateRegistryOwner.get()時,傳回的SavedStateRegistryOwner現在可以正確與SavedStateViewModelFactory搭配使用。(I21acf、b/181577191)
修正錯誤
- 修正 Fragment 1.3.2中引起的迴歸問題;填入FragmentTransaction且包含setPrimaryNavFragment作業 (例如NavHostFragment使用的作業) 時,此問題會導致popEnter動畫無法執行。(I38c87、b/183877426)
- FragmentContainerView現在會確保每個- Fragment都會分派一組新的- WindowInsets,確保每個片段現在都能獨立消耗插邊。(I63f68、b/172153900)
- 當子項片段所加入的容器與自訂 Dialog類別的其中一個容器 ID 相同時,DialogFragment現在可以妥善處理這類情況,因此解決了重複使用BottomSheetDialog等對話方塊內部使用的 ID 時導致的檢視區塊階層問題。(Ie6279、b/180021387)
- FragmentManager.dump()現在可正確地在已啟用片段的清單中縮排第一個片段。(If5c33、b/183705451)
新狀態管理員錯誤修正
- 新的片段狀態管理員現在可透過隱藏作業,正確地處理結束事件轉換。(I9e4de、b/184830265)
1.3.2 版本
2021 年 3 月 24 日
發布 androidx.fragment:fragment:1.3.2、androidx.fragment:fragment-ktx:1.3.2 和 androidx.fragment:fragment-testing:1.3.2。1.3.2 版包含以下修訂項目。
新狀態管理員錯誤修正
- 同時執行 popBackStack()和commit()作業時,上次作業會設定所有動畫的方向,而不會執行某些快顯動畫和部分進入的動畫。(I7072e、b/181142246)
- 在共用元素階層中的檢視畫面將不再於執行共用元素轉換時清除轉換名稱。(I4d4a6、b/179934757)
依附元件更新
- 片段現在依附於 Activity 1.2.2,修正使用 Fragment 1.3.1 以上版本時 Activity 的 InvalidFragmentVersionForActivityResultLint 檢查問題。
- 片段現在依附於 Lifycycle 2.3.1。
1.3.1 版本
2021 年 3 月 10 日
發布 androidx.fragment:fragment:1.3.1、androidx.fragment:fragment-ktx:1.3.1 和 androidx.fragment:fragment-testing:1.3.1。1.3.1 版包含以下修訂項目。
新功能
- DialogFragment中的對話方塊現可透過 DecorView 存取 ViewTree 擁有者,確保- DialogFragment可與- ComposeView搭配使用。(Ib9290、b/180691023)
修正錯誤
- 使用 FragmentContainerView 匯入現有 RESUMED活動的片段,現在會在設定變更後正確顯示。(Ie14c8、b/180538371)
- 片段 toString()的結尾不再有額外的}(I54705、b/177761088)
- FragmentActivity 中的覆寫方法現在可正確繼承基礎方法 javaDoc (I736ce、b/139548782)
- setFragmentResult和- setFragmentResultListener的文件已更新其參數文件,使其不再接受是否可為空值 (I990ba、b/178348386)
新狀態管理員錯誤修正
- 修正 mFocusedView造成的片段記憶體流失問題 (Ib4e9e、b/179925887)
- 使用顯示/隱藏交易時,片段現在可以正確呼叫 onCreateOptionsMenu(I8bce8、b/180255554)
- 有片段 (轉換前開始) 的子項片段現在可以正確觸及 RESUMED(Ic11e6、b/180825150)
- 使用 <fragment>標記加載的片段現在一律適用於RESUMED(I452ac、I9fa49)
依附元件更新
1.3.0 版本
2021 年 2 月 10 日
發布 androidx.fragment:fragment:1.3.0、androidx.fragment:fragment-ktx:1.3.0 和 androidx.fragment:fragment-testing:1.3.0。1.3.0 版包含以下修訂項目。
自 1.2.0 版以來的重大異動
- 新的狀態管理員:FragmentManager的重大內部重新編寫修正了多個生命週期、動畫和轉換分派的問題,以及延期片段的處理方式。
- Activity Result API 整合:新增 Activity - 1.2.0的- ActivityResultRegistryAPI 支援,可處理- startActivityForResult()+- onActivityResult()和- requestPermissions()+- onRequestPermissionsResult()流程,除了針對測試這些流量提供的掛鉤之外,不會覆寫 Fragment 中的方法。請參閱最新的從活動取得結果。- 此版本修正了幾項無效要求代碼的問題以及權限指派要求,避免 Activity Result API 使用舊版 FragmentActivity。您必須升級至 1.3.0 版,才能在FragmentActivity或AppCompatActivity中使用 Activity Result API。
 
- 此版本修正了幾項無效要求代碼的問題以及權限指派要求,避免 Activity Result API 使用舊版 
- Fragment Result API:現支援透過 - FragmentManager的新 API 在兩個片段之間傳送結果。這項功能適用於「導覽」中的階層片段 (父項/子項)、DialogFragment 和片段,且可確保結果至少傳送給- STARTED時,Fragment 才會傳送到您的片段。目標片段 API 已淘汰,並改用新的 API。請參閱使用 Fragment Result API 取得結果。
- FragmentOnAttachListener:- FragmentActivity和- Fragment的- onAttachFragment()回呼已淘汰。已新增- FragmentOnAttachListener以提供更靈活的替代方案,您可將- onAttachFragment()委派給其他獨立且可測試的事件監聽器,並支援除了直接子項 FragmentManager 之外,在 FragmentManagers 中加入事件監聽器。
- FragmentScenario改善:- fragment-testing構件中的- FragmentScenario類別在 Kotlin 中經過重新編寫,並進行了幾項改善:- FragmentScenario現在使用- setMaxLifecycle()以實作- moveToState(),確保所有 API 層級的行為一致,並解除 Fragment 狀態與基礎 Activity 之間的關係。
- FragmentScenario現在支援設定初始- Lifecycle.State,藉此在初次移動至各個- Lifecycle.State前先確認片段狀態。
- 現在提供 onFragment的FragmentScenarioAPI 替代選項,此選項採用 Kotlin 修訂後擴充功能方法withFragment,可讓您回傳值。值得一提的是,這個區塊會擷取指定區塊中產生的例外狀況。
 
- ViewTree支援:- Fragment現在支援在Lifecycle- 2.3.0中新增的- ViewTreeLifecycleOwner.get(View)、- ViewTreeViewModelStoreOwner.get(View)和- ViewTreeSavedStateRegistryOwnerAPI SavedState- 1.1.0,可使 Fragment 傳回- ViewModelStoreOwner,Fragment 則與- SavedStateRegistryOwner和- LifecycleOwner連結至片段的 Lifecyle 檢視畫面 (在- Fragment內使用- View時)。
- TRANSIT_動畫變更:片段預設效果、- TRANSIT_FRAGMENT_OPEN、- TRANSIT_FRAGMENT_CLOSE和- TRANSIT_FRAGMENT_FADE現在會使用- Animator,而不是- Animation。用於建構這些 Animator 的資源現已設為不公開。
- setRetainInstance()淘汰:Fragment 中的- setRetainInstance()方法已淘汰。推出 ViewModels 後,開發人員可利用特定 API 保留狀態,並將其與 Activity、Fragment 和 Navigation 圖表建立關聯。因此,開發人員可以使用一般且未保留的片段,並分別保留所需的特定狀態,避免常見的外洩來源、同時保留單一建立與刪除保留狀態的實用屬性 (也就是- ViewModel和- onCleared()回呼)。
- ViewPager 1 轉接程式淘汰:ViewPager2 - 1.0.0推出後,與- ViewPager互動的- FragmentPagerAdapter和- FragmentStatePagerAdapter類別已淘汰。請參閱從 ViewPager 移轉至 ViewPager2。
1.3.0-rc02 版本
2021 年 1 月 27 日
發布 androidx.fragment:fragment:1.3.0-rc02、androidx.fragment:fragment-ktx:1.3.0-rc02 和 androidx.fragment:fragment-testing:1.3.0-rc02。1.3.0-rc02 版包含此連結所列的修訂項目。
修正錯誤
- 修正設定變更後,父項 DialogFragment會顯示在子項DialogFragment上方的問題;子項對話方塊片段一律顯示在上層對話方塊片段上方。(I30806、b/177439520)
- 修正問題:如果使用 Animation執行hide作業,會導致隱藏片段在動畫結束時閃爍。(I57e22、b/175417675)
- 在附加檢視表階層之前新增的轉換片段,現在可與 RESUMED正確連結。(I1fc1d、b/177154873)
新狀態管理員錯誤修正
- Fragment 的檢視畫面 Lifecycle現在可以正確地處理在Lifecycle達到CREATED之前刪除片段的檢視畫面,避免出現表示「沒有來自 INITIALIZED 的下傳事件」例外內容。(eda2bd、b/176138645)
- 使用 Animator的片段現在會在使用FragmentContainerView時,以正確的順序顯示。(Id9aa3、b/176089197)
1.3.0-rc01 版本
2020 年 12 月 16 日
發布 androidx.fragment:fragment:1.3.0-rc01、androidx.fragment:fragment-ktx:1.3.0-rc01 和 androidx.fragment:fragment-testing:1.3.0-rc01。1.3.0-rc01 版包含以下修訂項目。
修正錯誤
- onPrepareOptionsMenu()現在使用與- onCreateOptionsMenu()相同的邏輯,而父項片段呼叫- setMenuVisibility(false)時不會再呼叫此方法。(Id7de8、b/173203654)
新狀態管理員錯誤修正
- 已修正將含有 Animation的片段新增至FragmentContainerView後,會干擾 Pop 作業加入的問題。(I952d8)
- 修正在 onCreate()或onViewCreated()方法中如果遭到取代,片段檢視畫面就會保留在檢視區塊階層中的問題。(I8a7d5)
- 繼續處理時,聚焦現已還原至 Fragment 根層級檢視畫面。(Ifc84b)
- 在同一個片段交易中結合填入和取代作業,現在會顯示正確的動畫 (Ifd4e4、b/170328691)
1.3.0-beta02 版本
2020 年 12 月 2 日
發布 androidx.fragment:fragment:1.3.0-beta02、androidx.fragment:fragment-ktx:1.3.0-beta02 和 androidx.fragment:fragment-testing:1.3.0-beta02。1.3.0-beta02 版包含以下修訂項目。
新功能
- FragmentScenario已完全轉換為 Kotlin,同時使用 Kotlin 1.4 適用於- FragmentAction的功能介面,確保原始碼與二進位檔相容。(I19d31)
行為變更
- 不用使用 class或android:name屬性加載片段的 FragmentContainerView 現在可以在FragmentActivity之外使用。(Id4397、b/172266337)
- 嘗試將片段時間生命週期上限設為 DESTROYED時,將會擲回IllegalArgumentException(Ie7651、b/170765622)
- 初始化處於 DESTROYED狀態的 FragmentScenario 時,現在會擲回IllegalArgumentException(I73590、b/170765622)
新狀態管理員錯誤修正
- 修正問題:如果使用 Animator或TRANSIT_FRAGMENT_選項的片段轉換過程中斷,檢視畫面不會達到最終狀態。(I92426、b/169874632)
- 修正會導致正在結束 Animation的片段無法正確刪除的錯誤 (I83d65)
- 結束的片段如果反轉其效果,現在會正確地取消並以正確的輸入效果重新開始。(I62226、b/167092035)
- 修正 hide()的Animator結束事件無法執行的問題。(Id7ffe)
- 片段現在會於延遲然後立即啟動時正確顯示。(Ie713b、b/170022857)
- 片段如果在動畫期間移除其聚焦的檢視畫面,將不再於達到 RESUMED時嘗試在卸離的檢視畫面上還原焦點 (I38c65、b/172925703)
外部貢獻
- FragmentFactory現在會針對不同的- ClassLoader執行個體分別快取片段類別。感謝 Simon Schiller!(#87、b/113886460)
1.3.0-beta01 版本
2020 年 10 月 1 日
發布 androidx.fragment:fragment:1.3.0-beta01、androidx.fragment:fragment-ktx:1.3.0-beta01 和 androidx.fragment:fragment-testing:1.3.0-beta01。1.3.0-beta01 版包含以下修訂項目。
新功能
- setMaxLifecycle()現在支援將- Lifecycle狀態設為- INITIALIZING,但前提是該片段尚未移至- CREATED。(b/159662173)
API 變更
- 升級 Androidx 版本即可使用 Kotlin 1.4 (Id6471、b/165307851、b/165300826)
行為變更
- 片段資源檔案已正確對外公開。(aosp/1425237)
修正錯誤
- 使用 <fragment>標記加載的片段現在會正確等待,直到其檢視畫面加入容器中,再移動至 STARTED (I02f4c)
- 會先顯示,然後 setMaxLifecycle()至CREATED的片段現在會正確地執行其結束效果。(b/165822335)
- 移除未新增至返回堆疊的卸離的片段,不會再造成記憶體流失。感謝 Nicklas Ansman Giertz!(b/166489383)
- 使用中的片段現在一律有非空值 FragmentManager,且有非空值FragmentManager的片段一律視為使用中 (aosp/1422346)
- 片段預設效果 TRANSIT_FRAGMENT_OPEN、TRANSIT_FRAGMENT_CLOSE和TRANSIT_FRAGMENT_FADE現在會使用Animator,而不是Animation。(b/166155034)
新狀態管理員錯誤修正
- 片段現在會在動畫開始播放前正確還原檢視畫面焦點狀態。(Icc256)
- 只有共用元素轉換的片段,現在會正確完成其特殊效果,也就是說,這些片段會實際轉換至其最終狀態 (Iaebc7、b/166658128)
- 在刪除片段前,系統一律會從容器中移除片段檢視。(Id5876)
- 新版狀態管理員現在一律會先移除退場片段的檢視畫面,然後再加入進場片段的檢視畫面。(I41a6e)
- 新版狀態管理員現在會遵循片段檢視畫面瀏覽權限的明確變更。也就是說,如果在動畫開始前將進入片段的檢視畫面設為 INVISIBLE,該檢視畫面就不會保持顯示。(b/164481490)
- 片段現在會以 Animators優先,而不是Animations,也就是說,如果片段同時都有Animator和Animation,就只會執行前者並忽略後者。(b/167579557)
- 新的狀態管理員在使用進入動畫時,不會再導致片段閃爍。(b/163084315)
已知問題
使用新版狀態管理員時,如果在進場特殊效果期間按下返回,而不是返回上一個片段,系統不會再重新加入舊的片段,因而導致畫面空白。(b/167259187、b/167092035、b/168442830)
1.3.0-alpha08 版本
2020 年 8 月 19 日
發布 androidx.fragment:fragment:1.3.0-alpha08、androidx.fragment:fragment-ktx:1.3.0-alpha08 和 androidx.fragment:fragment-testing:1.3.0-alpha08。1.3.0-alpha08 版包含以下修訂項目。
新狀態管理員
此版本包含 FragmentManager 內部狀態管理的重大重構,主要影響生命週期方法、動畫和轉換作業的分派,以及延遲交易的處理方式。這個選項預設為啟用。詳情請參閱片段:重新建立內部網誌文章。(b/139536619、b/147749580)
- 您可以使用 FragmentManager.enableNewStateManager(boolean)中的實驗性 API 來控制 FragmentManager 是否使用新版狀態管理工具。(I7b6ee)
您只能透過使用新版狀態管理員的方式解決以下問題:
- replace作業的上一個片段現在會於新的片段開始前正確停止。(b/161654580)
- 片段現在會避免在相同片段中出現多個競爭動畫,避免 Animation覆寫所有Transition效果,或是只針對個別片段執行Animator和Transition。(b/149569323)
- 所有進入和結束片段的 enterTransition和exitTranstion現在都會執行,而非只有最後一個進入片段和第一個結束片段。(b/149344150)
- 已延後的片段不再卡在 CREATED狀態,而是會然後與其他片段一起移至STARTED。(b/129035555)
- 修正在混合延後的重新預訂交易和非重新預訂交易時,FragmentManager會不正確執行運算子的問題。(b/147297731)
- 在延後片段時,同時填入多個片段不會再導致暫時顯示中繼片段 (b/37140383)
- 在 onAttachFragment()回呼中呼叫findFragmentById()或findFragmentByTag()時,FragmentManager現可傳回正確片段 (b/153082833)
- 用於替換的片段延後時,片段就不會再對遭刪除的片段呼叫 onCreateView()(b/143915710)
- 嘗試合併架構 Transition和 AndroidXTransition執行個體時的錯誤訊息,現在會提及含有無效轉換的片段。(b/155574969)
行為變更
- 您現在可以在片段的 onCreate()生命週期方法中,對ActivityResultLauncher呼叫launch()。(b/161464278)
- 在 onCreate()之後呼叫registerForActivityResult()現在可擲回例外狀況,表示不允許此設定,而非在設定變更後直接不傳回結果。(b/162255449)
- FragmentActivity現在會使用 Activity- 1.2.0-alpha08中導入的- OnContextAvailableListenerAPI 還原- FragmentManager的狀態。任何新增至- FragmentActivity子類別的事件監聽器,都會在此事件監聽器之後執行。(I513da)
修正錯誤
- 現在必須遵循使用 startIntentSenderForResult()傳遞的ActivityOptions(b/162247961)
已知問題
- 使用新版狀態管理員時,如果您直接設定在 onViewCreated()之後和onResume()之前的片段根層級檢視畫面瀏覽權限,負責控管根層級檢視畫面瀏覽權限的FragmentManager就會覆寫您設定的瀏覽權限。為解決這個問題,請一律使用hide()和show()運算變更片段的瀏覽權限。(b/164481490)
1.3.0-alpha07 版本
2020 年 7 月 22 日
發布 androidx.fragment:fragment:1.3.0-alpha07、androidx.fragment:fragment-ktx:1.3.0-alpha07 和 androidx.fragment:fragment-testing:1.3.0-alpha07。1.3.0-alpha07 版包含以下修訂項目。
新功能
- FragmentScenario現在支援將初始 Lifecycle 狀態設為- CREATED、- STARTED或- RESUMED,而不是一律將片段移至- RESUMED狀態。(b/159662750)
- 已新增 onFragment的FragmentScenarioAPI 替代選項,此選項採用 Kotlin 修訂後擴充功能方法withFragment,可讓您回傳值。值得一提的是,這個區塊會擷取指定區塊中產生的例外狀況。(b/158697631)
行為變更
- FragmentScenario現在使用- setMaxLifecycle()來實作- moveToState(),以確保所有 API 級別的行為一致,並解除 Fragment 狀態與基礎 Activity 之間的關係。(b/156527405)
- ViewTreeSavedStateRegistryOwner傳回的- SavedStateRegistryOwner已連結到片段檢視畫面的 Lifecycle。這樣可確保其狀態會與片段檢視畫面的狀態同時儲存和復原。(b/158503763)
修正錯誤
- 片段現在會等待片段的檢視畫面先附加,然後再呼叫 ViewCompat.requestApplyInsets(),避免出現插入要求遺失的情況。(b/158095749)
- 呼叫 clearFragmentResultListener可正確清除生命週期觀察器。(b/159274993)
1.3.0-alpha06 版本
2020 年 6 月 10 日
發布 androidx.fragment:fragment:1.3.0-alpha06、androidx.fragment:fragment-ktx:1.3.0-alpha06 和 androidx.fragment:fragment-testing:1.3.0-alpha06。1.3.0-alpha06 版包含以下修訂項目。
新功能
- FragmentActivity和- Fragment的- onAttachFragment()回呼已淘汰。已新增- FragmentOnAttachListener以提供更靈活的替代方案,您可將- onAttachFragment()委派給其他獨立且可測試的事件監聽器,並支援除了直接子項 FragmentManager 之外,在 FragmentManagers 中加入事件監聽器。(I06d3d)
修正錯誤
- 父項片段現在可以在子項片段之前還原其檢視畫面狀態,修正在 DialogFragment設定將另一個DialogFragment顯示為子項片段後,變更顯示順序的問題。(b/157195715)
- 修正以往 UseRequireInsteadOfGetLint 檢查無法正確處理?.和!!運算子的連續使用情況,這個問題現已修正。(b/157677616)
1.3.0-alpha05 版本
2020 年 5 月 20 日
發布 androidx.fragment:fragment:1.3.0-alpha05、androidx.fragment:fragment-ktx:1.3.0-alpha05 和 androidx.fragment:fragment-testing:1.3.0-alpha05。1.3.0-alpha05 版包含以下修訂項目。
新功能
- 現在可在 Fragment中使用View時執行 Lifecycle2.3.0-alpha03中的ViewTreeViewModelStoreOwner和 SavedState1.1.0-alpha01中的ViewTreeSavedStateRegistryOwner(aosp/1297993、aosp/1300264)
API 變更
- setFragmentResult()和- setFragmentResultListener()API 現已分別採用非空值的- Bundle和- FragmentResultListener。如要明確清除先前設定的結果或事件監聽器,請使用新的- clearFragmentResult()和- clearFragmentResultListener()方法。(b/155416778)
- 用來接收 lambda 的 setFragmentResultListener()Kotlin 擴充功能現已標示為inline。(b/155323404)
行為變更
- 先前已針對 Fragment淘汰的startActivityForResult()、startIntentSenderForResult()和requestPermissions現在於內部使用ActivityResultRegistry,這樣一來,就移除了使用這些 API 時,只能在要求程式碼中使用較低位元 (0xFFFF以下) 的限制。(b/155518741)
說明文件更新
- 已擴充 Fragment(@LayoutRes int)和DialogFragment(@LayoutRes int)建構函式的說明文件,以釐清使用預設FragmentFactory時,您應透過子類別的不含引數建構函式呼叫這些建構函式。(b/153042497)
1.3.0-alpha04 版本
2020 年 4 月 29 日
發布 androidx.fragment:fragment:1.3.0-alpha04、androidx.fragment:fragment-ktx:1.3.0-alpha04 和 androidx.fragment:fragment-testing:1.3.0-alpha04。1.3.0-alpha04 版包含以下修訂項目。
新功能
- 現支援透過 FragmentManager的新 API 在兩個片段之間傳送結果。這項功能適用於「導覽」中的階層片段 (父項/子項)、DialogFragment 和片段,且可確保結果至少傳送給STARTED時,Fragment 才會傳送到您的片段。(b/149787344)
API 變更
- 已淘汰目標片段 API。如要在片段之間傳輸資料,請改用新的 Fragment Result API。(b/149787344)
- Fragment 上的 startActivityForResult()/onActivityResult()和requestPermissions()/onRequestPermissionsResult()API 已淘汰。請使用 Activity Result API。(aosp/1290887)
- 來自 Activity 1.2.0-alpha04的破壞性變更:prepareCall()方法已重新命名為registerForActivityResult()。(aosp/1278717)
修正錯誤
- 片段的 getViewLifecycleOwner()現在會在呼叫onSaveInstanceState()之前停止,為片段生命週期的行為建立鏡射。(b/154645875)
- 呼叫片段的 setMenuVisibility(false)現在可以正確變更其子項片段提供的選單顯示設定。(b/153593580)
- 修正透過 FragmentContainerView將片段新增至DialogFragment的檢視階層時會發生illegalStateException的問題 (b/154366601)
- 代管活動以外的片段時,對片段執行 getDefaultViewModelProviderFactory()方法不會再導致當機問題 (b/153762914)
1.3.0-alpha03 版本
2020 年 4 月 1 日
發布 androidx.fragment:fragment:1.3.0-alpha03、androidx.fragment:fragment-ktx:1.3.0-alpha03 和 androidx.fragment:fragment-testing:1.3.0-alpha03。1.3.0-alpha03 版包含此連結所列的修訂項目。
API 變更
- Fragment的- prepareCall方法現在是- final(b/152439361)
修正錯誤
- 修正使用 BottomSheetDialogFragment時,Fragment1.3.0-alpha02中導入迴歸的問題 (b/151652127、aosp/1263328、aosp/1265163)
- 修正設定變更後,從片段使用 prepareCall的問題。(b/152137004)
- 修正使用 setTargetFragment()時忽略共用元素和結束轉換的問題。(b/152023196)
- 從 Fragment 1.2.4中:更新片段 ProGuard 規則,以允許對保留的片段進行模糊處理。(b/151605338)
- 從 Fragment 1.2.4中:已停用DialogFragment類別的FragmentLiveDataObserveLint 規則,因為其生命週期和檢視畫面生命週期都會保持同步,因此呼叫observe時可以安全使用this或viewLifecycleOwner。(b/151765086)
依附元件變更
- 片段依附於 Activity 1.2.0-alpha03,這可大幅改善 Activity1.2.0-alpha02導入的 Activity Result API。
1.3.0-alpha02 版本
2020 年 3 月 18 日
發布 androidx.fragment:fragment:1.3.0-alpha02、androidx.fragment:fragment-ktx:1.3.0-alpha02 和 androidx.fragment:fragment-testing:1.3.0-alpha02。1.3.0-alpha02 版包含以下修訂項目。
新功能
- 新增 Activity 1.2.0-alpha02中導入的ActivityResultRegistryAPI 支援,可處理startActivityForResult()+onActivityResult()以及requestPermissions()+onRequestPermissionsResult()流程,除了提供用於測試這些流程的掛鉤之外,不會覆寫 Fragment 中的方法。請參閱最新的從 Activity 取得結果。(b/125158199)
API 變更
- DialogFragment現在提供採用- @LayoutRes的建構函式,可指出- onCreateView()預設應加載的版面配置。(b/150327080)
- onActivityCreated()方法現已淘汰。修飾片段檢視畫面的程式碼應透過- onViewCreated()執行 (在- onActivityCreated()之前呼叫),而其他初始化程式碼則應在- onCreate()中執行。如要在活動的- onCreate()完成時接收回呼,- LifeCycleObserver活動應於- onAttach()中活動的- Lifecycle註冊,並在收到- onCreate()回呼時移除。(b/144309266)
修正錯誤
- 在 Fragment 1.2.3中:修正在onCreateDialog()內呼叫getLayoutInflater()時,在DialogFragment中導致StackOverflowError的錯誤。(b/117894767、aosp/1258664)
- 在 Fragment 1.2.3中:縮減 Fragment 內含 ProGuard 規則的範圍,以確保系統可移除未使用的 Fragment 類別。(b/149665169)
- 在 Fragment 1.2.3中:修正UseRequireInsteadOfGet使用遮蔽 Kotlin 屬性名稱的本機變數名稱時,系統會進行檢查的問題。(b/149891163)
- 自 Fragment 1.2.3起:版面配置預覽中使用的建構函式有誤時,FragmentContainerView不會再擲回UnsupportedOperationException(b/149707833)
已知問題
- BottomSheetDialogFragment不再正確地固定螢幕上的對話方塊。(b/151652127)
1.3.0-alpha01 版本
2020 年 3 月 4 日
發布 androidx.fragment:fragment:1.3.0-alpha01、androidx.fragment:fragment-ktx:1.3.0-alpha01 和 androidx.fragment:fragment-testing:1.3.0-alpha01。1.3.0-alpha01 版包含以下修訂項目。
新功能
- 新增支援 Lifecycle 2.3.0-alpha01中新增的ViewTreeLifecycleOwner.get(View)API,以便針對onCreateView()傳回的任何檢視畫面傳回 Fragment 的viewLifecycleOwner做為LifecycleOwner。(aosp/1182955)
API 變更
- Fragment 中的 setRetainInstance()方法已淘汰。推出 ViewModels 後,開發人員可利用特定 API 保留狀態,並將其與 Activity、Fragment 和 Navigation 圖表建立關聯。因此,開發人員可以使用一般且未保留的片段,並分別保留所需的特定狀態,避免常見的外洩來源、同時保留單一建立與刪除保留狀態的實用屬性 (也就是ViewModel和onCleared()回呼)。(b/143911815)
- 隨著 ViewPager2 1.0.0的推出,用於與ViewPager互動的FragmentPagerAdapter和FragmentStatePagerAdapter類別已經淘汰。請參閱從 ViewPager 移轉至 ViewPager2。(b/145132715)
修正錯誤
- Fragment ProGuard 規則現在只會保留預設建構函式的 Fragment類別 (而不是所有Fragment執行個體),這修正了 Fragment1.2.1中導入的迴歸問題。(b/149665169
- Fragment 1.2.2中新增的require___()Lint 規則,在本機變數名稱與已覆蓋的 Kotlin 資源名稱相同時,不會再發生誤判情形 (例如view)。(b/149891163)
- 使用 Android Studio 中的版面配置預覽時,FragmentContainerView不會再擲回UnsupportedOperationException(b/149707833)
- 修正狀態儲存後新增的保留片段不會持續重新建立,且會在每次設定變更後刪除。(b/145832397)
1.2.5 版本
1.2.5 版本
2020 年 6 月 10 日
發布 androidx.fragment:fragment:1.2.5、androidx.fragment:fragment-ktx:1.2.5 和 androidx.fragment:fragment-testing:1.2.5。1.2.5 版包含以下修訂項目。
修正錯誤
- 片段的 getViewLifecycleOwner()現在會在呼叫onSaveInstanceState()之前停止,為片段生命週期的行為建立鏡射。這項功能之前已於 Fragment1.3.0-alpha04中推出。(b/154645875)
- 呼叫片段的 setMenuVisibility(false)現在可以正確變更其子項片段提供的選單顯示設定。這項功能之前已於 Fragment1.3.0-alpha04中推出。(b/153593580)
1.2.4 版本
1.2.4 版本
2020 年 4 月 1 日
發布 androidx.fragment:fragment:1.2.4、androidx.fragment:fragment-ktx:1.2.4 和 androidx.fragment:fragment-testing:1.2.4。1.2.4 版包含以下修訂項目。
修正錯誤
- 更新 Fragment ProGuard 規則,以允許對保留的片段進行模糊處理。(b/151605338)
- 已停用 DialogFragment類別中FragmentLiveDataObserveLint 規則,因為其生命週期和檢視畫面生命週期都會保持同步,因此呼叫observe時可以安全使用this或viewLifecycleOwner。(b/151765086)
1.2.3 版本
1.2.3 版本
2020 年 3 月 18 日
發布 androidx.fragment:fragment:1.2.3、androidx.fragment:fragment-ktx:1.2.3 和 androidx.fragment:fragment-testing:1.2.3。1.2.3 版包含以下修訂項目。
修正錯誤
- 修正 DialogFragment中的錯誤,此錯誤在onCreateDialog()內呼叫getLayoutInflater()會導致StackOverflowError。(b/117894767、aosp/1258665)
- 縮減 Fragment 內含 ProGuard 規則的範圍,以確保系統可移除未使用的片段類別。(b/149665169)
- 修正問題:使用遮蔽 Kotlin 屬性名稱的本機變數名稱時,UseRequireInsteadOfGetLint 檢查會出現偽陽性 (b/149891163)
- FragmentContainerView無法再因為於版面配置預覽中使用不正確的建構函式擲回- UnsupportedOperationException。(b/149707833)
1.2.2 版本
1.2.2 版本
2020 年 2 月 19 日
發布 androidx.fragment:fragment:1.2.2、androidx.fragment:fragment-ktx:1.2.2 和 androidx.fragment:fragment-testing:1.2.2。1.2.2 版包含以下修訂項目。
新的 Lint 檢查
- Lint 建議使用 viewLifecycleOwner做為LifecycleOwner,以呼叫onCreateView()、onViewCreated()和onActivityCreated()中的OnBackPressedDispatcher。(b/142117657)
- 新增 Lint 檢查,確認您在使用 fragment-testing成果時使用的是正確的debugImplementation。(b/141500106)
- 片段現在會建議針對同時包含 get和require同等項目的所有 Fragment API 使用相關聯的require___()方法,以取得更多描述性錯誤訊息,而不要使用checkNotNull(get___())、requireNonNull(get___())或get___()!!。(aosp/1202883)
修正錯誤
- 修正 Fragment ProGuard 檔案以避免 R8 警告 (b/148963981)
- 改善現有的 Lint 檢查,建議使用 observe時使用viewLifecycleOwner,這樣也可以處理observe的livedata-ktx擴充功能方法版本。(b/148996309)
- 修正許多 Lint 檢查的格式 (aosp/1157012)
外部貢獻
- 感謝 Zac Sweers 代表 Slack 提供 require___()的 Lint 檢查!(aosp/1202883)
1.2.1 版本
1.2.1 版本
2020 年 2 月 5 日
發布 androidx.fragment:fragment:1.2.1、androidx.fragment:fragment-ktx:1.2.1 和 androidx.fragment:fragment-testing:1.2.1。1.2.1 版包含以下修訂項目。
修正錯誤
- 透過 add和replace方法新增的片段,採用Class執行個體 (或 Kotlin 修訂版) 現已預設由 ProGuard 保留。(b/148181315)
- 執行 finishUpdate()時,FragmentStatePagerAdapter和FragmentPagerAdapter不再偵測到FragmentManager擲回的例外狀況。(aosp/1208711)
- 修正 FragmentManager.findFragment()無法與透過<fragment>標記新增的片段搭配運作的問題。(b/147784323)
- 使用 <fragment>標記加載的片段,現在會在版面配置中onCreate()之前一律接受onInflate()的呼叫。(aosp/1215856)
- 當 Activity 已經刪除時,針對 FragmentManager執行個體呼叫toString()不會再擲回NullPointerException。(b/148189412)
依附元件變更
- 片段 1.2.1現在取決於 Lifecycle ViewModel SavedState2.2.0。
版本 1.2.0
版本 1.2.0
2020 年 1 月 22 日
發布 androidx.fragment:fragment:1.2.0、androidx.fragment:fragment-ktx:1.2.0 和 androidx.fragment:fragment-testing:1.2.0。1.2.0 版包含以下修訂項目。
自 1.1.0 版以來的重要異動
- FragmentContainerView:FragmentContainerView是強烈建議加入的片段,用於動態新增片段,取代FrameLayout或其他版面配置。這也支援與<fragment>標記相同的class、android:name和選用android:tag,但使用一般FragmentTransaction新增這個初始片段,而非<fragment>使用的自訂程式碼路徑。
- onDestroyView()時間碼:片段現在會等待結束動畫、結束架構轉換,然後結束 AndroidX 轉換 (使用轉換- 1.3.0時) 結束,再呼叫- onDestroyView()。
- 以類別為基礎的 add()和replace():在FragmentTransaction中加入add()與replace()的超載,並採用Class<? extends Fragment>和選用的Bundle引數。這些方法會使用您的FragmentFactory建構要新增的 Fragment 執行個體。使用修正類型的 Kotlin 擴充功能 (例如fragmentTransaction.replace<YourFragment>(R.id.container)) 也已新增至fragment-ktx。
- Lifecycle ViewModel SavedState 整合:現在 SavedStateViewModelFactory在搭配 Fragment 使用by viewModels()、by activityViewModels()、ViewModelProvider建構函式或ViewModelProviders.of()時,使用的是原廠預設選項。
- 新 Lint 檢查:新增 Lint 檢查,以確保您在透過 onCreateView()、onViewCreated()或onActivityCreated()觀察LiveData時使用的是getViewLifecycleOwner()。
- getFragmentManager()淘汰:Fragment 的- getFragmentManager()和- requireFragmentManager()方法已淘汰,並由單一- getParentFragmentManager()方法取代,這個方法會傳回 Fragment 加入的非空值- FragmentManager(您可以使用- isAdded()來判斷呼叫是否安全)。
- 淘汰 FragmentManager.enableDebugLogging():靜態FragmentManager.enableDebugLogging方法已淘汰。FragmentManager 現在會遵循用於FragmentManager標記的Log.isLoggable(),因此您不必重新編譯應用程式,就能啟用DEBUG或VERBOSE記錄。
已知問題
- 僅在 FragmentContainerView透過class或android:name屬性參考的片段,不會由 ProGuard 自動保留,您必須手動為每個片段類別新增保留規則。(b/142601969)
- 在含有 FragmentContainerView的 XML 中使用class或android:name加入NavHostFragment時,您無法在 Activity 的onCreate()中使用findNavController()。(b/142847973)
1.2.0-rc05 版本
2020 年 1 月 8 日
發布 androidx.fragment:fragment:1.2.0-rc05、androidx.fragment:fragment-ktx:1.2.0-rc05 和 androidx.fragment:fragment-testing:1.2.0-rc05。1.2.0-rc05 版包含以下修訂項目。
修正錯誤
- 修正使用 <fragment>標記時 Fragment1.2.0-rc04中會導致活動刪除時無法正確呼叫onViewCreated()的問題。(b/146290333)
- 使用 <fragment>標記新增的片段現在也能正常清除 NonConfig,即使只是有時出現在版面配置中 (也就是僅出現在橫向版面配置中) 也一樣。因此,即使這些片段不在版面配置中,也會正確地移至CREATED,而不會建立執行個體卻不透過任何生命週期方法移動。(b/145769287)
1.2.0-rc04 版本
2019 年 12 月 18 日
發布 androidx.fragment:fragment:1.2.0-rc04、androidx.fragment:fragment-ktx:1.2.0-rc04 和 androidx.fragment:fragment-testing:1.2.0-rc04。1.2.0-rc04 版包含以下修訂項目。
修正錯誤
- 已調整 TRANSIT_FRAGMENT_OPEN、TRANSIT_FRAGMENT_CLOSE和TRANSIT_FRAGMENT_FADE的動畫,以免發生視覺問題。(b/145468417)
1.2.0-rc03 版本
2019 年 12 月 4 日
發布 androidx.fragment:fragment:1.2.0-rc03、androidx.fragment:fragment-ktx:1.2.0-rc03 和 androidx.fragment:fragment-testing:1.2.0-rc03。1.2.0-rc03 版包含以下修訂項目。
修正錯誤
- 修正在結束動畫/轉換執行期間,findFragmentById()/findFragmentByTag()仍會傳回已移除片段的意外行為變更。(b/143982969、aosp/1167585)
- 如果包含的活動呼叫 onSaveInstanceState(),子項片段現在會正確地在其父項前停止。(b/144380645)
- 修正以下問題:在彈出隱藏的「片段」之後,檢視畫面會錯誤地標記為 INVISIBLE(b/70793925)
- 片段共用元素轉換現在會處理已旋轉、縮放等的檢視畫面 (b/142835261)
說明文件更新
- 釐清有關 setUserVisibleHint()的淘汰說明文件。(b/143897055)
- 改善 setFragmentFactory()和getFragmentFactory()的說明文件,以更有效地表示設定FragmentFactory也會影響子項 FragmentManagers。(aosp/1170095)
依附元件變更
- 片段現在依附於 Lifecycle 2.2.0-rc03、Lifecycle ViewModel SavedState1.0.0-rc03以及 Activity1.1.0-rc03。
1.2.0-rc02 版本
2019 年 11 月 7 日
發布 androidx.fragment:fragment:1.2.0-rc02、androidx.fragment:fragment-ktx:1.2.0-rc02 和 androidx.fragment:fragment-testing:1.2.0-rc02。1.2.0-rc02 版包含以下修訂項目。
修正錯誤
- 在 Kotlin 中,從 onCreateView()、onViewCreated()或onActivityCreated()(於 Fragment1.2.0-rc01中導入) 觀察LiveData時使用getViewLifecycleOwner()的 LintFix,現在會使用 Kotlin 屬性存取語法viewLifecycleOwner,而不是getViewLifecycleOwner()。(aosp/1143821)
1.2.0-rc01 版本
2019 年 10 月 23 日
發布 androidx.fragment:fragment:1.2.0-rc01、androidx.fragment:fragment-ktx:1.2.0-rc01 和 androidx.fragment:fragment-testing:1.2.0-rc01。1.2.0-rc01 版包含以下修訂項目。
新功能
- FragmentContainerView現在除了支援- android:name以外,還支援- class屬性 (與- <fragment>標記的功能相同)。(b/142722242)
- 新增一項 Lint 檢查,確保您在透過 onCreateView()、onViewCreated()或onActivityCreated()觀察LiveData時使用getViewLifecycleOwner()。(b/137122478)
修正錯誤
- DialogFragment上的- onDismiss和- onCancel回呼現在能保證傳送至這些回呼的- DialogInterface並非空值,且- getDialog()會在執行時傳回非空值。(b/141974033)
- FragmentContainerView現已將- class或- android:name定義的片段新增為加載的部分元件,確保- findFragmentById()和- findFragmentByTag()會在之後立即運作 (b/142520327)
- 修正 FragmentContainerView中因狀態已儲存而產生的IllegalStateException(b/142580713)
- 修正 FragmentContainerView類別經模糊處理時,FragmentContainerView中產生的UnsupportedOperationException(b/142657034)
已知問題
- 僅在 FragmentContainerView透過class或android:name屬性參考的片段,不會由 ProGuard 自動保留,您必須手動為每個片段類別新增保留規則。我們已停用建議移至FragmentContainerView的 Lint 規則,直到透過aapt2的問題修正為止。(b/142601969)
1.2.0-beta02 版本
2019 年 10 月 11 日
發布 androidx.fragment:fragment:1.2.0-beta02、androidx.fragment:fragment-ktx:1.2.0-beta02 和 androidx.fragment:fragment-testing:1.2.0-beta02。1.2.0-beta02 版包含以下修訂項目。
修正錯誤
- 修正問題:Fragment 的 onInflate()並未從FragmentContainerView收到正確屬性,例如NavHostFragment。(b/142421837)
1.2.0-beta01 版本
2019 年 10 月 9 日
發布 androidx.fragment:fragment:1.2.0-beta01、androidx.fragment:fragment-ktx:1.2.0-beta01 和 androidx.fragment:fragment-testing:1.2.0-beta01。1.2.0-beta01 版包含以下修訂項目。
新功能
- 透過加入 android:name和選用的android:tagXML 屬性的支援,FragmentContainerView加入了新增初始片段的支援。與<fragment>標記不同的是,FragmentContainerView會在背景中使用FragmentTransaction來新增初始片段,因此可以在FragmentContainerView中進一步執行FragmentTransaction版面配置作業。(b/139830628、b/141177981)
- 片段現在包含 Lint 警告,可讓您快速將 FragmentContainerView替換成<fragment>。(b/139830056)
修正錯誤
- 修正使用 androidx.transition時的ClassCastException。(b/140680619)
- 使用 Transition 1.3.0-beta01時,Fragment 現在會等待androidx.transition轉換作業 (以及架構轉換和動畫,這兩者已分別在 Fragment1.2.0-alpha03和 Fragment1.2.0-alpha02中完成修正) 結束,然後再分派onDestroyView()。(aosp/1119841)
- 使用 Transition 1.3.0-beta01時,Fragment 現在會先取消androidx.transition轉換,然後再啟動相同容器的新轉換/動畫。(aosp/1119841)
- 修正使用 FragmentContainerView時,在片段的根層級使用androidx.transition轉換時的 API 17 和以下版本問題。(b/140361893)
- fragment-testing成果現已支援 AndroidX Test- 1.2.0,修正了與最新版 Espresso 3.2.0 不相容的問題。(b/139100149)
- 移除 FragmentManager 中的 Log.w使用。(aosp/1126468)
已知問題
- Fragment 的 onInflate()並未收到FragmentContainerView的適當屬性,例如NavHostFragment。(b/142421837)
1.2.0-alpha04 版本
2019 年 9 月 18 日
發布 androidx.fragment:fragment:1.2.0-alpha04、androidx.fragment-ktx:example:1.2.0-alpha04 和 androidx.fragment:fragment-testing:1.2.0-alpha04。1.2.0-alpha04 版包含以下修訂項目。
API 變更
- Fragment中的- getFragmentManager()和- requireFragmentManager()方法已淘汰,並由單一- getParentFragmentManager()方法取代,這個方法會傳回 Fragment 加入的非空值- FragmentManager(您可以使用- isAdded()來判斷呼叫是否安全)。(b/140574496)
- 靜態 FragmentManager.enableDebugLogging方法已淘汰。FragmentManager 現在會遵循FragmentManager標記的Log.isLoggable(),因此您不必重新編譯應用程式,就能啟用DEBUG或VERBOSE記錄。(aosp/1116591)
修正錯誤
- 片段現在會在其他片段執行的動畫結束時正確地刪除。(b/140574199)
- 修正問題:片段會不正確地呼叫 Activity.findViewById()。(aosp/1116431)
1.2.0-alpha03 版本
2019 年 9 月 5 日
發布 androidx.fragment:fragment:1.2.0-alpha03、androidx.fragment:fragment-ktx:1.2.0-alpha03 和 androidx.fragment:fragment-testing:1.2.0-alpha03。您可以前往這裡查看這個版本包含的修訂項目。
API 變更
- FragmentContainerView現在是- final。(b/140133091)
修正錯誤
- FragmentContainerView現在會於返回堆疊放出片段時,會正確還原繪圖順序。(b/139104187)
- 修正問題:同時填入片段及新增片段時,系統會執行錯誤的動畫。(b/111659726)
- 片段現在會等待轉換 (除了在 Fragment 1.2.0-alpha02中已修正的動畫之外) 完成,然後再分派onDestroyView()。(b/138741697)
1.2.0-alpha02 版本
2019 年 8 月 7 日
發布 androidx.fragment:fragment:1.2.0-alpha02、androidx.fragment:fragment-ktx:1.2.0-alpha02 和 androidx.fragment:fragment-testing:11.2.0-alpha02。您可以前往這裡查看這個版本包含的修訂項目。
新功能
- 使用 by viewModels()、by activityViewModels()、ViewModelProvider建構函式,或搭配Fragment使用ViewModelProviders.of()時,SavedStateViewModelFactory現在是預設的原廠設定。(b/135716331)
- 在 FragmentTransaction上搭配setTransition使用TRANSIT_FRAGMENT_OPEN、TRANSIT_FRAGMENT_CLOSE、TRANSIT_FRAGMENT_FADE時,預設動畫已更新為 Android 10 裝置活動所使用的動畫 (aosp/1012812、aosp/1014730)
API 變更
- 引進 FragmentContainerView,做為強烈建議您加入動態片段的動態容器以取代FrameLayout的用法,以修正動畫 Z-order 問題和視窗分派至 Fragments 的動畫。(b/37036000、aosp/985243、b/136494650)
- 新增靜態 FragmentManager.findFragment(View)方法,可從由片段加載的檢視畫面擷取內含的 Fragment。fragment-ktx中也提供 Kotlin 擴充功能。(aosp/1090757)
- 在採用 Class<? extends Fragment>和選擇性引數Bundle的FragmentTransaction上,新增add()和replace()的超載。這些方法會使用您的FragmentFactory建構要新增的 Fragment 執行個體。使用修正類型的 Kotlin 擴充功能 (例如fragmentTransaction.replace<YourFragment>(R.id.container)) 也已新增至fragment-ktx。(b/126124987)
- @MainThread註解已新增至- Fragment生命週期回呼。(b/127272564)
- FragmentTransaction和- FragmentManager.BackStackEntry的導覽標記標題相關 API 已淘汰。(b/138252944)
- FragmentTransaction的- setTransitionStyle方法已淘汰。(aosp/1011537)
- FragmentManager中的許多方法已不再是- abstract。- FragmentManager本身仍是- abstract,因此不應直接執行個體化或延伸;您應只會繼續收到來自- getSupportFragmentManager()、- getChildFragmentManager()等的現有執行個體。
修正錯誤
- 在 Fragment 1.1.0-rc04中:Fragment 現在可以在片段彈出時,正確取消延後的轉換。(b/138251858)
- 在 Fragment 1.1.0-rc03中:修正多次呼叫有逾時的postponeEnterTransition()。並不會取消先前逾時設定的問題。(b/137797118)
- 從 Fragment 1.1.0-rc02起:修正移除目前項目時,FragmentPagerAdapter和FragmentStatePagerAdapter中發生的當機問題 (b/137209870)
- 片段現在會等動畫結束後再分派 onDestroyView()。(b/136110528)
- 從子項片段及其子系的片段動畫,目前在父項片段中製作動畫時已正確處理。(b/116675313)
- 修正使用共用元素轉換作業,並結合彈出與新增作業時的 NullPointerException問題 (b/120507394)
- 新增在 Robolectric 測試中使用 FragmentPagerAdapter和FragmentStatePagerAdapter時IllegalStateException的解決方法。(b/137201343)
1.2.0-alpha01 版本
2019 年 7 月 2 日
發布 androidx.fragment:fragment:1.2.0-alpha01、androidx.fragment:fragment-ktx:1.2.0-alpha01 和 androidx.fragment:fragment-testing:1.2.0-alpha01。您可以前往這裡查看這個版本包含的修訂項目。
新功能
- FragmentManager 現在會在連結片段的檢視畫面,及直接在呼叫 onViewCreated()前呼叫requestApplyInsets(),藉此確保檢視畫面總是會有正確的插邊。(b/135945162)
修正錯誤
- 修正在 replace()之前使用setPrimaryNavigationFragment()彈出FragmentTransaction的NullPointerException問題 (b/134673465)
1.1.0 版本
1.1.0 版本
2019 年 9 月 5 日
發布 androidx.fragment:fragment:1.1.0、androidx.fragment:fragment-ktx:1.1.0 和 androidx.fragment:fragment-testing:1.1.0。您可以前往這裡查看這個版本包含的修訂項目。
自 1.0.0 版以來的重要異動
- fragment-testing:fragment-testing構件會提供FragmentScenario類別,以測試隔離中的片段。詳情請參閱測試應用程式的片段說明文件。
- FragmentFactory:您現在可在 FragmentManager上設定FragmentFactory,藉此管理片段建立例項,並移除不需使用引數的建構函式。
- ViewModels 的 Kotlin 屬性委派項目:fragment-ktx構件現在包含兩個 Kotlin 屬性委派項目:by viewModels()用於存取與個別片段相關聯的 ViewModel,以及by activityViewModels()用於存取限定為活動範圍的 ViewModels。
- 生命週期上限:您現在可以對 FragmentTransaction呼叫setMaxLifecycle(),設定 Fragment 的 Lifecycle 狀態上限。這會取代現已淘汰的setUserVisibleHint()。FragmentPagerAdapter和FragmentStatePagerAdapter提供新的建構函式,可讓您切換至新行為。
- FragmentActivity LayoutId 建構函式:FragmentActivity的子類別現在可選擇呼叫FragmentActivity上採用R.layoutID 的建構函式,指出應設為內容檢視畫面的版面配置,做為在onCreate()中呼叫setContentView()的替代選項。這個動作不會改變子類別採用無引數建構函式的要求。
- Fragment LayoutId 建構函式:Fragment的子類別現在可選擇呼叫Fragment上採用R.layoutID 的建構函式,指出應用於此片段的版面配置,做為覆寫onCreateView()的替代選項。加載的版面配置可在onViewCreated()中設定。
- 以逾時延後:新增需要逾時的 postponeEnterTransition()超載。
1.1.0-rc04 版本
2019 年 8 月 7 日
發布 androidx.fragment:fragment:1.1.0-rc04、androidx.fragment:fragment-ktx:1.1.0-rc04 和 androidx.fragment:fragment-testing:1.1.0-rc04。您可以前往這裡查看這個版本包含的修訂項目。
修正錯誤
- Fragment 現在可以在片段彈出時,正確取消延後的轉換。(b/138251858)
1.1.0-rc03 版本
2019 年 7 月 19 日
發布 androidx.fragment:fragment:1.1.0-rc03、androidx.fragment:fragment-ktx:1.1.0-rc03 和 androidx.fragment:fragment-testing:1.1.0-rc03。您可以前往這裡查看這個版本包含的修訂項目。
修正錯誤
- 修正多次呼叫有逾時的 postponeEnterTransition()時不會取消前一個逾時的問題。(b/137797118)
1.1.0-rc02 版本
2019 年 7 月 17 日
發布 androidx.fragment:fragment:1.1.0-rc02、androidx.fragment:fragment-ktx:1.1.0-rc02 和 androidx.fragment-testing:fragment:1.1.0-rc02。您可以前往這裡查看這個版本包含的修訂項目。
修正錯誤
- 修正在移除現有項目時,FragmentPagerAdapter和FragmentStatePagerAdapter中發生的當機問題 (b/137209870)
1.1.0-rc01 版本
2019 年 7 月 2 日
發布 androidx.fragment:fragment:1.1.0-rc01、androidx.fragment:fragment-ktx:1.1.0-rc01 和 androidx.fragment:fragment-testing:1.1.0-rc01。您可以前往這裡查看這個版本包含的修訂項目。
修正錯誤
- 執行轉換時,片段現在會於使用 show()或hide()運算時正確地更新其瀏覽權限。(b/133385058)
- 修正在 replace()之前使用setPrimaryNavigationFragment()彈出FragmentTransaction的NullPointerException問題 (b/134673465)
1.1.0-beta01 版本
2019 年 6 月 5 日
發布 androidx.fragment:fragment:1.1.0-beta01、androidx.fragment:fragment-ktx:1.1.0-beta01 和 androidx.fragment:fragment-testing:1.1.0-beta01。您可以前往這裡查看這個版本包含的修訂項目。
修正錯誤
- 巢狀片段的 androidx.lifecycle.Lifecycle回呼 (尤其是STARTED、RESUMED、PAUSED、STOPPED和DESTROYED) 現已正確建立。(b/133497591)
- 在 Fragment 的 onCreate()中註冊的OnBackPressedCallback例項,現在可以比子項 FragmentManager 優先執行 (b/133175997)
- 取代父項片段後,子項片段就不再以動畫呈現。(b/121017790)
- 使用 animateLayoutChanges="true"時,系統會忽略片段動畫和轉場效果,修正無法正確刪除片段的問題。(b/116257087)
1.1.0-alpha09 版本
2019 年 5 月 16 日
發布 androidx.fragment:fragment:1.1.0-alpha09、androidx.fragment:fragment-ktx:1.1.0-alpha09 和 androidx.fragment:fragment-testing:1.1.0-alpha09。您可以前往這裡查看這個版本包含的修訂項目。
API 變更
- 當主要導覽片段發生變更時,現在片段會接收新的 onPrimaryNavigationFragmentChanged(boolean)方法回呼。aosp/960857
修正錯誤
- 現在移除父項片段後,由子項片段加載的選單項目也會正確移除。b/131581013
1.1.0-alpha08 版本
2019 年 5 月 7 日
發布 androidx.fragment:fragment:1.1.0-alpha08、androidx.fragment:fragment-ktx:1.1.0-alpha08 和 androidx.fragment:fragment-testing:1.1.0-alpha08。您可以前往這裡查看這個版本包含的修訂項目。
這個版本與 Preferences 1.1.0-alpha01 到 1.1.0-alpha04 不相容。使用此版本 Fragment 時,請升級至 1.1.0-alpha05 版本。
新功能
- 新增會採用逾時的 postponeEnterTransition()新超載,此後 Fragment 將自動呼叫startPostponedEnterTransition()b/120803208
API 變更
- 破壞性變更:先前淘汰的 FragmentFactoryinstantiate方法採用Bundle已移除。aosp/953856
- 破壞性變更:FragmentPagerAdapter和FragmentStatePagerAdapter中的RESUME_ONLY_CURRENT_FRAGMENT和USE_SET_USER_VISIBLE_HINT常數已分別重新命名為BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT和BEHAVIOR_SET_USER_VISIBLE_HINT。aosp/954782
修正錯誤
- 透過 setMaxLifecycle()設定生命週期上限的片段,已無法在達到最終狀態前繼續。b/131557151
- 使用 setMaxLifecycle(Lifecycle.State.CREATED)時,片段會正確顯示檢視畫面。aosp/954180
1.1.0-alpha07 版本
2019 年 4 月 25 日
發布 androidx.fragment:fragment:1.1.0-alpha07、androidx.fragment:fragment-ktx:1.1.0-alpha07 和 androidx.fragment:fragment-testing:1.1.0-alpha07。您可以前往這裡查看這個版本包含的修訂項目。
新功能
- 您現在可以對 FragmentTransaction呼叫setMaxLifecycle(),藉此設定 Fragment 的 Lifecycle 狀態上限。這會取代現已淘汰的setUserVisibleHint()。FragmentPagerAdapter和FragmentStatePagerAdapter提供新的建構函式,可讓您切換至新行為。(b/129780800)
API 變更
- FragmentScenario的- moveToState(STARTED)目前只能在搭載 API 24 以上版本的裝置上呼叫 (b/129880016)
行為變更
- 基於 (b/129907905) 的結果,當代管活動重新建立時,返回堆疊的片段不會傳回 onCreateView()的回呼。只有當片段顯示時 (即返回堆疊彈出),系統才會呼叫onCreateView()。
修正錯誤
- 修正在 XML 中使用 <fragment>標記以及FragmentActivity或AppCompatActivity的contentLayoutId建構函式的問題。(b/129907905)
- 修正問題:在設定變更後,返回堆疊片段不會移至至少 CREATED,導致 ViewModel 和子項保留片段無法正確處理 (b/129593351)
- 修正問題:在例項狀態儲存後,因已保留片段不同步導致 restoreSaveState當機 (b/130433793) (aosp/947824)
- 修正問題:如果 FragmentManager有返回堆疊,新增的OnBackPressedCallback片段將具有片段生命週期。詳情請參閱 androidx.activity 1.0.0-alpha07。(aosp/948209)
- 片段將不再針對動畫強制執行 LAYER_TYPE_HARDWARE。如果您特別需要硬體圖層動畫,請將此設為動畫的一部分。(b/129486478)
1.1.0-alpha06 版本
2019 年 4 月 3 日
發布 androidx.fragment:fragment:1.1.0-alpha06、androidx.fragment:fragment-ktx:1.1.0-alpha06 和 androidx.fragment:fragment-testing:1.1.0-alpha06。您可以前往這裡查看這個版本包含的修訂項目。
新功能
- FragmentManager 擲回的例外狀況現在會於訊息中加入片段的名稱。(b/67759402)
API 變更
- Fragment和- FragmentActivity現在包含第二種建構函式;該函式可使用- @LayoutRes int取代先前以- @ContentView為類別加上註解的行為。這個方法適用於應用程式和程式庫模組。(b/128352521)
- FragmentActivity 的 onActivityResult()現已正確標示為@CallSuper。(b/127971684)
- 採用引數套件的 FragmentFactory instantiate方法已淘汰,應用程式應使用不採用套件的新instantiate超載 (b/128836103)
- FragmentScenario方法現已使用- @StyleRes正確加註。(aosp/924193)
- 淘汰了 FragmentTabHost。(b/127971835)
- 已移除 FragmentActivity 的 getThemedContext()。(aosp/934078)
修正錯誤
- 修正 1.1.0-alpha05 中導致收到的項目片段在螢幕上閃爍的迴歸。(b/129405432)
- 修正 popBackStack+replace+popBackStack 運算系列後,主要導覽片段會遺失的問題。(b/124332597)
- 修正還原 Fragment 狀態時,在 Activity 中使用 @ContentView建構函式的問題。(b/127313094)
- 修正 setTargetFragment()的邏輯,也就是以尚未附加至 FragmentManager 的片段取代現有的目標片段。(aosp/932156)
1.1.0-alpha05 版本
2019 年 3 月 13 日
發布 androidx.fragment:fragment:1.1.0-alpha05、androidx.fragment:fragment-ktx:1.1.0-alpha05 和 androidx.fragment:fragment-testing:1.1.0-alpha05。您可以前往這裡查看這個版本包含的修訂項目完整清單。
新功能
- 已對 @ContentView註解查詢加入快取處理。(b/123709449)
行為變更
- 使用連結到不同 FragmentManager 的 Fragment 呼叫 remove()、hide()、show()、detach()和setPrimaryNavigationFragment()時,現在會傳送IllegalStateException,而非直接失敗 (aosp) /904301)
修正錯誤
- FragmentActivity的- onNewIntent現已正確加上- @CallSuper標記 (b/124120586)
- 修正使用 getDialog().dismiss()或getDialog().cancel()時可能會呼叫DialogFragmentonDismiss()的問題 (b/126563750)
1.1.0-alpha04 版本
2019 年 2 月 7 日
發布 androidx.fragment:fragment 1.1.0-alpha04、androidx.fragment:fragment-ktx 1.1.0-alpha04 和 androidx.fragment:fragment-testing 1.1.0-alpha04。
新功能
- 現已支援 @ContentView類別註解,可讓您指示應擴展哪個版面配置 XML 檔案以加載替代覆寫onCreateView()。建議您在onViewCreated()中執行檢視畫面相關操作。(aosp/837619)
- fragment-testing現在依附於- androidx.test:core-ktx1.1.0 穩定版 (b/121209673)
- 您現在可以透過 openActionBarOverflowOrOptionsMenu使用FragmentScenario,測試片段代管選項選單 (b/121126668)
API 變更
- 新增可傳回 @NonNull Bundle或擲回IllegalStateException的requireArguments()方法 (b/121196360)
- 新增附註,說明 getLifecycle()、getViewLifecycleOwner()和getViewLifecycleOwnerLiveData()不應遭到覆寫,並將在日後版本中進行最終確定。如果您目前正在覆寫這個方法,請提交功能要求。(aosp/880714)
- 新增附註,說明 getViewModelStore()不應遭到覆寫,並將在日後版本中進行最終確定。如果您目前正在覆寫這個方法,請提交功能要求。(aosp/880713)
- 修正舊版 Fragments 的二進位檔相容性問題。(aosp/887877) (aosp/889834)
修正錯誤
- 傳遞 null至setTargetFragment()時,系統會正確地清除目標片段。(aosp/849969)
- 修正 onDestroy()中或之後有時無法顯示目標片段的問題。(b/122312935)
- DialogFragment 的 ondismiss() 現會在 onDestroy()之前呼叫。(aosp/874133) (aosp/890734)
1.1.0-alpha03 版本
2018 年 12 月 17 日
新功能
- 片段現已導入 BundleSavedStateRegistryOwner,取決於新推出的 SavedState 程式庫 [aosp/824380]
- 新增 by activityViewModelsKotlin 屬性委派項目,以擷取與內含活動相關的 ViewModels [b/119050253]
- by viewModelsKotlin 屬性委派項目已擴大採用選擇性的 Lambda 方式來取得- ViewModelStoreOwner,可讓您將- val viewModel: MyViewModel by viewModels(::requireParentFragment)等程式碼傳入父項 Fragment 或其他自訂- ViewModelStoreOwner中 [b/119050253]
API 變更
- FragmentScenario現在可讓您指定主題,例如- Theme.AppCompat[b/119054431]。這是一項破壞性變更。
- 新增可傳回 @NonNull View或擲回IllegalStateException的requireView()方法 [b/120241368]
- 新增可傳回 @NonNull Fragment或擲回IllegalStateException的requireParentFragment()方法 [b/112103783]
修正錯誤
- 修正 InvalidStateException:失敗儲存狀態 (b/120814739)
- 從儲存的例項狀態還原的片段,現在一律會接收非空值 Bundle[b/119794496]
- 重新加入已移除的片段時,不會再重複使用片段的 Lifecycle物件 [b/118880674]
1.1.0-alpha02 版本
2018 年 12 月 3 日
新功能
- FragmentScenario 的 Kotlin 擴充功能現在可讓您將 lambda 用於 Fragment 建構,做為傳遞 FragmentFactory執行個體的替代選項。(aosp/812913)
修正錯誤
- 修正在返回堆疊中使用巢狀 Fragment 所產生的 IllegalStateException 錯誤 (b/119256498)
- 修正搭配 FragmentFactory使用FragmentScenario.recreate()會當機的問題 (aosp/820540)
- 修正移除 Fragment 後即無法存取目標 Fragment 的問題 (aosp/807634)
1.1.0-alpha01 版本
2018 年 11 月 5 日
這是 fragment-testing 構件和 FragmentScenario 的第一個版本,以 androidx.test:core API 為基礎建構而成。詳情請參閱片段測試說明文件。
新功能
- 用於測試個別片段的全新 FragmentCase 類別。
- 您現在可以在任何 FragmentManager上設定FragmentFactory,以控制新的片段執行個體執行個體化的方式。
- 新增 by viewModels()Kotlin 屬性委派,以從片段擷取 ViewModels。
- Fragment onStop()中的待處理輸入事件 (例如點擊) 現已取消。
API 變更
- 大幅展開 Fragment API 途徑的空值註解。
修正錯誤
- 修正導致 LiveData 中 Fragment 運算失敗的問題 (b/77944637)
已知問題
- 從 FragmentManager 移除某個片段後,就無法存取目標片段。
- fragment-testing取決於- androidx.test:core:1.0.0-beta01,而不是正確的- androidx.test:core:1.0.0。
