片段
最近更新時間 | 穩定版 | 候選版 | Beta 版 | Alpha 版 |
---|---|---|---|---|
2024 年 10 月 30 日 | 1.8.5 | - | - | - |
宣告依附元件
如果要為 Fragment 新增依附元件,您必須將 Google Maven 存放區新增至專案。詳情請參閱「Google 的 Maven 存放區」一節。
在應用程式或模組的 build.gradle
檔案中,新增所需構件的依附元件:
Groovy
dependencies { def fragment_version = "1.8.3" // 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.3" // 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.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 轉場時,快速按下系統返回按鈕或快速執行返回手勢,會導致 Fragment 停止運作的問題。(Ibc038、b/364804225)
- 修正片段中的問題:中斷預測返回手勢會導致片段管理員進入未定義狀態,甚至顯示錯誤的片段。(If82e2、b/338624457)。
- 修正
AndroidFragment
中的UninitializedPropertyAccessException
,當您動態切換AndroidFragment
例項使用的類別時,會發生此問題。(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
現在可以妥善處理父項片段放入 Fragment 返回堆疊的情況,避免在返回該片段時出現「找不到 ID 的檢視畫面」問題。(I94608)。- 透過
FragmentTransaction.add
方法新增的片段現在會採用ViewGroup
,現在會等待onContainerAvailable
再進展至onStart()
。這會影響該 API 的使用者,例如AndroidFragment
,因為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 階層。它會自動處理 Fragment 狀態的儲存和還原作業。這應該是直接取代先前建議的使用AndroidViewBinding
來加載 Fragment 的方法。FragmentManager
的OnBackStackChangedListener
介面現在會在FragmentManager
執行作業時觸發onBackStackChangeCancelled
回呼,讓回呼更接近onBackStackChangeCommitted
回呼的時間點。
1.8.0-rc01 版
2024 年 5 月 29 日
發布 androidx.fragment:fragment-*:1.8.0-rc01
。1.8.0-rc01 版包含這些修訂項目。
修正錯誤
- 在
FragmentManager
中執行作業時,FragmentManagers OnBackStackChangedListener
介面上的onBackStackChangeCancelled
回呼現在會觸發,讓其與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
起:現在,只有在所有片段皆具有動畫器或可搜尋的 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 版包含這些修訂版本。
新功能
- 新的
AndroidFragment
Composable
可透過片段類別名稱,將片段新增至 Compose 階層。它會自動處理 Fragment 狀態的儲存和還原作業。這可用來直接取代 AndroidViewBindingComposable
。(b/312895363、Icf841)
說明文件變更
- 更新
OnBackStackChangedListener
API 的說明文件,指出 API 的呼叫時機和使用方式。(I0bfd9)。
依附元件更新
- 片段現在依附於 Profile Installer 1.3.1。
1.7 版
1.7.1 版
2024 年 5 月 14 日
發布 androidx.fragment:fragment-*:1.7.1
。1.7.1 版包含這些修訂項目。
修正錯誤
- 預測返回功能現在只會針對所有片段都具有 Animator 或可尋 Seekable Androidx 轉換的交易執行。修正取消部分可搜尋的交易會導致畫面顯示空白的問題。(I43037、b/339169168)。
1.7.0 版
2024 年 5 月 1 日
發布 androidx.fragment:fragment-*:1.7.0
。1.7.0 版包含這些修訂版本。
預測返回手勢支援
- 使用
Animator
或 AndroidX Transition 1.5.0 時,Fragment 現已支援預測返回手勢。這樣一來,使用者就能透過返回手勢,在決定是透過完成手勢提交交易,還是取消交易之前,先查詢 Animator/Transition 來查看先前的片段。
轉換系統 | XML 資源 | 支援預測返回 |
---|---|---|
Animation |
R.anim |
否 |
Animator |
R.animator |
是 |
架構 Transition |
R.transition |
否 |
使用 Transition 1.4.1 以下版本的 AndroidX Transition |
R.transition |
否 |
AndroidX Transition 搭配 Transition 1.5.0 |
R.transition |
是 |
如果您在選擇採用預測返回手勢後,發現片段中預測返回功能有任何問題,請針對片段回報問題,並附上可重現問題的範例專案。您可以在 Activity 的 onCreate()
中使用 FragmentManager.enabledPredictiveBack(false)
停用預測返回手勢。
FragmentManager.OnBackStackChangedListener()
現在提供 onBackStackChangeProgressed()
和 onBackStackChangeCancelled()
,分別用於接收預測返回進度和取消事件。
Fragment Compose 構件
我們建立了新的 fragment-compose
構件,主要支援正在從以 Fragment 為基礎的架構轉移至完全以 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 版包含這些修訂項目。
依附元件更新
- 片段現在依附於 Profile Installer 1.3.1。
1.7.0-beta01 版
March 20, 2024
發布 androidx.fragment:fragment-*:1.7.0-beta01
。1.7.0-beta01 版包含這些修訂版本。
API 變更
FragmentHostCallback
現在是以 Kotlin 編寫,因此主機的泛型類型是否可為空值,會與onGetHost()
的傳回類型是否可為空值相符。(I40af5)。
修正錯誤
- 修正問題:在非容器中的片段上提交預測返回手勢時,該片段永遠不會遭到銷毀。Fragment 會立即移至最終狀態。(Ida0d9)
- 修正 Fragment 中以預測返回手勢中斷傳入轉換時,會導致進入檢視畫面並留下空白畫面的問題。(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 轉換,如果未透過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
構件,專注於支援從 Fragment 架構轉換為完全以 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 轉換時,如果從未透過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
1.5.0-alpha06
中修正的 Transition 程式庫解決方法。(I04356)。
1.7.0-alpha07 版
2023 年 11 月 29 日
發布 androidx.fragment:fragment-*:1.7.0-alpha07
。1.7.0-alpha07 版包含以下修訂項目。
修正錯誤
- 修正設定共用元素轉換,但未設定 enter/exitTransition 而導致的
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
中新增的animateToStart
API。
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 提出問題,並提供可重現問題的範例專案。您可以在活動的
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 版包含以下修訂項目。
修正錯誤
- 修正問題:使用預測返回時,會導致系統略過片段管理員返回堆疊中的第一個片段,並透過 3 按鈕操作或預測返回手勢使用系統返回時,活動結束。(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
時的應用程式內預測返回功能。這樣一來,您就能使用返回手勢,透過自訂動畫師查看先前的片段,然後再決定是否透過完成手勢提交交易,或取消交易。您也可以使用實驗性的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
時,一併清除任何巢狀 Fragment 的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 使用者在未明確依附 Activity 的情況下,無法擴充
ComponentDialog
的問題。(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
和FragmentManager
API 現在可正確加註@NonNull
,以免傳遞空值,因為空值一定會立即導致這些方法呼叫的各個 Android 架構 API 發生當機問題 DialogFragment
現在可透過requireComponentDialog()
API 存取基礎ComponentDialog
。- 片段現在依附於 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)。
依附元件更新
- 片段現在依附於 Lifecycle
2.6.1
(586fe7)。 - 片段現在依附於 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
和FragmentManager
API 現在可正確加註@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 版包含以下修訂項目。
修正錯誤
- 修正問題:無論是否已新增選單項目,移除任何 Fragment 都會使活動的選單失效。(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
和MenuProvider
API 提供了片段應使用的等同 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()
已淘汰。如要管理選單及其選單項目,請依據 Fragment1.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
和MenuProvider
API 提供了片段應使用的等同 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,並引進做為 Lifecycle2.5.0-alpha01
的部分元件。(I3060b、b/207012585)
修正錯誤
- 在 Fragment
1.4.1
中:當 xml 產生的檢視 ID 為負值時,FragmentContainerView
不會再擲回非法狀態例外狀況。(Ic185b、b/213086140) - 在 Fragment
1.4.1
中:搭配by viewModels()
延遲函式使用自訂ownerProducer
lambda 時,系統現在會在沒有提供自訂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()
延遲函式使用自訂ownerProducer
lambda 時,系統現在會在沒有提供自訂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 版以來的重要異動
FragmentStrictMode
API 提供的執行階段檢查可讓您驗證依賴的應用程式或程式庫不會呼叫已淘汰的片段 API。當系統偵測到違規項目時,您可以選擇列印記錄訊息、觸發自己的自訂事件監聽器,或是讓應用程式停止運作。您可以透過新的setStrictModePolicy()
方法在FragmentManager
上設定FragmentStrictMode.Policy
,藉此控制要啟用哪些檢查以及觸發哪些「懲罰」。這項政策適用於該FragmentManager
,並會轉移給所有未設定專屬政策的子項片段管理員。請參閱適用於片段的 StrictMode。FragmentContainerView
現在提供getFragment()
方法,此方法會傳回最近新增至容器的片段。這會使用與FragmentContainerView
ID 相同的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
- 新增
DetachAndAttachFragmentInSameFragmentTransaction
Lint 警告,用於偵測在相同的FragmentTransaction
中,於同一個Fragment
同時呼叫detach()
和attach()
的情形,由於這些互補作業會在相同交易中完成時取消彼此,因此必須將它們拆分為不同交易,才能實際執行。(aosp/1832956、b/200867930) - 使用
MenuHost
的addMenuProvider
API 時,針對 Fragment Lifecycle 的修正功能在 Fragment 檢視畫面 Lifecycle 加入FragmentAddMenuProvider
Lint 錯誤。(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 版包含以下修訂項目。
修正錯誤
- 改善
UseRequireInsteadOfGet
Lint 檢查功能,以更妥善的方式處理冗餘括號。(I2d865) - 改善
UseGetLayoutInflater
Lint 檢查功能,以處理額外的邊緣案例。(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) - 評估最高等級變數時,
OnCreateDialogIncorrectCallback
Lint 檢查將不再停止運作。(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)
時,UseGetLayoutInflater
Lint 檢查現在會顯示警告 - 請務必使用對話方塊片段的getLayoutInflater()
方法以取得適合的LayoutInflater
。(#156、b/170781346) DialogFragmentCallbacksDetector
Lint 檢查現在會於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 加入適合此版本的
FragmentStrictMode
API 整體!(#123、#131、#150、b/143774122、#142、b/153738653、#141、b/153738235、#146、b/181137036、#140、b/153737954、#136、b/153738974、#139、b/153737745) - 感謝 tatocaster 加入
UseGetLayoutInflater
Lint 檢查。(#156、b/170781346) - 感謝 tatocaster 加入
DialogFragmentCallbacksDetector
Lint 檢查。(#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 的
InvalidFragmentVersionForActivityResult
Lint 檢查問題。 - 片段現在依附於 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
的ActivityResultRegistry
API 支援,可處理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
的FragmentScenario
API 替代選項,此選項採用 Kotlin 修訂後擴充功能方法withFragment
,可讓您回傳值。值得一提的是,這個區塊會擷取指定區塊中產生的例外狀況。
ViewTree
支援:Fragment
現在支援在Lifecycle2.3.0
中新增的ViewTreeLifecycleOwner.get(View)
、ViewTreeViewModelStoreOwner.get(View)
和ViewTreeSavedStateRegistryOwner
API SavedState1.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
現在會使用 Activity1.2.0-alpha08
中導入的OnContextAvailableListener
API 還原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
的FragmentScenario
API 替代選項,此選項採用 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) - 修正以往
UseRequireInsteadOfGet
Lint 檢查無法正確處理?.
和!!
運算子的連續使用情況,這個問題現已修正。(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
類別的FragmentLiveDataObserve
Lint 規則,因為其生命週期和檢視畫面生命週期都會保持同步,因此呼叫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
中導入的ActivityResultRegistry
API 支援,可處理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
類別中FragmentLiveDataObserve
Lint 規則,因為其生命週期和檢視畫面生命週期都會保持同步,因此呼叫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 屬性名稱的本機變數名稱時,
UseRequireInsteadOfGet
Lint 檢查會出現偽陽性 (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:tag
XML 屬性的支援,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 Test1.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.layout
ID 的建構函式,指出應設為內容檢視畫面的版面配置,做為在onCreate()
中呼叫setContentView()
的替代選項。這個動作不會改變子類別採用無引數建構函式的要求。 - Fragment LayoutId 建構函式:
Fragment
的子類別現在可選擇呼叫Fragment
上採用R.layout
ID 的建構函式,指出應用於此片段的版面配置,做為覆寫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 變更
- 破壞性變更:先前淘汰的
FragmentFactory
instantiate
方法採用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()
時可能會呼叫DialogFragment
onDismiss()
的問題 (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-ktx
1.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 activityViewModels
Kotlin 屬性委派項目,以擷取與內含活動相關的 ViewModels [b/119050253] by viewModels
Kotlin 屬性委派項目已擴大採用選擇性的 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
。