片段

將您的應用程序劃分為多個獨立的屏幕,這些屏幕在 Activity 中託管。
最新更新 穩定版本 發布候選版本 Beta 版本 Alpha 版本
2024 年 9 月 4 日 1.8.3 - - -

聲明依賴項

要添加對 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。如果您發現新問題或有改進此庫的想法,請告訴我們。在創建新問題之前,請查看此庫中現有問題。您可以通過點擊星形按鈕為現有問題投票。

創建新問題

查看 問題追蹤器文檔 以獲取更多信息。

版本 1.8

版本 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)
  • 通過 FragmentTransaction.add 方法(接受 ViewGroup)添加的片段現在在進展到 onStart() 之前等待 onContainerAvailable。這會影響該 API 的使用者,例如 AndroidFragment,它現在會在通過 onStart() 移動它之前等待 AndroidFragment 重新進入組成。 (I94608)

版本 1.8.1

2024 年 6 月 26 日

androidx.fragment:fragment-*:1.8.1 已发布。版本 1.8.1 包含 这些提交

錯誤修復

  • 修复了在启动预测后退手势时,没有容器的片段立即被DESTROYED的问题。现在它们将保持在CREATED状态,直到手势完成。(If6b83b/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 膨胀片段的方法的直接替代。
  • FragmentManagerOnBackStackChangedListener 接口上的 onBackStackChangeCancelled 回调现在作为在 FragmentManager 中执行操作的一部分触发,使其更接近 onBackStackChangeCommitted 回调的时机。

版本 1.8.0-rc01

2024 年 5 月 29 日

androidx.fragment:fragment-*:1.8.0-rc01 已发布。版本 1.8.0-rc01 包含 这些提交

錯誤修復

  • FragmentManagerOnBackStackChangedListener 接口上的 onBackStackChangeCancelled 回调现在作为在 FragmentManager 中执行操作的一部分触发,使其更接近 onBackStackChangeCommitted 回调的时机。(I5ebfbb/332916112

版本 1.8.0-beta01

2024 年 5 月 14 日

androidx.fragment:fragment-*:1.8.0-beta01 已发布。版本 1.8.0-beta01 包含 这些提交

錯誤修復

  • 来自 Fragment 1.7.1: 预测后退现在只会在所有片段都具有 Animator 或 Seekable Androidx Transition 的事务中运行。这修复了一个问题,即取消部分可搜索事务会导致黑屏。(I43037b/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 层次结构中。它自动处理片段状态的保存和恢复。这可以用作 AndroidViewBinding Composable 的直接替代。(b/312895363Icf841

文档变更

  • 更新了 OnBackStackChangedListener API 的文档,以指示何时调用它们以及如何使用它们。(I0bfd9

依赖更新

版本 1.7

版本 1.7.1

2024 年 5 月 14 日

androidx.fragment:fragment-*:1.7.1 已发布。版本 1.7.1 包含 这些提交

錯誤修復

  • 预测后退现在只会在所有片段都具有 Animator 或 Seekable Androidx Transition 的事务中运行。这修复了一个问题,即取消部分可搜索事务会导致空白屏幕。(I43037b/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 资源 支持预测后退
动画 R.anim
Animator R.animator
框架 Transition R.transition
具有 Transition 1.4.1 或更低版本的 AndroidX Transition R.transition
具有 Transition 1.5.0 的 AndroidX Transition R.transition

如果您在 选择使用预测后退手势 后发现片段中的预测后退支持有任何问题,请 针对 Fragment 提交问题,并提供一个可以重现问题的示例项目。您可以在活动的 onCreate() 中使用 FragmentManager.enabledPredictiveBack(false) 禁用预测后退。

FragmentManager.OnBackStackChangedListener() 现在提供 onBackStackChangeProgressed()onBackStackChangeCancelled(),分别用于接收预测后退进度和已取消事件。

Fragment Compose 工件

已经创建了一个新的 fragment-compose 工件,专注于支持正在从基于片段的体系结构迁移到完全基于 Compose 的体系结构的应用程序。

此新工件中可用的第一个功能是在 Fragment 上的 content 扩展方法,该方法试图通过为您创建 ComposeView 并设置正确的 ViewCompositionStrategy 来简化使用 Compose 作为单个片段 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.7.0-beta01

2024 年 3 月 20 日

androidx.fragment:fragment-*:1.7.0-beta01 已发布。版本 1.7.0-beta01 包含 这些提交

API 变更

  • FragmentHostCallback 现在使用 Kotlin 编写,以便 Host 的泛型类型的可空性与 onGetHost() 的返回值类型匹配。(I40af5

錯誤修復

  • 修复了一个问题,即在对不在容器中的片段提交预测后退手势时,该片段永远不会被销毁。片段现在将立即移动到最终状态。(Ida0d9
  • 修复了片段中的一个问题,即使用预测后退手势中断传入的过渡会导致进入视图被销毁,并留下空白屏幕。(Id3f22b/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,则片段会从 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 作为单个片段 UI 的过程。(561cb7b/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 的 Predictive Back 支持用于 Animator 或 AndroidX Transition 时,如果从未通过 addOnBackStackChangedListener 添加过 FragmentManager.OnBackStackChangedListener,Fragments 将从 handleOnBackProgressed 抛出 NullPointerException。手动添加侦听器将解决崩溃问题。此问题的修复程序将在 Fragments 的下一个版本中提供。

版本 1.7.0-alpha08

2024 年 1 月 10 日

androidx.fragment:fragment-*:1.7.0-alpha08 已发布。 版本 1.7.0-alpha08 包含以下提交。

清理

版本 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 被填充时,其状态(如 FragmentManager、Host 和 id)现在可以在 onInflate 回调中访问。 (I1e44cb/307427423)
  • 来自 Fragment 1.6.2:当使用 clearBackStack 删除一组 Fragment 时,任何嵌套 Fragment 的 ViewModel 现在将在父 Fragment 的 ViewModels 被清除时被清除。 (I6d83cb/296173018)

版本 1.7.0-alpha06

2023 年 10 月 4 日

androidx.fragment:fragment-*:1.7.0-alpha06 已发布。 版本 1.7.0-alpha06 包含以下提交。

依赖项更新

版本 1.7.0-alpha05

2023 年 9 月 20 日

androidx.fragment:fragment-*:1.7.0-alpha05 已发布。 版本 1.7.0-alpha05 包含以下提交。

新功能

  • Fragments 现在提供对使用 Androidx Transitions 的 Predictive back 的支持。这使您可以使用后退手势在决定通过完成手势提交或取消事务之前,使用自定义 Androidx Transition 向后搜索到上一个 Fragment。您必须依赖于 Transition 1.5.0-alpha03 版本来启用此功能。 (Ib49b4b/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 包含以下提交。

錯誤修復

  • 修复了取消预测性后退手势时 Fragment 无法进入正确 Lifecycle 状态的问题。 (I7cffeb/297379023)
  • 修复了允许动画与过渡一起运行的回归问题。 (I59f36)
  • 修复了在使用预测性后退与 Fragment 结合时,在倒数第二个 Fragment 上快速连续尝试后退两次会导致崩溃的问题。 (Ifa1a4)

版本 1.7.0-alpha03

2023 年 8 月 23 日

androidx.fragment:fragment-*:1.7.0-alpha03 已发布。 版本 1.7.0-alpha03 包含以下提交。

錯誤修復

  • 修复了 Fragments 在使用预测性后退时出现的问题,该问题会导致 Fragment 管理器的回退堆栈中的第一个 Fragment 被跳过,并且在使用系统后退(通过 3 键导航或预测性后退手势)时 Activity 会结束。 (I0664bb/295231788)

版本 1.7.0-alpha02

2023 年 8 月 9 日

androidx.fragment:fragment-*:1.7.0-alpha02 已发布。 版本 1.7.0-alpha02 包含以下提交。

錯誤修復

  • 当从 API 34 使用带有预测性后退手势的 Fragments 时,如果您使用的是不支持搜索的过渡系统 (AnimationsTransitions) 或根本没有过渡,Fragments 现在将在手势完成之前等待执行后退操作。 (I8100c)

版本 1.7.0-alpha01

2023 年 6 月 7 日

androidx.fragment:fragment-*:1.7.0-alpha01 已发布。此版本是在内部分支中开发的。

新功能

  • Fragments 现在提供对使用 Animator 的预测性应用内后退的支持。这使您可以使用后退手势查看上一个 Fragment 的自定义动画,然后决定是通过完成手势提交事务还是取消事务。您还可以使用实验性的 enablePredictiveBack() 并传入 false 来禁用此新行为。

版本 1.6

版本 1.6.2

2023 年 11 月 1 日

androidx.fragment:fragment-*:1.6.2 已发布。 版本 1.6.2 包含以下提交。

錯誤修復

  • FragmentContainerView 的 Fragment 被填充时,其状态(如 FragmentManager、Host 和 id)现在可以在 onInflate 回调中访问。 (I1e44cb/307427423)
  • 当使用 clearBackStack 删除一组 Fragment 时,任何嵌套 Fragment 的 ViewModel 现在将在父 Fragment 的 ViewModels 被清除时被清除。 (I6d83cb/296173018)

版本 1.6.1

2023 年 7 月 26 日

androidx.fragment:fragment-*:1.6.1 已发布。 版本 1.6.1 包含以下提交。

錯誤修復

  • 修复了当 Activity 停止但未销毁时存储的保存状态在 Fragment 实例被移回 RESUMED 状态后仍会错误地被缓存的问题。如果该 Fragment 实例在使用多个回退堆栈 API 来保存和恢复该 Fragment 时位于回退堆栈中,这会导致该缓存状态被重用。 (I71288b/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 中,允许确切地确定 Fragment 状态的来源。
  • FragmentManager.OnBackStackChangedListener 接口已扩展了两个额外的回调 onBackStackChangeStartedonBackStackChangeCommitted,它们分别在每个 Fragment 被添加到或从 Fragment 回退堆栈中删除之前以及在事务提交之后被调用。
  • FragmentStrictMode 添加了一个新的 WrongNestedHierarchyViolation,用于检测子 Fragment 嵌套在父级的 View 层次结构中,但未添加到父级的 childFragmentManager 中。
  • 采用 IntentIntentSenderFragmentFragmentManager API 现在已正确使用 @NonNull 进行注释,以防止传入空值,因为空值始终会立即使这些方法调用的相应 Android 框架 API 崩溃。
  • DialogFragment 现在通过 requireComponentDialog() API 提供对底层 ComponentDialog 的访问权限。
  • Fragment 现在依赖于 Lifecycle 2.6.1.
  • Fragment 现在依赖于 SavedState 1.2.1.
  • Fragment 现在依赖于 ProfileInstaller 1.3.0.
  • fragment-testing-manifest 工件将清单条目与 fragment-testing 组件的其余部分分离。这意味着您可以执行以下操作

    debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
    androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
    

    这避免了由于 fragment-testingandroidx.test 之间的版本偏差而导致的冲突

版本 1.6.0-rc01

2023 年 5 月 10 日

androidx.fragment:fragment-*:1.6.0-rc01 已发布。 版本 1.6.0-rc01 包含以下提交。

錯誤修復

  • 修复了导致 ActivityResult 在连续进行多个 startActivityForResult 请求时使用不正确的请求代码发送的问题。 (If0b9db/249519359)
  • 修复了在混合进行实际更改回退堆栈的事务时,对于实际上未更改回退堆栈的事务,onBackStackChangeListener 回调会被分派的问题。 (I0eb5cb/279306628)

版本 1.6.0-beta01

2023 年 4 月 19 日

androidx.fragment:fragment-*:1.6.0-beta01 已发布。 版本 1.6.0-beta01 包含以下提交。

錯誤修復

  • 使用带有超时设置的 postponeEnterTransition 然后替换延迟的片段不再导致泄漏延迟的片段。 (I2ec7d, b/276375110)
  • 新的 onBackStackChangeStartedonBackStackChangeCommitted 回调现在只会在片段被多个事务包含时,只分派一次。

版本 1.6.0-alpha09

2023 年 4 月 5 日

androidx.fragment:fragment-*:1.6.0-alpha09 已发布。 版本 1.6.0-alpha09 包含以下提交。

API 变更

  • DialogFragment 现在可以通过 requireComponentDialog() API 访问底层的 ComponentDialog
  • 片段 commitNow()executePendingTransactions()popBackStackImmediate() API 已用 @MainThread 注释,这意味着它们现在在没有从主线程调用时都会抛出构建错误,而不是等到运行时才失败。

錯誤修復

  • 修复了 FragmentManager 中的一个 bug,该 bug 会导致在同一帧中保存和恢复导致崩溃。
  • OnBackStackChangedListeneronBackStackChangeStartedonBackStackChangeCommitted 回调现在只会在 FragmentManager 回退栈发生更改时才会执行。

版本 1.6.0-alpha08

2023 年 3 月 22 日

androidx.fragment:fragment-*:1.6.0-alpha08 已发布。 版本 1.6.0-alpha08 包含以下提交。

行为变更

  • OnBackStackChangedListener.onBackStackChangeCommited 回调的时机已调整为在片段操作执行之前执行。这样可以确保回调永远不会传递一个分离的片段。

錯誤修復

  • Fragment 1.5.6: 修复了一个问题,即如果 Lifecycle 已经处于 STARTED 状态并且结果已经可用,那么在 setFragmentResultListener 内调用 clearFragmentResultListener 将不起作用。

依赖项更新

版本 1.6.0-alpha07

2023 年 3 月 8 日

androidx.fragment:fragment-*:1.6.0-alpha07 已发布。 版本 1.6.0-alpha07 包含以下提交。

錯誤修復

  • Fragment 1.5.6: 修复了一个问题,即删除任何片段(无论它是否添加了菜单项)都会使活动的菜单无效。

版本 1.6.0-alpha06

2023 年 2 月 22 日

androidx.fragment:fragment-*:1.6.0-alpha06 已发布。 版本 1.6.0-alpha06 包含以下提交。

行为变更

  • FragmentManageronBackStackChangedListener 上的新的 onBackStackChangeStarted 回调现在将在片段开始移动到目标状态之前执行。

版本 1.6.0-alpha05

2023 年 2 月 8 日

androidx.fragment:fragment-*:1.6.0-alpha05 已发布。 版本 1.6.0-alpha05 包含以下提交。

新功能

  • FragmentManager.OnBackStackChagnedListener 接口现在提供了两个额外的回调,onBackStackChangeStartedonBackStackChangeCommitted,这些回调允许在 FragmentManager 中发生回退栈更改时提供更多信息和控制。

API 变更

  • 现在已用 @NonNull 正确地注释了接受 IntentIntentSenderFragmentFragmentManager API,以防止传入空值,因为空值会立即使这些方法调用的相应 Android 框架 API 崩溃。

版本 1.6.0-alpha04

2022 年 12 月 7 日

androidx.fragment:fragment-*:1.6.0-alpha04 已发布。 版本 1.6.0-alpha04 包含以下提交。

新功能

  • FragmentStrictMode 添加了一个新的 WrongNestedHierarchyViolation,用于检测子片段是否嵌套在父片段的视图层次结构中,但没有添加到父片段的 childFragmentManager 中。

行为变更

  • 片段现在在 onAttach() 之前恢复其 SavedStateRegistry 状态,确保它可以从所有上行生命周期方法中获得。

API 变更

  • fragment-testing-manifest 工件将清单条目与 fragment-testing 组件的其余部分分离。这意味着您可以执行以下操作
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")

这避免了由于 fragment-testingandroidx.test 之间的版本偏差造成的冲突。

錯誤修復

  • Fragment 1.5.5: 片段不再将 ViewModel 状态错误地保存为视图注册表保存状态的一部分。

版本 1.6.0-alpha03

2022 年 10 月 5 日

androidx.fragment:fragment:1.6.0-alpha03androidx.fragment:fragment-ktx:1.6.0-alpha03androidx.fragment:fragment-testing:1.6.0-alpha03 已发布。 版本 1.6.0-alpha03 包含以下提交。

API 变更

  • 扩展 DialogFragment 的类现在需要在它们各自的 onDismiss() 覆盖中调用超类。

錯誤修復

  • 修复了由于集成新的提供程序回调接口(OnConfigurationChangedProviderOnMultiWindowModeChangedProviderOnTrimMemoryProviderOnPictureInPictureModeChangedProvider)导致的回归,以确保片段始终获得正确的回调。

版本 1.6.0-alpha02

2022 年 8 月 24 日

androidx.fragment:fragment:1.6.0-alpha02androidx.fragment:fragment-ktx:1.6.0-alpha02androidx.fragment:fragment-testing:1.6.0-alpha02 已发布。 版本 1.6.0-alpha02 包含以下提交。

錯誤修復

  • Fragment 1.5.2: 修复了一个问题,即同时执行 popBackStack()replace() 事务会导致退出片段运行错误的 Animation/Animator

版本 1.6.0-alpha01

2022 年 7 月 27 日

androidx.fragment:fragment:1.6.0-alpha01androidx.fragment:fragment-ktx:1.6.0-alpha01androidx.fragment:fragment-testing:1.6.0-alpha01 已发布。 版本 1.6.0-alpha01 包含以下提交。

行为变更

  • Fragment 的保存状态已完全分为私有库状态(自定义 Parcelable 类)和开发人员提供的状态,后者现在始终存储在 Bundle 中,允许准确地确定片段状态的来源。

錯誤修復

  • Fragment 1.5.1: 修复了 DialogFragmentCallbacksDetector 中的回归,其中使用与 AGP 7.4 捆绑在一起的 lint 版本会导致 lint 崩溃。

依赖更新

版本 1.5

版本 1.5.7

2023 年 4 月 19 日

androidx.fragment:fragment:1.5.7androidx.fragment:fragment-ktx:1.5.7androidx.fragment:fragment-testing:1.5.7 已发布。 版本 1.5.7 包含以下提交。

錯誤修復

  • 使用带有超时设置的 postponeEnterTransition 然后替换延迟的片段不再导致泄漏延迟的片段。 (I2ec7d, b/276375110)

版本 1.5.6

2023 年 3 月 22 日

androidx.fragment:fragment:1.5.6androidx.fragment:fragment-ktx:1.5.6androidx.fragment:fragment-testing:1.5.6 已发布。 版本 1.5.6 包含以下提交。

錯誤修復

  • 修复了删除任何 Fragment(无论它是否添加了菜单项)都会使 Activity 的菜单失效的问题。(50f098, b/244336571)
  • 修复了在 setFragmentResultListener 内调用 clearFragmentResultListener 时,如果 Lifecycle 已经 STARTED 并且结果已经可用,则该方法无效的问题。(If7458)

版本 1.5.5

2022 年 12 月 7 日

androidx.fragment:fragment:1.5.5androidx.fragment:fragment-ktx:1.5.5androidx.fragment:fragment-testing:1.5.5 已发布。 版本 1.5.5 包含这些提交。

錯誤修復

  • Fragments 将不再错误地将 ViewModel 状态保存为视图注册表保存状态的一部分。(I10d2b, b/253546214)

版本 1.5.4

2022 年 10 月 24 日

androidx.fragment:fragment:1.5.4androidx.fragment:fragment-ktx:1.5.4androidx.fragment:fragment-testing:1.5.4 已发布。 版本 1.5.4 包含这些提交。

錯誤修復

  • 修复了使用自定义 FragmentController 与未实现提供程序回调接口(OnConfigurationChangedProviderOnMultiWindowModeChangedProviderOnTrimMemoryProviderOnPictureInPictureModeChangedProvider)的主机并调用其已弃用的调度函数时无法调度到子片段的错误。(I9b380)

版本 1.5.3

2022 年 9 月 21 日

androidx.fragment:fragment:1.5.3androidx.fragment:fragment-ktx:1.5.3androidx.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.2androidx.fragment:fragment-ktx:1.5.2androidx.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.1androidx.fragment:fragment-ktx:1.5.1androidx.fragment:fragment-testing:1.5.1 已发布。 版本 1.5.1 包含这些提交。

錯誤修復

  • 修复了 DialogFragmentCallbacksDetector 中的回归,使用与 AGP 7.4 捆绑在一起的 lint 版本会导致 lint 崩溃。(b/237567009)

依赖更新

版本 1.5.0

2022 年 6 月 29 日

androidx.fragment:fragment:1.5.0androidx.fragment:fragment-ktx:1.5.0androidx.fragment:fragment-testing:1.5.0 已发布。 版本 1.5.0 包含这些提交。

自 1.4.0 以来重要更改

  • CreationExtras 集成 - Fragment 现在可以通过 Lifecycle 2.5.0CreationExtras 提供一个无状态的 ViewModelProvider.Factory
  • 组件对话框集成 - DialogFragment 现在通过 Activity 1.5.0 使用 ComponentDialog 作为 onCreateDialog() 返回的默认对话框。
  • 保存的实例状态重构 - Fragments 已经开始更改保存其实例状态的方式。这是为了帮助清楚地识别哪些状态已保存在片段中以及状态的来源。当前更改包括以下内容
    • FragmentManager 现在将其保存的实例状态保存到 Bundle 中,而不是直接保存在自定义 Parcelable 中。
    • 通过 Fragment Result APIs 设置但尚未交付的结果现在与 FragmentManager 的内部状态分开保存。
    • 与每个单独片段关联的状态现在与 FragmentManager 的内部状态分开保存,因此您可以将与单个片段关联的保存状态量与 Fragment 调试日志中存在的唯一 ID 相关联。

其他更改

  • FragmentStrictMode 现在允许私有第三方片段使用 allowViolation() 和类名来绕过特定违规处罚。
  • 为 Activity 的 ActionBar 提供菜单的 Fragment API 已弃用。在 Activity 1.4.0 中添加的 MenuHostMenuProvider API 提供了一个可测试的、生命周期感知的等效 API 表面,Fragments 应该使用它。

版本 1.5.0-rc01

2022 年 5 月 11 日

androidx.fragment:fragment:1.5.0-rc01androidx.fragment:fragment-ktx:1.5.0-rc01androidx.fragment:fragment-testing:1.5.0-rc01 已发布。 版本 1.5.0-rc01 包含这些提交。

保存的实例状态重构

  • 与每个单独片段关联的状态现在与 FragmentManager 的内部状态分开保存,因此您可以将与单个片段关联的保存状态量与 Fragment 调试日志 中存在的唯一 ID 相关联。(a153e0, b/207158202)

版本 1.5.0-beta01

2022 年 4 月 20 日

androidx.fragment:fragment:1.5.0-beta01androidx.fragment:fragment-ktx:1.5.0-beta01androidx.fragment:fragment-testing:1.5.0-beta01 已发布。 版本 1.5.0-beta01 包含这些提交。

API 变更

  • DialogFragment 添加了一个新的 dismissNow 方法,该方法使用 commitNow 来与 showNow 函数保持一致。请注意,这不会使 Dialog 立即关闭,它只会同步更新 FragmentManager 的状态。(I15c36, b/72644830)

保存的实例状态重构

  • FragmentManager 现在将其保存的实例状态保存到 Bundle 中,而不是直接保存在自定义 Parcelable 中。这是为了在 Fragments 实际保存的内容方面提供更多透明度的第一步。(I93807, b/207158202)
  • 通过 Fragment Result APIs 设置但尚未交付的结果现在与 FragmentManager 的内部状态分开保存。这将允许在您的保存实例状态中保存哪些结果方面提供更多透明度。(I6ea12, b/207158202)

版本 1.5.0-alpha05

2022 年 4 月 6 日

androidx.fragment:fragment:1.5.0-alpha05androidx.fragment:fragment-ktx:1.5.0-alpha05androidx.fragment:fragment-testing:1.5.0-alpha05 已发布。 版本 1.5.0-alpha05 包含这些提交。

API 变更

版本 1.5.0-alpha04

2022 年 3 月 23 日

androidx.fragment:fragment:1.5.0-alpha04androidx.fragment:fragment-ktx:1.5.0-alpha04androidx.fragment:fragment-testing:1.5.0-alpha04 已发布。 版本 1.5.0-alpha04 包含这些提交。

API 变更

  • 为 Activity 的 ActionBar 提供菜单的 Fragment API 已弃用,因为它们将您的片段紧密耦合到您的 Activity,并且无法独立测试。在 Activity 1.4.0-alpha01 中添加的 MenuHostMenuProvider API 提供了一个可测试的、生命周期感知的等效 API 表面,Fragments 应该使用它。(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-alpha03androidx.fragment:fragment-testing:1.5.0-alpha03 已发布。 版本 1.5.0-alpha03 包含这些提交。

API 变更

  • 您现在可以将 CreationExtras 传递给 by viewModels()by activityViewModels() 函数。 (Ibefe7, b/217601110)

行为变更

版本 1.5.0-alpha02

2022 年 2 月 9 日

androidx.fragment:fragment:1.5.0-alpha02, androidx.fragment:fragment-ktx:1.5.0-alpha02androidx.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-alpha01androidx.fragment:fragment-testing:1.5.0-alpha01 已发布。 版本 1.5.0-alpha01 包含这些提交。

新功能

錯誤修復

  • Fragment 1.4.1: FragmentContainerView 不再在从 xml 生成的视图 ID 为负值时抛出非法状态异常。 (Ic185b, b/213086140)
  • Fragment 1.4.1: 当使用自定义 ownerProducer lambda 与 by viewModels() 延迟函数一起使用时,它现在将使用该所有者的 defaultViewModelProviderFactory(如果未提供自定义 ViewModelProvider.Factory),而不是始终使用片段的工厂。 (I56170, b/214106513)
  • 修复了从 FragmentregisterForActivityResult() 回调中第一次访问 ViewModel 时发生的崩溃。 (Iea2b3)

版本 1.4

版本 1.4.1

2022 年 1 月 26 日

androidx.fragment:fragment:1.4.1, androidx.fragment:fragment-ktx:1.4.1androidx.fragment:fragment-testing:1.4.1 已发布。 版本 1.4.1 包含这些提交。

錯誤修復

  • FragmentContainerView 不再在从 xml 生成的视图 ID 为负值时抛出非法状态异常。 (Ic185b, b/213086140)
  • 当使用自定义 ownerProducer lambda 与 by viewModels() 延迟函数一起使用时,它现在将使用该所有者的 defaultViewModelProviderFactory(如果未提供自定义 ViewModelProvider.Factory),而不是始终使用片段的工厂。 (I56170, b/214106513)

版本 1.4.0

2021 年 11 月 17 日

androidx.fragment:fragment:1.4.0, androidx.fragment:fragment-ktx:1.4.0androidx.fragment:fragment-testing:1.4.0 已发布。 版本 1.4.0 包含这些提交。

自 1.3.0 以来重要的更改

  • FragmentStrictMode API 提供运行时检查,允许您验证您的应用程序或您依赖的库是否没有调用已弃用的片段 API。当检测到违规时,您可以选择打印日志消息、触发您自己的自定义侦听器或使您的应用程序崩溃。控制启用哪些检查以及触发哪些“惩罚”的 FragmentStrictMode.Policy 可以通过新的 setStrictModePolicy() 方法设置在 FragmentManager 上。该策略适用于该 FragmentManager,并且传递给任何未设置其自身唯一策略的子片段管理器。请参阅 片段的 StrictMode
  • FragmentContainerView 现在提供一个 getFragment() 方法,该方法返回最近添加到容器的片段。这使用与 findFragmentById() 相同的逻辑,使用 FragmentContainerView 的 ID,但允许链接调用。

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • FragmentScenario 现在实现 Closeable,允许您使用 Kotlin 的 use 方法或 try-with-resources

  • 添加了 FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE} 以指定是否在片段转换中启用从主题中获取的标准 Activity 转换动画。

  • 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() 不同的是,如果在回退栈上找不到指定的名称,或者如果提供了 null 名称,则 popBackStack() 将弹出回退栈上的所有事务,而 saveBackStack() 如果您以前没有使用该确切的非空名称使用 addToBackStack() 提交片段事务,则不会执行任何操作。
  • 保存了从这些事务中添加的所有片段的状态。这意味着每个片段的视图状态都已存储,每个片段的 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-beta01androidx.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-alpha10androidx.fragment:fragment-ktx:1.4.0-alpha10androidx.fragment:fragment-testing:1.4.0-alpha10 已发布。 版本 1.4.0-alpha10 包含这些提交。

Lint

  • 添加了 DetachAndAttachFragmentInSameFragmentTransaction Lint 警告,用于检测在同一个 FragmentTransaction 中对同一个 Fragment 同时调用 detach()attach() - 因为这些互补操作在同一个事务中会互相抵消,因此必须将它们拆分为单独的事务才能真正执行任何操作。 (aosp/1832956b/200867930)
  • 添加了 FragmentAddMenuProvider Lint 错误,用于在使用 MenuHostaddMenuProvider API 时,将 Fragment 生命周期使用情况更正为 Fragment 视图生命周期。 (aosp/1830457b/200326272)

文档更新

  • 现在,对由 Activity Result API 处理的 API 的弃用消息,即 startActivityForResultstartIntentSenderForResultonActivityResultrequestPermissionsonRequestPermissionsResult,都已扩展了更多详细信息。 (cce80f)
  • FragmentDialogFragmentonActivityCreated() 的弃用消息都已扩展了更多详细信息。 (224db4)

版本 1.4.0-alpha09

2021 年 9 月 15 日

androidx.fragment:fragment:1.4.0-alpha09androidx.fragment:fragment-ktx:1.4.0-alpha09androidx.fragment:fragment-testing:1.4.0-alpha09 已发布。 版本 1.4.0-alpha09 包含这些提交。

新功能

  • 您现在可以调用 clearBackStack(name) 来清除之前使用 saveBackStack(name) 保存的任何状态。 (I70cd7)

API 变更

  • FragmentContainerView 类已用 Kotlin 重写,确保 getFragment 函数将正确地尊重可空性。 (If694ab/189629145)
  • FragmentStrictMode 现在用 Kotlin 编写 (I11767b/199183506)

錯誤修復

  • 修复了使用 setReorderingAllowed(true) 添加的 Fragment,然后在执行挂起的交易之前立即将其删除,导致其状态不会被正确清理的问题。 (I8ccb8)

版本 1.4.0-alpha08

2021 年 9 月 1 日

androidx.fragment:fragment:1.4.0-alpha08androidx.fragment:fragment-ktx:1.4.0-alpha08androidx.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-alpha07androidx.fragment:fragment-ktx:1.4.0-alpha07androidx.fragment:fragment-testing:1.4.0-alpha07 已发布,没有显着变化。 版本 1.4.0-alpha07 包含这些提交。

版本 1.4.0-alpha06

2021 年 8 月 4 日

androidx.fragment:fragment:1.4.0-alpha06androidx.fragment:fragment-ktx:1.4.0-alpha06androidx.fragment:fragment-testing:1.4.0-alpha06 已发布。 版本 1.4.0-alpha06 包含这些提交。

錯誤修復

  • 修复了在快速切换多个后退栈时出现的问题,该问题会在还原 FragmentTransaction 时显示为 IllegalStateException,或者显示为 Fragment 的第二个副本。 (I9039f)
  • 修复了 FragmentManager 即使在通过 saveBackStack() 保存的状态被还原后,也会保留该状态副本的问题。 (Ied212)
  • DialogFragmentdismissAllowingStateLoss() 方法在状态保存后调用时不再崩溃,具体情况下是通过 show(FragmentTransaction, String) 方法添加 DialogFragment。 (I84422)

版本 1.4.0-alpha05

2021 年 7 月 21 日

androidx.fragment:fragment:1.4.0-alpha05androidx.fragment:fragment-ktx:1.4.0-alpha05androidx.fragment:fragment-testing:1.4.0-alpha05 已发布。 版本 1.4.0-alpha05 包含这些提交。

錯誤修復

  • Fragment 1.3.6 开始:当根视图设置了 transitionGroup=”true” 时,使用 hide() 时,Fragment 的视图现在将正确地设置为 GONE。 (aosp/1766655b/193603427)
  • Fragment 1.3.6 开始:FragmentActivity 现在始终在它覆盖的生命周期回调中将其第一个操作解锁保存状态。 (I6db7a)

依赖更新

版本 1.4.0-alpha04

2021 年 6 月 30 日

androidx.fragment:fragment:1.4.0-alpha04androidx.fragment:fragment-ktx:1.4.0-alpha04androidx.fragment:fragment-testing:1.4.0-alpha04 已发布。 版本 1.4.0-alpha04 包含这些提交。

API 变更

  • FragmentManager 现在在幕后使用 SavedStateRegistry 来保存其状态。 saveAllState()restoreSavedState() 方法也已在 FragmentController 中弃用。如果您使用 FragmentControllerFragmentActivity 之外托管 Fragments,则应使您的 FragmentHostCallbacks 实现 SavedStateRegistryOwner。 (Iba68eb/188734238)

錯誤修復

  • 修复了在同时运行使用 replace()FragmentTransaction 时,作为支持多个后退栈的一部分,对 saveBackStack() 的调用会失败的问题。 (I73137)
  • 修复了在使用 restoreBackStack() API 支持多个后退栈时,在手动还原包含多个交易的保存的后退栈后出现的 NullPointerException。这还修复了 setReorderingAllowed(true) 未对所有交易进行检查的问题。 (I8c593)
  • 修复了 FragmentManager 在 Fragments 从 FragmentManager 中移除后,仍然会错误地继续还原 Fragments 的先前保存状态,从而导致保存的状态随着时间的推移不断增长。 (I1fb8e)

版本 1.4.0-alpha03

2021 年 6 月 16 日

androidx.fragment:fragment:1.4.0-alpha03androidx.fragment:fragment-ktx:1.4.0-alpha03androidx.fragment:fragment-testing:1.4.0-alpha03 已发布。 版本 1.4.0-alpha03 包含这些提交。

新功能

  • 所有 Fragment StrictMode Violation 类都已更新,包含更详细的错误消息,以解释违规的详细信息。 (b/187871638)
    • FragmentTagUsageViolation 现在包含更详细的错误消息,其中包含将要添加 Fragment 的父容器。 (Ic33a7)
    • WrongFragmentContainerViolation 现在包含更详细的错误消息,其中包含正在添加 Fragment 的容器。 (Ib55f8)
    • TargetFragmentUsageViolation 的用例类现在包含更详细的错误消息,以包含导致违规的 Fragment 和任何其他包含的信息。 (Icc6ac)
    • 扩展 RetainInstanceUsageViolation 的类现在包含更详细的错误消息,其中包含导致违规的 Fragment。 (I6bd55)
    • FragmentReuseViolation 现在包含更详细的错误消息,其中包含 Fragment 的先前 ID。 (I28ce2)
    • SetUserVisibleHintViolation 现在包含更详细的错误消息,其中包含要设置的用户可见提示。 (Ib2d5f)

行为变更

  • 恢复了对 FragmentContainerView 上调用 fitsSystemWindows 的限制 - 这不再会导致您的应用崩溃。 (6b8dddb/190622202)

錯誤修復

  • Fragment 1.3.5 开始:修复了 Fragment 1.3.4 中由 aosp/1679887 引入的共享元素过渡中的回归。Fragments 现在可以正确地处理过渡组(直接通过 transitionGroup="true" 设置,或间接通过 transitionNamebackground 设置),共享元素将不再引发 IndexOutOfBoundsException。 (I16484b/188679569b/188969304)
  • 当您尝试隐藏正在移除的 Fragment 时,FragmentManager 将不再崩溃。 (I573ddb/183634730)
  • 当评估顶级变量时,OnCreateDialogIncorrectCallback lint 检查将不再崩溃。(0a9efab/189967522

版本 1.4.0-alpha02

2021 年 6 月 2 日

androidx.fragment:fragment:1.4.0-alpha02androidx.fragment:fragment-ktx:1.4.0-alpha02androidx.fragment:fragment-testing:1.4.0-alpha02 已发布。版本 1.4.0-alpha02 包含这些提交。

新功能

  • 无论使用当前的严格模式策略,FragmentStrictMode 现在将在通过 FragmentManager 启用日志记录时始终记录违规行为。(I02df6b/187872638
  • FragmentStrictMode 现在支持从严格模式 Violation 中排除特定的 Fragment 类,允许该类绕过任何处罚。(Ib4e5db/184786736

  • FragmentStrictMode Violation 类已扩展为根据每个违规行为添加结构信息。这使您能够验证导致违规行为的确切原因以及违规的片段(If5118b/187871150),每个 Violation 包含以下内容

    • WrongFragmentContainerViolation 现在包含 Fragment 试图添加到其中的 ViewGroup。(I83c75b/187871150
    • TargetFragmentUsageViolation 已扩展为 SetTargetFragmentUsageViolationGetTargetFragmentUsageViolationGetTargetFragmentRequestCodeUsageViolation,其中 SetTargetFragmentUsageViolation 包含目标片段和请求代码。(I741b4b/187871150
    • SetUserVisibleHintViolation 现在包含传递给 setUserVisibleHint() 的布尔值。(I00585b/187871150
    • FragmentTagUsageViolation 现在包含 <fragment> 标签试图将片段膨胀到其中的 ViewGroup。(I5dbbcb/187871150
    • FragmentReuseViolation 现在包含导致违规的 Fragment 的先前实例的唯一 ID。(I0544db/187871150
    • RetainInstanceUsageViolation 现在是抽象的,并且有两个子类,SetRetainInstanceUsageViolationGetRetainInstanceUsageViolation,分别代表违规类型的两种情况。(Ic81e5b/187871150

行为变更

  • FragmentContainerView 现在在尝试以编程方式或通过 XML 更改 fitsSystemWindow 属性时抛出异常。应由每个单独的片段的视图处理内边距。(Ie6651b/187304502

版本 1.4.0-alpha01

2021 年 5 月 18 日

androidx.fragment:fragment:1.4.0-alpha01androidx.fragment:fragment-ktx:1.4.0-alpha01androidx.fragment:fragment-testing:1.4.0-alpha01 已发布。版本 1.4.0-alpha01 包含这些提交。

新功能

  • FragmentContainerView 现在提供一个 getFragment() 方法,该方法返回最近添加到容器的片段。这使用与 findFragmentById() 相同的逻辑,使用 FragmentContainerView 的 ID,但允许链接调用。(Ife17ab/162527857

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • 添加了 FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE} 以指定是否在片段过渡中启用从主题中获取的标准 Activity 过渡动画。(I46652

多个回退栈

FragmentManager 保持一个回退栈,该回退栈由使用 addToBackStack() 的片段事务组成。这允许您弹出这些事务并返回到先前状态,使用 使用片段保存状态 的机制,以便您的片段可以适当地恢复其状态。

此版本通过提供两个新的 FragmentManager API 扩展了这些机制:saveBackStack(String name)restoreBackStack(String name)。这些 API 使用与 addToBackStack() 相同的 name 来保存 FragmentTransaction 的状态以及在这些事务中添加的每个片段的状态,并允许您稍后还原这些事务及其片段以及它们的状态完好无损。这使您能够通过保存当前后退堆栈并恢复保存的后退堆栈来有效地“切换”多个后退堆栈。

saveBackStack() 的操作类似于 popBackStack(),因为它是非同步的,并导致所有返回到该特定名称的片段事务被反转(“弹出”),并且任何添加的片段都被销毁和删除,但它在几个重要方面有所不同

  • saveBackStack() 始终是包含性的。
  • popBackStack() 不同的是,如果在回退栈上找不到指定的名称,或者如果提供了 null 名称,则 popBackStack() 将弹出回退栈上的所有事务,而 saveBackStack() 如果您以前没有使用该确切的非空名称使用 addToBackStack() 提交片段事务,则不会执行任何操作。
  • 保存了从这些事务中添加的所有片段的状态。这意味着每个片段的视图状态都已存储,每个片段的 onSaveInstanceState() 都被调用并且该状态被恢复,并且与这些片段关联的任何 ViewModel 实例都被保留(并且不会在它们上调用 onCleared())。

可用于 saveBackStack() 的片段事务必须满足某些条件

  • 每个片段事务都必须使用 setReorderingAllowed(true) 来确保事务可以作为单个原子操作恢复。
  • 保存的事务集必须是自包含的(即,它们能显式引用该事务集之外的任何片段),以确保它们可以在以后的任何时间恢复,无论在介入时间内对回退栈进行了哪些更改。
  • 任何保存的片段都不能是保留的片段,也不能在其传递的子片段集中具有保留的片段,以确保 FragmentManager 在保存回退栈后不会返回任何对已保存片段的引用。

saveBackStack() 类似,如果您以前没有使用相同的名称调用过 saveBackStack(),则 restoreBackStack() 不会执行任何操作。(b/80029773

片段严格模式

FragmentStrictMode API 提供 *运行时* 检查,允许您验证您的应用或您依赖的库是否没有调用已弃用的片段 API。当检测到违规行为时,您可以选择打印日志消息、触发您自己的自定义侦听器或使应用崩溃。FragmentStrictMode.Policy 控制启用哪些检查以及触发哪些“处罚”,可以通过新方法 setStrictModePolicy()FragmentManager 上设置。该策略适用于该 FragmentManager 并传递给任何未设置自己唯一策略的子片段管理器。(#123#131#150b/143774122

  • detectFragmentReuse() 检测以前删除的 Fragment 实例是否正在重新添加到 FragmentManager。在 Fragment 被销毁并从 FragmentManager 中删除后,您永远不应该与 Fragment 实例进行交互或保留对它的引用。(#142b/153738653
  • detectFragmentTagUsage() 检测您是否在布局 XML 中使用 <fragment> 标签。在将片段作为布局的一部分膨胀时,您应该始终使用 FragmentContainerView。(#141b/153738235
  • detectWrongFragmentContainer() 检测您是否将片段添加到 *不是* FragmentContainerView 的容器中。在布局中,您应该始终使用 FragmentContainerView 作为片段的容器。(#146b/181137036
  • detectRetainInstanceUsage() 检测您是否使用已弃用的 setRetainInstance()getRetainInstance() API。(#140b/153737954
  • detectSetUserVisibleHint() 检测您是否使用已弃用的 setUserVisibleHint() API。(#136b/153738974
  • detectTargetFragmentUsage() 检测您是否使用已弃用的 setTargetFragment()getTargetFragment()getTargetRequestCode() API。(#139b/153737745

API 变更

新的 Lint 检查

  • UseGetLayoutInflater Lint 检查现在会在 DialogFragment 中使用 LayoutInflater.from(Context) 时发出警告 - 您应该始终使用对话框片段的 getLayoutInflater() 方法来获取适合 LayoutInflater 的方法。(#156b/170781346
  • DialogFragmentCallbacksDetector Lint 检查现在会在 DialogFragmentonCreateDialog() 方法中调用 setOnCancelListenersetOnDismissListener 时发出警告 - 这些侦听器由 DialogFragment 本身拥有,您应该覆盖 onCancel()onDismiss() 以接收这些回调。(#171b/181780047b/187524311

錯誤修復

  • Fragment 1.3.4 开始:修复了在 Fragment 1.3.3 中使用 ViewTreeViewModelStoreOwner.get() API 与 ViewModelProvider 或 Jetpack Compose 方法 viewModel() 在 Fragment 中引入的回归。这些用例现在正确地使用了您的 Fragment 提供的 ViewModelProvider.Factory(如果它覆盖了 getDefaultViewModelProviderFactory()(如使用 Hilt 时 @AndroidEntryPoint 注释的 Fragment 所做的那样))。如果您没有覆盖该方法,则会创建一个 SavedStateViewModelFactory 作为默认工厂,它会与 Fragment 的视图一起保存和还原其状态。(I5cbfab/186097368
  • Fragment 1.3.4 开始:在 API 29 上使用 FragmentContainerView 时,内边距将不再无限期地调度,从而修复了 BottomNavigationBarFloatingActionButton 实例的问题。(I1bb78b/186012452
  • Fragment 1.3.4 开始:您现在可以在进程死亡后从片段结果包中检索 Parcelable。(I65932b/187443158
  • Fragment 1.3.4 开始:在 ViewGroup 上进行共享元素过渡时,如果 ViewGroup 的 transitionGroup 设置为 false,它现在将正确地进行过渡。(I99675

外部贡献

版本 1.3

版本 1.3.6

2021 年 7 月 21 日

androidx.fragment:fragment:1.3.6, androidx.fragment:fragment-ktx:1.3.6androidx.fragment:fragment-testing:1.3.6 已发布。 版本 1.3.6 包含这些提交。

錯誤修復

  • 来自 Fragment 1.4.0-alpha03: 当你尝试隐藏正在移除的 Fragment 时,FragmentManager 将不再崩溃。(I573dd, b/183634730)
  • 当根视图设置了 transitionGroup=”true” 时,使用 hide() 时,Fragment 的视图现在将正确设置为 GONE。(aosp/1766655, b/193603427)
  • FragmentActivity 现在始终在它覆盖的生命周期回调中将其第一个操作解锁保存状态。(I6db7a)

依赖更新

版本 1.3.5

2021 年 6 月 16 日

androidx.fragment:fragment:1.3.5, androidx.fragment:fragment-ktx:1.3.5androidx.fragment:fragment-testing:1.3.5 已发布。 版本 1.3.5 包含这些提交。

錯誤修復

  • 通过 aosp/1679887Fragment 1.3.4 中引入的共享元素转换中的回归已修复。Fragment 现在可以正确处理过渡组(直接通过 transitionGroup="true" 或间接通过 transitionNamebackground 设置),共享元素将不再抛出 IndexOutOfBoundsException。(I16484, b/188679569, b/188969304)

版本 1.3.4

2021 年 5 月 18 日

androidx.fragment:fragment:1.3.4, androidx.fragment:fragment-ktx:1.3.4androidx.fragment:fragment-testing:1.3.4 已发布。 版本 1.3.4 包含这些提交。

錯誤修復

  • 修复了在 Fragment 1.3.3 中使用 Hilt 时,使用 ViewTreeViewModelStoreOwner.get() API 与 ViewModelProvider 或 Jetpack Compose 的 viewModel() 方法在 Fragment 中引入的回归。这些用例现在将正确使用 Fragment 提供的 ViewModelProvider.Factory(如果它覆盖了 getDefaultViewModelProviderFactory(),就像 @AndroidEntryPoint 注释的 Fragment 那样)。如果你没有覆盖该方法,将创建一个保存和恢复其状态并与 Fragment 的视图一起保存的 SavedStateViewModelFactory 作为默认工厂。(I5cbfa, b/186097368)
  • 在 API 29 上使用 FragmentContainerView 时,内边距将不再无限地分发,修复了 BottomNavigationBarFloatingActionButton 实例的问题。(I1bb78, b/186012452)
  • 你现在可以在进程死亡后从 Fragment 结果捆绑包中检索你的 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.3androidx.fragment:fragment-testing:1.3.3 已发布。 版本 1.3.3 包含这些提交。

新功能

  • 使用 SavedStateViewModelFactory 时现在可以使用 SavedStateRegistryOwner,该 SavedStateRegistryOwner 是通过使用 Fragment 的视图对 ViewTreeSavedStateRegistryOwner.get() 进行操作来返回的。(I21acf, b/181577191)

錯誤修復

  • 修复了在 Fragment 1.3.2 中引入的回归,该回归会导致在弹出包含 setPrimaryNavFragment 操作的 FragmentTransaction 时,popEnter 动画无法运行,例如 NavHostFragment 使用的那些动画。(I38c87, b/183877426)
  • FragmentContainerView 现在确保每个 Fragment 都分发一组新的 WindowInsets,确保每个 Fragment 现在可以独立地使用这些内边距。(I63f68, b/172153900)
  • DialogFragment 现在可以正确处理将子 Fragment 添加到与你的自定义 Dialog 类中的容器具有相同 ID 的容器的情况,在重复使用内部使用的 ID(如 BottomSheetDialog 使用的 ID)时,修复了视图层次结构问题。(Ie6279, b/180021387)
  • FragmentManager.dump() 现在可以正确缩进活动 Fragment 列表中的第一个 Fragment。(If5c33, b/183705451)

新的状态管理器错误修复

  • 新的 Fragment 状态管理器现在可以正确处理使用隐藏操作的退出过渡。(I9e4de, b/184830265)

版本 1.3.2

2021 年 3 月 24 日

androidx.fragment:fragment:1.3.2, androidx.fragment:fragment-ktx:1.3.2androidx.fragment:fragment-testing:1.3.2 已发布。 版本 1.3.2 包含这些提交。

新的状态管理器错误修复

  • 当同时运行 popBackStack()commit() 操作时,最后一个操作现在将设置所有动画的方向,而不是运行一些弹出动画和一些进入动画。(I7072e, b/181142246)
  • 在共享元素层次结构中的视图将不再在进行共享元素转换时清除其转换名称。(I4d4a6, b/179934757)

依赖项更新

  • Fragment 现在依赖于 Activity 1.2.2,修复了在使用 Fragment 1.3.1 或更高版本时,Activity 的 InvalidFragmentVersionForActivityResult lint 检查出现的问题。
  • Fragment 现在依赖于 Lifecycle 2.3.1

版本 1.3.1

2021 年 3 月 10 日

androidx.fragment:fragment:1.3.1, androidx.fragment:fragment-ktx:1.3.1androidx.fragment:fragment-testing:1.3.1 已发布。 版本 1.3.1 包含这些提交。

新功能

  • 位于 DialogFragment 中的 Dialog 现在可以通过其 DecorView 访问 ViewTree 所有者,确保 DialogFragment 可以与 ComposeView 一起使用。(Ib9290, b/180691023)

錯誤修復

  • 使用 FragmentContainerView 膨胀到已 RESUMED 的活动中的 Fragment,现在在配置更改后将正确显示。(Ie14c8, b/180538371)
  • Fragment toString() 的末尾不再有额外的 } (I54705, b/177761088)
  • FragmentActivity 中的覆盖方法现在可以正确继承基本方法 javaDoc (I736ce, b/139548782)
  • setFragmentResultsetFragmentResultListener 的文档已更新其参数文档以反映它们不再接受可空值 (I990ba, b/178348386)

新的状态管理器错误修复

  • 修复了由 mFocusedView 引起的 Fragment 中的内存泄漏 (Ib4e9e, b/179925887)
  • Fragment 现在在使用显示/隐藏事务时将正确调用 onCreateOptionsMenu (I8bce8, b/180255554)
  • 在 Fragment 布局之前开始转换的子 Fragment 现在将正确达到 RESUMED (Ic11e6, b/180825150)
  • 使用 <fragment> 标签膨胀的 Fragment 现在将始终达到 RESUMED (I452ac, (I9fa49)

依赖项更新

版本 1.3.0

2021 年 2 月 10 日

androidx.fragment:fragment:1.3.0, androidx.fragment:fragment-ktx:1.3.0androidx.fragment:fragment-testing:1.3.0 已发布。 版本 1.3.0 包含这些提交。

自 1.2.0 以来的主要变化

  • 新的状态管理器: FragmentManager 的内部结构进行了重大 重写,修复了围绕生命周期事件、动画和转换的分发以及延迟 Fragment 处理的许多问题。
  • 活动结果 API 集成:添加了对 活动 1.2.0 中引入的 ActivityResultRegistry API 的支持,以处理 startActivityForResult()+onActivityResult() 以及 requestPermissions()+onRequestPermissionsResult() 流,无需在您的 Fragment 中重写方法,此外还提供了用于测试这些流程的挂钩。请参阅更新后的 从活动获取结果

    • 此版本修复了围绕无效请求代码和权限请求分发的多个问题,这些问题会阻止活动结果 API 在先前版本的 FragmentActivity 上运行。您必须升级到 Fragment 1.3.0 才能在 FragmentActivityAppCompatActivity 中使用活动结果 API。
  • 片段结果 API:添加了通过 FragmentManager 上的新 API 在两个 Fragment 之间传递结果的支持。这适用于层次结构片段(父级/子级)、DialogFragment 以及导航中的片段,并确保结果仅在您的 Fragment 至少处于 STARTED 状态时才发送给您的 Fragment。目标片段 API 已被弃用,取而代之的是这些新 API。请参阅 使用片段结果 API 获取结果

  • FragmentOnAttachListenerFragmentActivityFragment 上的 onAttachFragment() 回调已被弃用。添加了新的 FragmentOnAttachListener 来提供更灵活的替代方案,允许将 onAttachFragment() 的委托传递给单独的可测试监听器,并支持将监听器添加到除直接子 FragmentManager 之外的其他 FragmentManager。

  • FragmentScenario 改进fragment-testing 工件中的 FragmentScenario 类已在 Kotlin 中重写,并进行了一些改进

    • FragmentScenario 现在使用 setMaxLifecycle() 来实现 moveToState(),确保在所有 API 级别上的一致行为,并将 Fragment 的状态与底层 Activity 解耦。
    • FragmentScenario 现在支持设置初始 Lifecycle.State,以支持在首次移动到每个 Lifecycle.State 之前断言 Fragment 的状态。
    • 现在有一个替代 FragmentScenario API 的 onFragment,即 Kotlin 的具象化扩展方法 withFragment,它允许您返回一个值。值得注意的是,它会重新抛出给定块中引发的异常。
  • ViewTree 支持Fragment 现在支持 Lifecycle 2.3.0SavedState 1.1.0 中添加的 ViewTreeLifecycleOwner.get(View)ViewTreeViewModelStoreOwner.get(View)ViewTreeSavedStateRegistryOwner API,这样在使用 Fragment 内的 View 时,它将返回 Fragment 作为 ViewModelStoreOwner,以及与 Fragment 的 视图 Lifecycle 绑定的 SavedStateRegistryOwnerLifecycleOwner

  • TRANSIT_ 动画更改:片段默认效果 TRANSIT_FRAGMENT_OPENTRANSIT_FRAGMENT_CLOSETRANSIT_FRAGMENT_FADE 现在使用 Animator 而不是 Animation。用于构建这些动画器的资源现在是私有的。

  • setRetainInstance() 弃用:Fragment 上的 setRetainInstance() 方法已被弃用。随着 ViewModel 的引入,开发人员拥有一个特定 API 用于保留与活动、片段和导航图相关联的状态。这允许开发人员使用普通的非保留 Fragment,并保持他们想要保留的特定状态,避免常见的泄漏来源,同时保持保留状态的单次创建和销毁的有用属性(即 ViewModel 的构造函数以及它收到的 onCleared() 回调)。

  • ViewPager 1 适配器弃用:随着 ViewPager2 1.0.0 的发布,用于与 ViewPager 交互的 FragmentPagerAdapterFragmentStatePagerAdapter 类已被弃用。请参阅 从 ViewPager 迁移到 ViewPager2

版本 1.3.0-rc02

2021 年 1 月 27 日

androidx.fragment:fragment:1.3.0-rc02androidx.fragment:fragment-ktx:1.3.0-rc02androidx.fragment:fragment-testing:1.3.0-rc02 已发布。 版本 1.3.0-rc02 包含这些提交。

錯誤修復

  • 修复了在配置更改后父 DialogFragment 会出现在子 DialogFragment 上方的问题;子对话框片段现在始终出现在父对话框片段上方。 (I30806b/177439520)
  • 修复了使用 Animation 执行 hide 操作会导致隐藏的片段在动画结束时闪烁的问题。 (I57e22b/175417675)
  • 在视图层次结构附加之前添加了过渡的片段现在会正确地达到 RESUMED。 (I1fc1db/177154873)

新的状态管理器错误修复

  • Fragment 的视图 Lifecycle 现在会正确地处理 Fragment 的视图在 Lifecycle 达到 CREATED 之前被销毁的情况,避免出现“从 INITIALIZED 向下没有事件”的异常。 (eda2bdb/176138645)
  • 使用 Animator 的片段在使用 FragmentContainerView 时现在会按正确的顺序出现。 (Id9aa3b/176089197)

版本 1.3.0-rc01

2020 年 12 月 16 日

androidx.fragment:fragment:1.3.0-rc01androidx.fragment:fragment-ktx:1.3.0-rc01androidx.fragment:fragment-testing:1.3.0-rc01 已发布。 版本 1.3.0-rc01 包含这些提交。

錯誤修復

  • onPrepareOptionsMenu() 现在遵循与 onCreateOptionsMenu() 相同的逻辑,并且当父片段调用 setMenuVisibility(false) 时不再被调用。 (Id7de8b/173203654)

新的状态管理器错误修复

  • 修复了在将具有 Animation 的片段添加到 FragmentContainerView 然后使用弹出操作中断该添加操作时出现的泄漏和视觉伪像。 (I952d8)
  • 修复了如果在片段的 onCreate()onViewCreated() 方法期间替换片段,片段的视图将保留在视图层次结构中的问题。 (I8a7d5)
  • 当 Fragment 根视图恢复时,焦点现在会正确地恢复到这些视图。 (Ifc84b)
  • 在同一个片段事务中组合弹出和替换操作现在将显示正确的动画 (Ifd4e4b/170328691)

版本 1.3.0-beta02

2020 年 12 月 2 日

androidx.fragment:fragment:1.3.0-beta02androidx.fragment:fragment-ktx:1.3.0-beta02androidx.fragment:fragment-testing:1.3.0-beta02 已发布。 版本 1.3.0-beta02 包含这些提交。

新功能

  • FragmentScenario 已完全转换为 Kotlin,同时通过使用 Kotlin 1.4 的函数接口维护源代码和二进制兼容性,用于 FragmentAction。 (I19d31)

行为变更

  • 不使用 classandroid:name 属性膨胀片段的 FragmentContainerView 现在可以在 FragmentActivity 之外使用。 (Id4397b/172266337)
  • 尝试将片段的最大 Lifecycle 设置为 DESTROYED 现在将抛出 IllegalArgumentException (Ie7651b/170765622)
  • 使用 DESTROYED 状态初始化 FragmentScenario 现在将抛出 IllegalArgumentException (I73590b/170765622)

新的状态管理器错误修复

  • 修复了如果中断使用 Animator 或其中一个 TRANSIT_FRAGMENT_ 选项的片段过渡,视图将不会达到其最终状态的问题。 (I92426b/169874632)
  • 修复了阻止具有退出 Animation 的片段正确销毁的问题。 (I83d65)
  • 具有反转效果的退出片段现在会正确地取消并使用正确的进入效果重新启动。 (I62226b/167092035)
  • 修复了 hide() 的退出 Animator 不会运行的问题。 (Id7ffe)
  • 片段现在会在推迟后立即启动时正确地显示。 (Ie713bb/170022857)
  • 在动画期间移除其焦点视图的片段将不再尝试在达到 RESUMED 后恢复已分离视图的焦点 (I38c65b/172925703)

外部贡献

  • FragmentFactory 现在为不同的 ClassLoader 实例分别缓存片段类。感谢 Simon Schiller!(#87, b/113886460)

版本 1.3.0-beta01

2020 年 10 月 1 日

androidx.fragment:fragment:1.3.0-beta01androidx.fragment:fragment-ktx:1.3.0-beta01androidx.fragment:fragment-testing:1.3.0-beta01 已发布。 版本 1.3.0-beta01 包含这些提交。

新功能

  • setMaxLifecycle() 现在支持将 Lifecycle 状态设置为 INITIALIZING,只要片段尚未移动到 CREATED。(b/159662173)

API 变更

行为变更

錯誤修復

  • 使用 <fragment> 标签膨胀的片段现在将适当地等待其视图添加到容器中,然后再移动到 STARTED (I02f4c)
  • 可见然后 setMaxLifecycle() 设置为 CREATED 的片段现在会适当地运行其退出效果。(b/165822335)
  • 删除未添加到回退栈的已分离片段不再会导致内存泄漏。感谢 Nicklas Ansman Giertz!(b/166489383)
  • 活动片段现在将始终具有非空 FragmentManager,而具有非空 FragmentManager 的片段将始终被视为活动片段。(aosp/1422346)
  • 片段的默认效果,TRANSIT_FRAGMENT_OPENTRANSIT_FRAGMENT_CLOSETRANSIT_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-alpha08androidx.fragment:fragment-ktx:1.3.0-alpha08androidx.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 效果,或者单个片段上的 AnimatorTransition 都会运行的情况。(b/149569323)
  • 现在将运行所有进入和退出的片段的 enterTransitionexitTranstion,而不是仅运行最后一个进入片段和第一个退出片段。(b/149344150)
  • 延迟片段不再停留在 CREATED 状态,而是与其他片段一起移动到 STARTED。(b/129035555)
  • 修复了 FragmentManager 在混合使用延迟重新排序事务和非重新排序事务时,会以错误顺序执行操作的问题。(b/147297731)
  • 同时弹出多个片段将不再导致中间片段在延迟片段时暂时可见。(b/37140383)
  • FragmentManager 现在在从 onAttachFragment() 回调中调用 findFragmentById()findFragmentByTag() 时返回正确的片段。(b/153082833)
  • 当要替换它们的片段被延迟时,片段不再在要销毁的片段上调用 onCreateView()。(b/143915710)
  • 尝试组合框架 Transition 和 AndroidX Transition 实例时的错误消息现在会提到具有无效转换的片段。(b/155574969)

行为变更

  • 您现在可以在片段的 onCreate() 生命周期方法中对 ActivityResultLauncher 调用 launch()。(b/161464278)
  • onCreate() 之后调用 registerForActivityResult() 现在会抛出异常,表明不允许这样做,而不是在配置更改后静默地无法传递结果。(b/162255449)
  • FragmentActivity 现在使用在 Activity 1.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-alpha07androidx.fragment:fragment-ktx:1.3.0-alpha07androidx.fragment:fragment-testing:1.3.0-alpha07 已发布。 版本 1.3.0-alpha07 包含这些提交。

新功能

  • FragmentScenario 现在支持设置 CREATEDSTARTEDRESUMED 的初始生命周期状态,而不是始终将片段移动到 RESUMED 状态。(b/159662750)
  • 添加了 FragmentScenario API 的 onFragment 的替代方案,即 Kotlin 重新化的扩展方法 withFragment,它允许您返回一个值。值得注意的是,它会重新抛出在给定块中引发的异常。(b/158697631)

行为变更

  • FragmentScenario 现在使用 setMaxLifecycle() 来实现 moveToState(),确保在所有 API 级别上的一致行为,并将片段的状态与底层 Activity 解耦。(b/156527405)
  • ViewTreeSavedStateRegistryOwner 返回的 SavedStateRegistryOwner 现在与片段视图的生命周期绑定在一起。这确保了它与其状态在同一时间保存和恢复。(b/158503763)

錯誤修復

  • 片段现在在调用 ViewCompat.requestApplyInsets() 之前等待片段的视图附加,避免出现内嵌请求被删除的情况。(b/158095749)
  • 调用 clearFragmentResultListener 现在会适当地清除生命周期观察者。(b/159274993)

版本 1.3.0-alpha06

2020 年 6 月 10 日

androidx.fragment:fragment:1.3.0-alpha06androidx.fragment:fragment-ktx:1.3.0-alpha06androidx.fragment:fragment-testing:1.3.0-alpha06 已发布。 版本 1.3.0-alpha06 包含这些提交。

新功能

  • FragmentActivityFragment 上的 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-alpha05androidx.fragment:fragment-ktx:1.3.0-alpha05androidx.fragment:fragment-testing:1.3.0-alpha05 已发布。 版本 1.3.0-alpha05 包含以下提交。

新功能

API 变更

  • setFragmentResult()setFragmentResultListener() API 现在分别接受非空的 BundleFragmentResultListener。 要显式清除先前设置的结果或侦听器,请使用新的 clearFragmentResult()clearFragmentResultListener() 方法。(b/155416778)
  • 接受 lambda 的 setFragmentResultListener() Kotlin 扩展现在标记为 inline。(b/155323404)

行为变更

  • 以前已弃用的 startActivityForResult()startIntentSenderForResult()Fragment 上的 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-alpha04androidx.fragment:fragment-ktx:1.3.0-alpha04androidx.fragment:fragment-testing:1.3.0-alpha04 已发布。 版本 1.3.0-alpha04 包含以下提交。

新功能

  • 添加了对通过 FragmentManager 上的新 API 在两个 Fragment 之间传递结果的支持。 这适用于层次结构 Fragment(父级/子级)、DialogFragment 以及 Navigation 中的 Fragment,并确保结果仅在 Fragment 至少处于 STARTED 状态时才发送给您的 Fragment。(b/149787344)

API 变更

  • 目标 Fragment API 已弃用。 要在 Fragment 之间传递数据,应改用新的 Fragment 结果 API。(b/149787344)
  • Fragment 上的 startActivityForResult()/onActivityResult()requestPermissions()/onRequestPermissionsResult() API 已弃用。 请使用 Activity 结果 API。(aosp/1290887)
  • 来自 Activity 1.2.0-alpha04 的**重大变更**: prepareCall() 方法已重命名为 registerForActivityResult()。(aosp/1278717)

錯誤修復

  • Fragment 的 getViewLifecycleOwner() 现在在调用 onSaveInstanceState() 之前停止,这反映了 Fragment 生命周期的行为。(b/154645875)
  • 在 Fragment 上调用 setMenuVisibility(false) 现在会正确更改其子 Fragment 提供的菜单的可见性。(b/153593580)
  • 修复了在使用 FragmentContainerView 将 Fragment 添加到 DialogFragment 的视图层次结构时出现的 illegalStateException。(b/154366601)
  • Fragment 上的 getDefaultViewModelProviderFactory() 方法在将您的 Fragment 托管在 Activity 之外时不再崩溃。(b/153762914)

版本 1.3.0-alpha03

2020 年 4 月 1 日

androidx.fragment:fragment:1.3.0-alpha03androidx.fragment:fragment-ktx:1.3.0-alpha03androidx.fragment:fragment-testing:1.3.0-alpha03 已发布。 版本 1.3.0-alpha03 包含以下提交。

API 变更

  • Fragment 上的 prepareCall 方法现在为 final。(b/152439361)

錯誤修復

  • 修复了 Fragment 1.3.0-alpha02 中在使用 BottomSheetDialogFragment 时引入的回归问题。(b/151652127, aosp/1263328, aosp/1265163)
  • 修复了在配置更改后从 Fragment 中使用 prepareCall 时发生的崩溃问题。(b/152137004)
  • 修复了在使用 setTargetFragment() 时忽略共享元素和退出过渡的问题。(b/152023196)
  • 来自 Fragment 1.2.4: 更新了 Fragment ProGuard 规则,以允许对保留的 Fragment 进行混淆。(b/151605338)
  • 来自 Fragment 1.2.4: 在 DialogFragment 类上禁用了 FragmentLiveDataObserve Lint 规则,因为它们的生命周期和视图生命周期始终保持同步,这使得在调用 observe 时安全地使用 thisviewLifecycleOwner。(b/151765086)

依赖项更改

  • Fragment 依赖于 Activity 1.2.0-alpha03,该版本对 Activity 1.2.0-alpha02 中引入的 Activity 结果 API 做出了重大改进。

版本 1.3.0-alpha02

2020 年 3 月 18 日

androidx.fragment:fragment:1.3.0-alpha02androidx.fragment:fragment-ktx:1.3.0-alpha02androidx.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() 方法现在已弃用。 触碰 Fragment 视图的代码应在 onViewCreated()(在 onActivityCreated() 之前立即调用)中完成,其他初始化代码应在 onCreate() 中完成。 要在 Activity 的 onCreate() 完成时专门接收回调,应在 onAttach() 中将 LifeCycleObserver 注册到 Activity 的 Lifecycle 上,并在收到 onCreate() 回调后将其删除。(b/144309266)

錯誤修復

  • 来自 Fragment 1.2.3: 修复了 DialogFragment 中的一个错误,该错误会导致在从 onCreateDialog() 中调用 getLayoutInflater() 时出现 StackOverflowError。(b/117894767, aosp/1258664)
  • 来自 Fragment 1.2.3: 缩小了 Fragment 包含的 ProGuard 规则的范围,以确保可以剥离未使用的 Fragment 类。(b/149665169)
  • 来自 Fragment 1.2.3: 在使用隐藏 Kotlin 属性名称的局部变量名称时,修复了 UseRequireInsteadOfGet Lint 检查中的误报。(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-alpha01androidx.fragment:fragment-ktx:1.3.0-alpha01androidx.fragment:fragment-testing:1.3.0-alpha01 已发布。 版本 1.3.0-alpha01 包含以下提交。

新功能

API 变更

  • Fragment 上的 setRetainInstance() 方法已弃用。 随着 ViewModel 的引入,开发人员拥有一个专门的 API 来保留可以与 Activity、Fragment 和 Navigation 图关联的状态。 这使开发人员能够使用一个普通的、非保留的 Fragment 并保留他们想要保留的特定状态,从而避免了常见的泄漏来源,同时保留了保留状态的单次创建和销毁的有用属性(即,ViewModel 的构造函数以及它接收的 onCleared() 回调)。(b/143911815)
  • 随着 ViewPager2 1.0.0 的发布,用于与 ViewPager 交互的 FragmentPagerAdapterFragmentStatePagerAdapter 类已弃用。 请参阅 从 ViewPager 迁移到 ViewPager2。(b/145132715)

錯誤修復

  • Fragment ProGuard 规则现在只保留使用的 Fragment 类的默认构造函数,而不是所有 Fragment 实例,修复了 Fragment 1.2.1 中引入的回归问题。 (b/149665169
  • Fragment 1.2.2 中添加的 require___() Lint 规则不再对与隐藏的 Kotlin 属性名称相同的局部变量(例如 view)产生误报。 (b/149891163)
  • FragmentContainerView 在 Android Studio 中使用布局预览时不再抛出 UnsupportedOperationException。 (b/149707833)
  • 修复了保留的片段在状态保存后添加不会持续重新创建然后在每次配置更改后销毁的问题。 (b/145832397)

版本 1.2.5

版本 1.2.5

2020 年 6 月 10 日

androidx.fragment:fragment:1.2.5androidx.fragment:fragment-ktx:1.2.5androidx.fragment:fragment-testing:1.2.5 已发布。 版本 1.2.5 包含以下提交。

錯誤修復

  • 片段的 getViewLifecycleOwner() 现在在调用 onSaveInstanceState() 之前停止,反映了片段生命周期的行为。 这之前在 Fragment 1.3.0-alpha04 中发布。 (b/154645875)
  • 在片段上调用 setMenuVisibility(false) 现在会正确更改其子片段提供的菜单的可见性。 这之前在 Fragment 1.3.0-alpha04 中发布。 (b/153593580)

版本 1.2.4

版本 1.2.4

2020 年 4 月 1 日

androidx.fragment:fragment:1.2.4androidx.fragment:fragment-ktx:1.2.4androidx.fragment:fragment-testing:1.2.4 已发布。 版本 1.2.4 包含以下提交。

錯誤修復

  • 更新了 Fragment ProGuard 规则,以允许对保留的片段进行混淆。 (b/151605338)
  • DialogFragment 类上禁用了 FragmentLiveDataObserve Lint 规则,因为它们的生命周期和视图生命周期始终同步,因此在调用 observe 时使用 thisviewLifecycleOwner 是安全的。 (b/151765086)

版本 1.2.3

版本 1.2.3

2020 年 3 月 18 日

androidx.fragment:fragment:1.2.3androidx.fragment:fragment-ktx:1.2.3androidx.fragment:fragment-testing:1.2.3 已发布。 版本 1.2.3 包含以下提交。

錯誤修復

  • 修复了 DialogFragment 中的错误,该错误会导致在从 onCreateDialog() 中调用 getLayoutInflater() 时出现 StackOverflowError。 (b/117894767, aosp/1258665)
  • 缩小了 Fragment 包含的 ProGuard 规则的范围,以确保可以剥离未使用的 Fragment 类。 (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.2androidx.fragment:fragment-ktx:1.2.2androidx.fragment:fragment-testing:1.2.2 已发布。 版本 1.2.2 包含以下提交。

新的 Lint 检查

  • Lint 建议使用 viewLifecycleOwner 作为 LifecycleOwner 来调用 OnBackPressedDispatcher 中的 onCreateView()onViewCreated()onActivityCreated()。 (b/142117657)
  • 添加了一个新的 Lint 检查,以确认你在使用 fragment-testing 工件时使用了正确的 debugImplementation。 (b/141500106)
  • Fragment 现在建议使用关联的 require___() 方法来提供更具描述性的错误消息,而不是 checkNotNull(get___())requireNonNull(get___())get___()!!,用于所有包含 getrequire 等效项的 Fragment API。 (aosp/1202883)

錯誤修復

  • 修复了 Fragment ProGuard 文件,以避免 R8 警告 (b/148963981)
  • 改进了现有的 Lint 检查,建议在使用 observe 时使用 viewLifecycleOwner,以处理 livedata-ktx 扩展方法版本的 observe。 (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.1androidx.fragment:fragment-ktx:1.2.1androidx.fragment:fragment-testing:1.2.1 已发布。 版本 1.2.1 包含以下提交.

错误修复

  • 通过采用 Class 实例(或 Kotlin 反射版本)的 addreplace 方法添加的片段现在将通过 ProGuard 保留其默认构造函数。 (b/148181315)
  • FragmentStatePagerAdapterFragmentPagerAdapter 在运行 finishUpdate() 时不再捕获由 FragmentManager 抛出的异常。 (aosp/1208711)
  • 修复了 FragmentManager.findFragment() 不适用于通过 <fragment> 标签添加的片段的问题。 (b/147784323)
  • 使用 <fragment> 标签膨胀的片段现在在布局中时,始终在 onCreate() 之前收到对 onInflate() 的调用。 (aosp/1215856)
  • 在已销毁 Activity 时,对 FragmentManager 实例调用 toString() 不再抛出 NullPointerException。 (b/148189412)

依赖项更改

版本 1.2.0

版本 1.2.0

2020 年 1 月 22 日

androidx.fragment:fragment:1.2.0androidx.fragment:fragment-ktx:1.2.0androidx.fragment:fragment-testing:1.2.0 已发布。 版本 1.2.0 包含以下提交.

自 1.1.0 以来的重要更改

  • FragmentContainerView: FragmentContainerView 是强烈推荐用于动态添加 Fragment 的容器,替换使用 FrameLayout 或其他布局。 它还支持与 <fragment> 标签相同的 classandroid:name 和可选的 android:tag,但使用普通的 FragmentTransaction 来添加此初始片段,而不是 <fragment> 使用的自定义代码路径。
  • onDestroyView() 定时: Fragment 现在将在调用 onDestroyView() 之前等待退出动画、退出框架过渡和退出 AndroidX 过渡(使用 Transition 1.3.0)完成。
  • 基于类的 add()replace(): 在 FragmentTransaction 上添加了 add()replace() 的新重载,它们采用 Class<? extends Fragment> 和可选的 Bundle 参数。 这些方法使用你的 FragmentFactory 来构造要添加的 Fragment 的实例。 使用反射类型的 Kotlin 扩展(例如 fragmentTransaction.replace<YourFragment>(R.id.container))也已添加到 fragment-ktx 中。
  • Lifecycle ViewModel SavedState 集成: SavedStateViewModelFactory 现在是使用 by viewModels()by activityViewModels()ViewModelProvider 构造函数或 ViewModelProviders.of() 和 Fragment 时使用的默认工厂。
  • 新的 Lint 检查: 添加了一个新的 Lint 检查,以确保你在从 onCreateView()onViewCreated()onActivityCreated() 中观察 LiveData 时使用 getViewLifecycleOwner()
  • getFragmentManager() 已弃用: Fragment 上的 getFragmentManager()requireFragmentManager() 方法已弃用,并替换为单个 getParentFragmentManager() 方法,该方法返回 Fragment 添加到的非空 FragmentManager(你可以使用 isAdded() 来确定是否可以安全调用)。
  • FragmentManager.enableDebugLogging() 已弃用: 静态 FragmentManager.enableDebugLogging 方法已弃用。 FragmentManager 现在会尊重 Log.isLoggable() 用于标签 FragmentManager,允许你在不重新编译应用程序的情况下启用 DEBUGVERBOSE 日志记录。

已知问题

  • 仅通过 FragmentContainerView 上的 classandroid:name 属性引用的片段不会被 ProGuard 自动保留,需要您为每个片段类手动添加保留规则。(b/142601969
  • 在使用 XML 中的 FragmentContainerView 使用 classandroid:name 添加 NavHostFragment 时,您不能在 Activity 的 onCreate() 中使用 findNavController()。(b/142847973

版本 1.2.0-rc05

2020 年 1 月 8 日

androidx.fragment:fragment:1.2.0-rc05androidx.fragment:fragment-ktx:1.2.0-rc05androidx.fragment:fragment-testing:1.2.0-rc05 已发布。 版本 1.2.0-rc05 包含以下提交

错误修复

  • 修复了使用 <fragment> 标签时 Fragment 1.2.0-rc04 中的回归,该回归导致 onViewCreated() 在活动销毁期间被错误调用。(b/146290333
  • 使用 <fragment> 标签添加的片段现在即使它们仅在某些情况下出现在布局中(即,仅在您的横向布局中),其非配置也会被清除。因此,即使不在您的布局中,这些片段也会正确地移至 CREATED,而不是被实例化但从未经过任何生命周期方法。(b/145769287

版本 1.2.0-rc04

2019 年 12 月 18 日

androidx.fragment:fragment:1.2.0-rc04androidx.fragment:fragment-ktx:1.2.0-rc04androidx.fragment:fragment-testing:1.2.0-rc04 已发布。 版本 1.2.0-rc04 包含以下提交

错误修复

  • 调整了 TRANSIT_FRAGMENT_OPENTRANSIT_FRAGMENT_CLOSETRANSIT_FRAGMENT_FADE 的动画,以避免视觉问题。(b/145468417

版本 1.2.0-rc03

2019 年 12 月 4 日

androidx.fragment:fragment:1.2.0-rc03androidx.fragment:fragment-ktx:1.2.0-rc03androidx.fragment:fragment-testing:1.2.0-rc03 已发布。 版本 1.2.0-rc03 包含以下提交

错误修复

  • 修复了一个非故意的行为更改,其中已移除的片段仍然被 findFragmentById() / findFragmentByTag() 返回,而它们的退出动画/过渡正在运行。(b/143982969aosp/1167585
  • 当包含活动调用 onSaveInstanceState() 时,子片段现在会在其父片段之前被正确停止。(b/144380645
  • 修复了在弹出隐藏的片段后视图被错误地标记为 INVISIBLE 的问题。(b/70793925
  • 片段共享元素过渡现在可以处理已旋转、缩放等的视图。(b/142835261

文档更新

  • 阐明了围绕 setUserVisibleHint() 的弃用文档。(b/143897055
  • 改进了关于 setFragmentFactory()getFragmentFactory() 的文档,以更好地表明设置 FragmentFactory 也会影响子 FragmentManager。(aosp/1170095

依赖项更改

  • 片段现在依赖于 Lifecycle 2.2.0-rc03、Lifecycle ViewModel SavedState 1.0.0-rc03 和 Activity 1.1.0-rc03

版本 1.2.0-rc02

2019 年 11 月 7 日

androidx.fragment:fragment:1.2.0-rc02androidx.fragment:fragment-ktx:1.2.0-rc02androidx.fragment:fragment-testing:1.2.0-rc02 已发布。 版本 1.2.0-rc02 包含以下提交

错误修复

  • 在 Kotlin 中,当从 onCreateView()onViewCreated()onActivityCreated() 观察 LiveData 时,使用 getViewLifecycleOwner() 的 LintFix(在 Fragment 1.2.0-rc01 中引入)现在使用 Kotlin 属性访问语法 viewLifecycleOwner,而不是 getViewLifecycleOwner()。(aosp/1143821

版本 1.2.0-rc01

2019 年 10 月 23 日

androidx.fragment:fragment:1.2.0-rc01androidx.fragment:fragment-ktx:1.2.0-rc01androidx.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 上的 onDismissonCancel 回调现在保证传递给它们的 DialogInterface 不为空,并且当它们执行时,getDialog() 返回不为空。(b/141974033
  • FragmentContainerView 现在将由 classandroid:name 定义的片段添加为膨胀的一部分,确保 findFragmentById()findFragmentByTag() 之后立即生效。(b/142520327
  • 修复了 FragmentContainerView 中由于状态保存导致的 IllegalStateException。(b/142580713
  • 修复了当 FragmentContainerView 类被混淆时,FragmentContainerView 中的 UnsupportedOperationException。(b/142657034

已知问题

  • 仅通过 FragmentContainerView 上的 classandroid:name 属性引用的片段不会被 ProGuard 自动保留,需要您为每个片段类手动添加保留规则。我们已经禁用了建议切换到 FragmentContainerView 的 Lint 规则,直到通过 aapt2 修复此问题。(b/142601969

版本 1.2.0-beta02

2019 年 10 月 11 日

androidx.fragment:fragment:1.2.0-beta02androidx.fragment:fragment-ktx:1.2.0-beta02androidx.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-beta01androidx.fragment:fragment-ktx:1.2.0-beta01androidx.fragment:fragment-testing:1.2.0-beta01 已发布。 版本 1.2.0-beta01 包含以下提交

新功能

  • FragmentContainerView 添加了对使用 android:name 和可选 android:tag XML 属性添加初始片段的支持。与 <fragment> 标签不同,FragmentContainerView 使用普通的 FragmentTransaction 在幕后添加初始片段,允许对 FragmentContainerView 进行进一步的 FragmentTransaction 操作,并允许使用 View Binding 来布局。(b/139830628b/141177981
  • 片段现在包含一个 Lint 警告,提供一个快速修复以将 <fragment> 替换为 FragmentContainerView。(b/139830056

错误修复

  • 修复了使用 androidx.transition 时发生的 ClassCastException。(b/140680619
  • 在使用 Transition 1.3.0-beta01 时,片段现在会在分派 onDestroyView() 之前等待 androidx.transition 过渡(除了框架过渡和动画,它们分别在 Fragment 1.2.0-alpha03Fragment 1.2.0-alpha02 中修复)完成。(aosp/1119841
  • 在使用 Transition 1.3.0-beta01 时,片段现在会在对同一个容器启动新的过渡/动画之前,正确地取消 androidx.transition 过渡。(aosp/1119841
  • 修复了在 API 17 及以下版本上,使用 FragmentContainerView 时,在片段的根视图上使用 androidx.transition 过渡时出现的问题。(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-alpha04androidx.fragment-ktx:example:1.2.0-alpha04androidx.fragment:fragment-testing:1.2.0-alpha04 已发布。 版本 1.2.0-alpha04 包含以下提交

API 更改

  • Fragment 上的 getFragmentManager()requireFragmentManager() 方法已被弃用,并被单个 getParentFragmentManager() 方法替换,该方法返回 Fragment 添加到的非空 FragmentManager(可以使用 isAdded() 来确定是否可以安全地调用)。(b/140574496)
  • 静态 FragmentManager.enableDebugLogging 方法已被弃用。FragmentManager 现在会根据标签 FragmentManagerLog.isLoggable() 进行调试,允许您启用 DEBUGVERBOSE 日志记录,而无需重新编译您的应用程序。(aosp/1116591)

错误修复

  • 当其他 Fragment 上的退出动画正在运行时,Fragment 现在会被正确销毁。(b/140574199)
  • 修复了 Fragment 会调用 Activity.findViewById() 的问题,而之前它不会这样做。(aosp/1116431)

版本 1.2.0-alpha03

2019 年 9 月 5 日

androidx.fragment:fragment:1.2.0-alpha03androidx.fragment:fragment-ktx:1.2.0-alpha03androidx.fragment:fragment-testing:1.2.0-alpha03 已发布。此版本中包含的提交可以在 此处 找到。

API 更改

  • FragmentContainerView 现在是 final。(b/140133091)

错误修复

  • FragmentContainerView 现在会在从回退栈中弹出 Fragment 时正确反转绘制顺序。(b/139104187)
  • 修复了同时弹出 Fragment 和添加新 Fragment 时运行错误动画的问题。(b/111659726)
  • Fragment 现在会在分派 onDestroyView() 之前等待过渡(除了动画,动画在 Fragment 1.2.0-alpha02 中已修复)完成。(b/138741697)

版本 1.2.0-alpha02

2019 年 8 月 7 日

androidx.fragment:fragment:1.2.0-alpha02androidx.fragment:fragment-ktx:1.2.0-alpha02androidx.fragment:fragment-testing:11.2.0-alpha02 已发布。此版本中包含的提交可以在 此处 找到。

新功能

  • SavedStateViewModelFactory 现在是在使用 by viewModels()by activityViewModels()ViewModelProvider 构造函数或 ViewModelProviders.of()(以及 Fragment)时使用的默认工厂。(b/135716331)
  • 使用 TRANSIT_FRAGMENT_OPENTRANSIT_FRAGMENT_CLOSETRANSIT_FRAGMENT_FADE(在 FragmentTransaction 上使用 setTransition)时的默认动画已更新,以匹配 Android 10 设备上活动使用的动画。(aosp/1012812aosp/1014730)

API 更改

  • 引入了 FragmentContainerView 作为强烈推荐的动态添加 Fragment 的容器,以替换 FrameLayout 等等的使用,因为它修复了动画 z 顺序问题以及窗口内边距分派到 Fragment 的问题。(b/37036000aosp/985243b/136494650)
  • 添加了一个静态 FragmentManager.findFragment(View) 方法,用于从 Fragment 膨胀的视图中检索包含 Fragment。在 fragment-ktx 中也提供了 Kotlin 扩展。(aosp/1090757)
  • FragmentTransaction 上添加了 add()replace() 的新重载,它们接受 Class<? extends Fragment> 和可选的 Bundle 参数。这些方法使用您的 FragmentFactory 来构建要添加的 Fragment 实例。使用重新定义类型(即 fragmentTransaction.replace<YourFragment>(R.id.container))的 Kotlin 扩展也已添加到 fragment-ktx 中。(b/126124987)
  • @MainThread 注释已添加到 Fragment 生命周期的回调中。(b/127272564)
  • FragmentTransactionFragmentManager.BackStackEntry 上与面包屑标题相关的 API 已被弃用。(b/138252944)
  • FragmentTransaction 上的 setTransitionStyle 方法已被弃用。(aosp/1011537)
  • FragmentManager 中的许多方法不再是 abstractFragmentManager 本身仍然是 abstract,不应该直接实例化或扩展;您应该继续只从 getSupportFragmentManager()getChildFragmentManager() 等等中获取现有实例。

错误修复

  • Fragment 1.1.0-rc04 开始:Fragment 现在会在 Fragment 被弹出时正确取消延迟的过渡。(b/138251858)
  • Fragment 1.1.0-rc03 开始:修复了多次使用超时调用 postponeEnterTransition() 时不会取消之前超时的的问题。(b/137797118)
  • Fragment 1.1.0-rc02 开始:修复了在删除当前项时 FragmentPagerAdapterFragmentStatePagerAdapter 中发生的崩溃。(b/137209870)
  • Fragment 现在会在分派 onDestroyView() 之前等待动画完成。(b/136110528)
  • 子 Fragment 及其后代的 Fragment 动画现在在动画化父 Fragment 时会得到正确处理。(b/116675313)
  • 修复了在使用共享元素过渡并将弹出操作和添加操作组合在一起时发生的 NullPointerException。(b/120507394)
  • 为在 Robolectric 测试中使用 FragmentPagerAdapterFragmentStatePagerAdapter 时发生的 IllegalStateException 添加了一个解决方法。(b/137201343)

版本 1.2.0-alpha01

2019 年 7 月 2 日

androidx.fragment:fragment:1.2.0-alpha01androidx.fragment:fragment-ktx:1.2.0-alpha01androidx.fragment:fragment-testing:1.2.0-alpha01 已发布。此版本中包含的提交可以在 此处 找到。

新功能

  • FragmentManager 现在会在附加 Fragment 的视图后并直接在调用 onViewCreated() 之前调用 requestApplyInsets(),确保您的视图始终具有正确的内边距。(b/135945162)

错误修复

  • 修复了在弹出使用 setPrimaryNavigationFragment()(在 replace() 之前)的 FragmentTransaction 时发生的 NullPointerException。(b/134673465)

版本 1.1.0

版本 1.1.0

2019 年 9 月 5 日

androidx.fragment:fragment:1.1.0androidx.fragment:fragment-ktx:1.1.0androidx.fragment:fragment-testing:1.1.0 已发布。此版本中包含的提交可以在 此处 找到。

自 1.0.0 以来的重要更改

  • fragment-testingfragment-testing 工件提供了一个 FragmentScenario 类,用于独立测试 Fragment。有关更多详细信息,请参阅 测试您的应用程序的 Fragment 文档
  • FragmentFactory:您现在可以在 FragmentManager 上设置一个 FragmentFactory 来管理 Fragment 实例的创建,从而消除了对没有参数的构造函数的严格要求。
  • ViewModel 的 Kotlin 属性委托fragment-ktx 工件现在包含两个 Kotlin 属性委托:by viewModels() 用于访问与单个 Fragment 关联的 ViewModel,以及 by activityViewModels() 用于访问与活动相关的 ViewModel。
  • 最大生命周期:您现在可以通过在 FragmentTransaction 上调用 setMaxLifecycle() 为 Fragment 设置最大生命周期状态。这将取代现在已弃用的 setUserVisibleHint()FragmentPagerAdapterFragmentStatePagerAdapter 有一个新的构造函数,允许您切换到新的行为。
  • FragmentActivity 的 LayoutId 构造函数FragmentActivity 的子类现在可以选择调用 FragmentActivity 上的构造函数,该构造函数接受一个 R.layout ID,表示应设置为内容视图的布局,作为在 onCreate() 中调用 setContentView() 的替代方法。这不会改变子类必须具有无参数构造函数的要求。
  • Fragment 的 LayoutId 构造函数Fragment 的子类现在可以选择调用 Fragment 上的构造函数,该构造函数接受一个 R.layout ID,表示应为此 Fragment 使用的布局,作为覆盖 onCreateView() 的替代方法。膨胀的布局可以在 onViewCreated() 中进行配置。
  • 延迟并设置超时:已添加了 postponeEnterTransition() 的新重载,它接受超时。

版本 1.1.0-rc04

2019 年 8 月 7 日

androidx.fragment:fragment:1.1.0-rc04androidx.fragment:fragment-ktx:1.1.0-rc04androidx.fragment:fragment-testing:1.1.0-rc04 已发布。此版本中包含的提交可以在 此处 找到。

错误修复

  • Fragment 现在会在 Fragment 被弹出时正确取消延迟的过渡。(b/138251858)

版本 1.1.0-rc03

2019 年 7 月 19 日

androidx.fragment:fragment:1.1.0-rc03androidx.fragment:fragment-ktx:1.1.0-rc03androidx.fragment:fragment-testing:1.1.0-rc03 已发布。此版本中包含的提交可以在 此处 找到。

错误修复

  • 修复了多次使用超时调用 postponeEnterTransition() 时不会取消之前超时的的问题。(b/137797118)

版本 1.1.0-rc02

2019 年 7 月 17 日

androidx.fragment:fragment:1.1.0-rc02androidx.fragment:fragment-ktx:1.1.0-rc02androidx.fragment-testing:fragment:1.1.0-rc02 已发布。此版本中包含的提交可以在 此处 找到。

错误修复

  • 修复了在删除当前项时 FragmentPagerAdapterFragmentStatePagerAdapter 中发生的崩溃。(b/137209870)

版本 1.1.0-rc01

2019 年 7 月 2 日

androidx.fragment:fragment:1.1.0-rc01androidx.fragment:fragment-ktx:1.1.0-rc01androidx.fragment:fragment-testing:1.1.0-rc01 已发布。此版本中包含的提交可以在 此处 找到。

错误修复

  • 当过渡正在运行时,使用 show()hide() 操作时,片段现在可以正确更新其可见性。 (b/133385058)
  • 修复了在弹出使用 setPrimaryNavigationFragment()(在 replace() 之前)的 FragmentTransaction 时发生的 NullPointerException。(b/134673465)

版本 1.1.0-beta01

2019 年 6 月 5 日

androidx.fragment:fragment:1.1.0-beta01androidx.fragment:fragment-ktx:1.1.0-beta01androidx.fragment:fragment-testing:1.1.0-beta01 已发布。此版本中包含的提交可以在 此处 找到。

错误修复

  • 嵌套片段的 androidx.lifecycle.Lifecycle 回调(特别是与 STARTEDRESUMEDPAUSEDSTOPPEDDESTROYED 相关的回调)现在已正确嵌套。 (b/133497591)
  • 在片段的 onCreate() 中注册的 OnBackPressedCallback 实例现在优先于子片段管理器。 (b/133175997)
  • 当父片段被替换时,子片段不再进行动画。 (b/121017790)
  • 当使用 animateLayoutChanges="true" 时,片段动画和过渡现在被忽略,修复了片段未正确销毁的问题。 (b/116257087)

版本 1.1.0-alpha09

2019 年 5 月 16 日

androidx.fragment:fragment:1.1.0-alpha09androidx.fragment:fragment-ktx:1.1.0-alpha09androidx.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-alpha08androidx.fragment:fragment-ktx:1.1.0-alpha08androidx.fragment:fragment-testing:1.1.0-alpha08 已发布。此版本中包含的提交可以在 此处 找到。

此版本与 Preferences 1.1.0-alpha01 到 1.1.0-alpha04 不兼容。使用此版本的片段时,请升级到 Preferences 1.1.0-alpha05。

新功能

  • 添加了 postponeEnterTransition() 的一个新重载,它接受一个超时时间,在此之后,片段会自动调用 startPostponedEnterTransition() b/120803208

API 更改

  • 重大变更:之前已弃用的 FragmentFactory instantiate 方法(它接受一个 Bundle)已被移除。 aosp/953856
  • 重大变更:FragmentPagerAdapterFragmentStatePagerAdapter 中的 RESUME_ONLY_CURRENT_FRAGMENTUSE_SET_USER_VISIBLE_HINT 常量已分别重命名为 BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENTBEHAVIOR_SET_USER_VISIBLE_HINTaosp/954782

错误修复

  • 通过 setMaxLifecycle() 限制其生命周期的片段不再在到达其最终状态之前恢复。 b/131557151
  • 当使用 setMaxLifecycle(Lifecycle.State.CREATED) 时,片段将正确销毁其视图。 aosp/954180

版本 1.1.0-alpha07

2019 年 4 月 25 日

androidx.fragment:fragment:1.1.0-alpha07androidx.fragment:fragment-ktx:1.1.0-alpha07androidx.fragment:fragment-testing:1.1.0-alpha07 已发布。此版本中包含的提交可以在 此处 找到。

新功能

  • 您现在可以通过在 FragmentTransaction 上调用 setMaxLifecycle() 来为片段设置最大生命周期状态。这取代了现在已弃用的 setUserVisibleHint()FragmentPagerAdapterFragmentStatePagerAdapter 具有一个新的构造函数,允许您切换到新的行为。 (b/129780800)

API 变更

  • FragmentScenario 上的 moveToState(STARTED) 现在只能在 API 24+ 设备上调用。 (b/129880016)

行为变更

  • 作为 (b/129907905) 的结果,后退栈中的片段 **不会** 在托管活动重新创建时收到对 onCreateView() 的回调。 onCreateView() 现在只会在片段变为可见时(即后退栈被弹出)调用。

错误修复

  • 修复了在 XML 中使用 <fragment> 标签以及 FragmentActivityAppCompatActivitycontentLayoutId 构造函数时出现的问题。 (b/129907905)
  • 修复了后退栈中的片段在配置更改后不会至少移动到 CREATED 的问题,导致视图模型和子保留片段未正确处置。 (b/129593351)
  • 修复了 restoreSaveState 中由实例状态保存后保留片段的同步错误引起的崩溃。 (b/130433793) (aosp/947824)
  • 修复了使用片段生命周期添加的 OnBackPressedCallbackFragmentManager 具有后退栈时不会被调用的问题。有关更多详细信息,请参见 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-alpha06androidx.fragment:fragment-ktx:1.1.0-alpha06androidx.fragment:fragment-testing:1.1.0-alpha06 已发布。此版本中包含的提交可以在 此处 找到。

新功能

  • FragmentManager 抛出的异常现在在消息中包含片段的名称。 (b/67759402)

API 变更

  • FragmentFragmentActivity 现在包含一个接受 @LayoutRes int 的第二个构造函数,它取代了之前用 @ContentView 注释类的行为。这种方法在应用程序和库模块中都有效。 (b/128352521)
  • FragmentActivity 的 onActivityResult() 现在已正确标记为 @CallSuper。 (b/127971684)
  • 接受参数 Bundle 的 FragmentFactory 的 instantiate 方法已弃用,应用程序应使用不接受 Bundle 的新的 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)
  • 修复了在还原片段状态时在您的活动上使用 @ContentView 构造函数出现的问题。 (b/127313094)
  • 更正了在用尚未附加到 FragmentManager 的片段替换现有目标片段时 setTargetFragment() 的逻辑。 (aosp/932156)

版本 1.1.0-alpha05

2019 年 3 月 13 日

androidx.fragment:fragment:1.1.0-alpha05androidx.fragment:fragment-ktx:1.1.0-alpha05androidx.fragment:fragment-testing:1.1.0-alpha05 已发布。此版本中包含的完整提交列表可以在 此处 找到。

新功能

  • @ContentView 注释查找现在已缓存 (b/123709449)

行为更改

  • 使用附加到不同 FragmentManager 的片段调用 remove()hide()show()detach()setPrimaryNavigationFragment() 现在会抛出 IllegalStateException,而不是静默失败 (aosp/904301)

错误修复

  • FragmentActivityonNewIntent 现在已正确用 @CallSuper 标记 (b/124120586)
  • 修复了在使用 getDialog().dismiss()getDialog().cancel()DialogFragmentonDismiss() 可能被调用两次的问题 (b/126563750)

版本 1.1.0-alpha04

2019 年 2 月 7 日

androidx.fragment:fragment 1.1.0-alpha04androidx.fragment:fragment-ktx 1.1.0-alpha04androidx.fragment:fragment-testing 1.1.0-alpha04 已发布。

新功能

  • 添加了对 @ContentView 类注释的支持,它允许您指示哪个布局 XML 文件应被膨胀,作为覆盖 onCreateView() 的替代方法。建议在 onViewCreated() 中执行与视图相关的操作。 (aosp/837619)
  • fragment-testing 现在依赖于 androidx.test:core-ktx 1.1.0 稳定版 (b/121209673)
  • 您现在可以使用 openActionBarOverflowOrOptionsMenuFragmentScenario 测试托管片段的选项菜单 (b/121126668)

API 更改

  • 添加了 requireArguments() 方法,该方法返回 @NonNull Bundle 或抛出 IllegalStateException (b/121196360)
  • 添加了一个说明,指出 getLifecycle()getViewLifecycleOwner()getViewLifecycleOwnerLiveData() 不应该被重写,将在未来的版本中被设置为 final。如果您目前正在重写此方法,请 提交功能请求。 (aosp/880714)
  • 添加了一个说明,指出 getViewModelStore() 不应该被重写,将在未来的版本中被设置为 final。如果您目前正在重写此方法,请 提交功能请求。 (aosp/880713)
  • 修复了与之前版本 Fragment 的二进制兼容性问题。 (aosp/887877) (aosp/889834)

错误修复

  • 当您将 null 传递给 setTargetFragment() 时,目标 Fragment 会被正确清除。 (aosp/849969)
  • 修复了目标 Fragment 有时在 onDestroy() 中或之后不可用的问题。 (b/122312935)
  • DialogFragment 的 onDismiss() 现在在 onDestroy() 之前被调用。 (aosp/874133) (aosp/890734)

版本 1.1.0-alpha03

2018 年 12 月 17 日

新功能

  • Fragment 现在实现了 BundleSavedStateRegistryOwner 并依赖于新发布的 SavedState 库 [aosp/824380]
  • 添加了一个 by activityViewModels Kotlin 属性委托,用于检索与包含 Activity 关联的 ViewModel [b/119050253]
  • 扩展了 by viewModels Kotlin 属性委托,使其可以接受一个可选的 lambda 方法来获取 ViewModelStoreOwner,允许您传入父 Fragment 或其他自定义的 ViewModelStoreOwner,代码如下:val viewModel: MyViewModel by viewModels(::requireParentFragment) [b/119050253]

API 更改

  • FragmentScenario 现在允许您指定主题,例如 Theme.AppCompat [b/119054431]. 这是一个重大更改。
  • 添加了一个 requireView() 方法,该方法返回一个 @NonNull View 或抛出一个 IllegalStateException [b/120241368]
  • 添加了一个 requireParentFragment() 方法,该方法返回一个 @NonNull Fragment 或抛出一个 IllegalStateException [b/112103783]

错误修复

  • 修复了 IllegalStateException: Failure saving state b/120814739
  • 从保存的实例状态恢复的 Fragment 现在将始终收到一个非空的 Bundle [b/119794496]
  • 删除了 Fragment 不会再重复使用它们的 Lifecycle 对象,如果重新添加 [b/118880674]

版本 1.1.0-alpha02

2018 年 12 月 3 日

新功能

  • FragmentScenario 的 Kotlin 扩展现在允许您使用 lambda 来构造 Fragment,作为传递 FragmentFactory 实例的替代方法。 (aosp/812913)

错误修复

  • 修复了在回退栈上使用嵌套 Fragment 时出现的 IllegalStateException (b/119256498)
  • 修复了使用 FragmentScenario.recreate()FragmentFactory 时发生的崩溃 (aosp/820540)
  • 修复了一个问题,即在 Fragment 被移除后无法访问目标 Fragment (aosp/807634)

版本 1.1.0-alpha01

2018 年 11 月 5 日

这是 fragment-testing 工件和 FragmentScenario 的第一个版本,它构建在 androidx.test:core API 之上。有关更多详细信息,请参阅 Fragment 测试文档

新功能

  • 用于在隔离环境中测试 Fragment 的新 FragmentScenario 类。
  • 您现在可以在任何 FragmentManager 上设置一个 FragmentFactory 来控制如何实例化新的 Fragment 实例。
  • 添加了一个新的 by viewModels() Kotlin 属性委托,用于从 Fragment 中检索 ViewModel。
  • 挂起的输入事件(如点击)现在在 Fragment 的 onStop() 中被取消。

API 更改

  • 在 Fragment API 表面上显著扩展了可空性注释。

错误修复

  • 修复了一个问题,该问题导致 Fragment 操作在 LiveData 中失败 (b/77944637)

已知问题

  • 在 Fragment 从 FragmentManager 中移除后,无法访问目标 Fragment。
  • fragment-testing 依赖于 androidx.test:core:1.0.0-beta01 而不是正确的 androidx.test:core:1.0.0