Fragment

将您的应用分割成多个独立的屏幕,这些屏幕托管在 Activity 中。
最新更新 稳定版 候选版本 Beta 版本 Alpha 版本
2024 年 10 月 30 日 1.8.5 - - -

声明依赖项

要添加对 Fragment 的依赖项,您必须将 Google Maven 存储库添加到您的项目。阅读Google 的 Maven 存储库以了解更多信息。

在应用或模块的build.gradle文件中添加所需构件的依赖项

Groovy

dependencies {
    def fragment_version = "1.8.5"

    // 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.5"

    // 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.5 版

2024 年 10 月 30 日

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

错误修复

  • 修复了仅在预测返回手势被取消或中断后由saveBackStack触发的IllegalStateException异常。(I3387db/342419080

1.8.4版本

2024年10月2日

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

错误修复

  • 修复了一个问题:使用Androidx Transitions时,快速按下系统返回按钮或快速执行手势返回会导致Fragment崩溃。(Ibc038b/364804225
  • 修复了Fragment中的一个问题:中断预测返回手势会使FragmentManager进入未定义状态,甚至可能显示错误的Fragment。(If82e2b/338624457
  • 修复了在动态交换AndroidFragment实例使用的类时,AndroidFragment中出现的UninitializedPropertyAccessException异常。(I12dea

1.8.3版本

2024年9月4日

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

错误修复

  • FragmentManager现在在处理预测返回手势时会正确考虑挂起的操作。这应该可以确保执行系统返回不再导致IndexOutOfBoundsException异常。(I9ba32b/342316801
  • 如果在包含Activity/Fragment的状态已保存时将AndroidFragment添加到组合中,它将不再崩溃。(I985e9b/356643968

1.8.2版本

2024年7月24日

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

错误修复

  • AndroidFragment现在可以正确处理父Fragment放在Fragment返回栈的情况,避免在返回到该Fragment时出现“找不到ID的视图”问题。(I94608
  • 通过采用ViewGroup参数的FragmentTransaction.add方法添加的Fragment现在会在进入onStart()之前等待onContainerAvailable。这会影响该API的用户,例如AndroidFragment,它现在会在将AndroidFragment移动到onStart()之前等待其重新进入组合。(I94608

1.8.1版本

2024年6月26日

androidx.fragment:fragment-*:1.8.1 is released. 1.8.1版本包含这些提交

错误修复

  • 修复了一个问题:启动预测返回手势时,没有容器的Fragment会立即DESTROYED。现在,它们会在手势完成之前保持在CREATED状态。(If6b83b/345244539

1.8.0版本

2024年6月12日

androidx.fragment:fragment-*:1.8.0 is released. 1.8.0版本包含这些提交

自1.7.0版本以来的重要更改

  • fragment-compose构件现在包含一个AndroidFragment Composable,允许通过Fragment类名将Fragment添加到Compose层次结构中。它会自动处理Fragment状态的保存和恢复。这应该用作以前推荐的方法(使用AndroidViewBinding来膨胀Fragment)的直接替代。
  • FragmentManagerOnBackStackChangedListener接口上的onBackStackChangeCancelled回调现在作为FragmentManager中执行操作的一部分触发,使其时间与onBackStackChangeCommitted回调的时间更加一致。

1.8.0-rc01版本

2024年5月29日

androidx.fragment:fragment-*:1.8.0-rc01 is released. 1.8.0-rc01版本包含这些提交

错误修复

  • FragmentManagers OnBackStackChangedListener接口上的onBackStackChangeCancelled回调现在作为FragmentManager中执行操作的一部分触发,使其时间与onBackStackChangeCommitted回调的时间更加一致。(I5ebfbb/332916112

1.8.0-beta01版本

2024年5月14日

androidx.fragment:fragment-*:1.8.0-beta01 is released. 1.8.0-beta01版本包含这些提交

错误修复

  • 来自Fragment 1.7.1:预测返回现在仅适用于所有Fragment都具有Animator或可搜索Androidx Transition的事务。这修复了一个问题:取消部分可搜索的事务会导致黑屏。(I43037b/339169168

1.8.0-alpha02版本

2024年4月17日

androidx.fragment:fragment-*:1.8.0-alpha02 is released. 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 is released. 1.8.0-alpha01版本包含这些提交

新功能

  • 新的AndroidFragment Composable允许通过Fragment类名将Fragment添加到Compose层次结构中。它会自动处理Fragment状态的保存和恢复。这可以用作AndroidViewBinding Composable的直接替代。(b/312895363Icf841

文档更改

  • 更新了OnBackStackChangedListener API的文档,说明了它们的调用时间和使用方法。(I0bfd9

依赖项更新

1.7版本

1.7.1版本

2024年5月14日

androidx.fragment:fragment-*:1.7.1 is released. 1.7.1版本包含这些提交

错误修复

  • 预测返回现在仅适用于所有Fragment都具有Animator或可搜索Androidx Transition的事务。这修复了一个问题:取消部分可搜索的事务会导致白屏。(I43037b/339169168

1.7.0版本

2024年5月1日

androidx.fragment:fragment-*:1.7.0 is released. 1.7.0版本包含这些提交

预测返回手势支持

  • Fragment现在在使用Animator或使用AndroidX Transition 1.5.0时提供对应用内预测返回的支持。这允许用户使用返回手势通过在决定是否通过完成手势来提交事务或取消事务之前搜索Animator/Transition来查看之前的Fragment。
转换系统 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中预测返回支持的任何问题,请针对Fragment提交问题,并提供一个可以重现您问题的示例项目。您可以使用Activity的onCreate()中的FragmentManager.enabledPredictiveBack(false)禁用预测返回。

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

Fragment Compose构件

创建了一个新的fragment-compose构件,专注于支持正在从基于Fragment的架构迁移到完全基于Compose的架构的应用。

此新构件提供的第一个特性是在Fragment上添加了一个content扩展方法,旨在简化在单个Fragment的UI中使用Compose,它会为您创建一个ComposeView并设置正确的ViewCompositionStrategy

  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

错误修复

  • 修复了一个问题,即在对不在容器中的Fragment提交预测后退手势时,该Fragment永远不会被销毁。Fragment现在将立即移动到最终状态。(Ida0d9
  • 修复了Fragment中一个问题,即使用预测后退手势中断传入转换将销毁进入视图并留下空白屏幕。(Id3f22b/319531491

1.7.0-alpha10 版本

2024年2月7日

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

错误修复

  • 修复了先前Fragment版本中已知的问题,在该问题中,如果从未通过addOnBackStackChangedListener添加任何FragmentManager.OnBackStackChangedListener,则对于Animator或AndroidX Transition使用Fragment的预测后退支持时,Fragment将从handleOnBackProgressed抛出NullPointerException。(I7c835

1.7.0-alpha09 版本

2024年1月24日

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

Fragment Compose构件

创建了一个新的fragment-compose构件,专注于支持正在从基于Fragment的架构迁移到完全基于Compose的架构的应用。

此新构件提供的第一个特性是在Fragment上添加了一个content扩展方法,旨在简化在单个Fragment的UI中使用Compose,它会为您创建一个ComposeView并设置正确的ViewCompositionStrategy。(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

已知问题

  • 当对Animator或AndroidX Transition使用Fragment的预测后退支持时,如果从未通过addOnBackStackChangedListener添加任何FragmentManager.OnBackStackChangedListener,则Fragment将从handleOnBackProgressed抛出NullPointerException。手动添加监听器可以解决此崩溃问题。下一个Fragment版本将提供此问题的修复。

1.7.0-alpha08 版本

2024年1月10日

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

清理

1.7.0-alpha07 版本

2023年11月29日

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

错误修复

  • 修复了由设置共享元素转换并同时未能设置进入/退出转换导致的NullPointerException。(I8472b
  • 来自Fragment 1.6.2:当FragmentContainerView的Fragment膨胀时,其状态(例如FragmentManager、Host和id)现在可在onInflate回调中访问。(I1e44cb/307427423
  • 来自Fragment 1.6.2:当使用clearBackStack删除一组Fragment时,现在当父Fragment的ViewModels被清除时,任何嵌套Fragment的ViewModel也将被清除。(I6d83cb/296173018

1.7.0-alpha06 版本

2023年10月4日

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

依赖项更新

1.7.0-alpha05 版本

2023年9月20日

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

新功能

  • Fragments现在在使用Androidx Transitions时提供对预测后退的支持。这允许您使用后退手势在决定通过完成的手势提交或取消事务之前,使用自定义Androidx Transition跳转到上一个Fragment。您必须依赖于Transition 1.5.0-alpha03版本才能启用此功能。(Ib49b4b/285175724

已知问题

  • 目前存在一个问题,即在您取消一次带有转换的后退手势后,下次启动后退手势时,它将无法运行转换,从而导致出现空白屏幕。这可能是由转换库中的问题引起的。(b/300157785)。如果您遇到此问题,请针对Fragment提交一个问题,并提供一个可以重现您问题的示例项目。您可以通过在Activity的onCreate()中使用FragmentManager.enabledPredictiveBack(false)来禁用预测后退。

1.7.0-alpha04 版本

2023年9月6日

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

错误修复

  • 修复了取消预测后退手势时Fragment无法达到正确生命周期状态的问题。(I7cffeb/297379023
  • 修复了允许动画与转换一起运行的回归。(I59f36
  • 修复了在使用预测后退和Fragment时出现的一个问题,即在后退栈上倒数第二个Fragment上快速连续两次后退将导致崩溃。(Ifa1a4

1.7.0-alpha03 版本

2023年8月23日

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

错误修复

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

1.7.0-alpha02 版本

2023年8月9日

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

错误修复

  • 在API 34中使用带有预测后退手势的Fragment时,如果您使用的是不支持搜索的转换系统(AnimationsTransitions)或根本没有转换,则Fragment现在将等到手势完成之后才会执行后退操作。(I8100c

1.7.0-alpha01 版本

2023年6月7日

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

新功能

  • 现在,在使用Animator时,Fragment 提供了对预测式应用内返回的支持。这允许您在使用自定义 Animator 查看上一个 Fragment 后,通过完成手势来决定是否提交事务或取消。

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 的ViewModel现在也会被清除。(I6d83cb/296173018

1.6.1 版本

2023 年 7 月 26 日

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

错误修复

  • 修复了一个问题:即使 Fragment 实例已返回到RESUMED状态,在 Activity 停止但未销毁时存储的保存状态也会被错误地缓存。如果该 Fragment 实例在使用多个返回堆栈 API 保存和恢复该 Fragment 时位于返回堆栈中,则会导致该缓存状态被重复使用。(I71288b/246289075

依赖项更新

  • Fragment 现在依赖于Activity 1.7.2。这修复了一个问题:Kotlin 用户无法扩展ComponentDialog而无需显式依赖 Activity。(b/287509323

1.6.0 版本

2023年6月7日

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

自 1.5.0 版本以来的重要更改

  • Fragment的保存状态已完全拆分为私有库状态(自定义Parcelable类)和开发者提供的状态,后者现在始终存储在一个Bundle中,允许精确确定 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 版本包含这些提交。

错误修复

  • 修复了一个问题,该问题会导致在连续发出多个startActivityForResult请求时,ActivityResult以不正确的请求代码发送。(If0b9db/249519359
  • 修复了一个问题,如果onBackStackChangeListener回调与确实更改返回堆栈的事务混合在一起,则会为实际上未更改返回堆栈的事务调度这些回调。(I0eb5cb/279306628

1.6.0-beta01 版本

2023 年 4 月 19 日

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

错误修复

  • 使用带有超时的postponeEnterTransition,然后替换延迟的 Fragment 将不再导致延迟的 Fragment 泄漏。(I2ec7db/276375110
  • 新的onBackStackChangeStartedonBackStackChangeCommitted回调现在只会调度 Fragment 一次,即使多个事务包含相同的 Fragment。(Ic6b69

1.6.0-alpha09 版本

2023 年 4 月 5 日

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

API 变更

  • DialogFragment现在通过requireComponentDialog() API 提供对底层ComponentDialog的访问。(I022e3b/234274777
  • Fragment 的commitNow()executePendingTransactions()popBackStackImmediate() API 已使用@MainThread进行注释,这意味着当它们不在主线程上调用时,现在都会抛出构建错误,而不是等待在运行时失败。(Ic9665b/236538905

错误修复

  • 修复了FragmentManager中的一个错误,该错误在同一帧中保存和恢复可能会导致崩溃。(Ib36afb/246519668
  • OnBackStackChangedListeneronBackStackChangeStartedonBackStackChangeCommitted回调现在仅在FragmentManager返回堆栈更改时才执行。(I66055b/274788957

1.6.0-alpha08 版本

2023 年 3 月 22 日

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

行为变更

  • OnBackStackChangedListener.onBackStackChangeCommited回调的时机已调整为在执行 Fragment 操作之前执行。这确保回调永远不会传递已分离的 Fragment。(I66a76b/273568280

错误修复

  • 来自Fragment 1.5.6:修复了一个问题,即如果Lifecycle已经STARTED并且结果已可用,则在setFragmentResultListener内调用clearFragmentResultListener将不起作用。(If7458

依赖项更新

1.6.0-alpha07 版本

2023 年 3 月 8 日

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

错误修复

  • 来自Fragment 1.5.6:修复了一个问题,即无论 Fragment 是否添加了菜单项,移除任何 Fragment 都会使 Activity 的菜单失效。(50f098b/244336571

1.6.0-alpha06 版本

2023 年 2 月 22 日

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

行为变更

  • FragmentManageronBackStackChangedListener 上新的 onBackStackChangedStarted 回调现在将在 Fragment 开始移动到目标状态之前执行。(I34726

1.6.0-alpha05 版本

2023 年 2 月 8 日

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

新功能

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

API 变更

  • 现在,采用 IntentIntentSenderFragmentFragmentManager 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,用于检测子 Fragment 是否嵌套在其父级的 View 层次结构中,但未添加到父级的 childFragmentManager 中。(I72521b/249299268

行为变更

  • Fragment 现在会在 onAttach() 之前恢复其 SavedStateRegistry 状态,确保它可以在所有上层生命周期方法中使用。(I1e2b1

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 之间的版本差异导致的冲突。(I8e534b/128612536

错误修复

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() 重写中调用 super。(I14798b/238928865

错误修复

  • 修复了新提供程序回调接口(OnConfigurationChangedProviderOnMultiWindowModeChangedProviderOnTrimMemoryProviderOnPictureInPictureModeChangedProvider)集成导致的回归问题,以确保 Fragment 始终获得正确的回调。(I9b380I34581,(I8dfe6b/242570955),If9d6bId0096I690b3I2cba2

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() 事务可能会导致退出的 Fragment 运行错误的 Animation/Animator。(Ib1c07b/214835303

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 状态的来源。(b/207158202

错误修复

  • 来自Fragment 1.5.1:修复了 DialogFragmentCallbacksDetector 中的一个回归问题,其中使用与 AGP 7.4 捆绑的 lint 版本会导致 lint 崩溃。(b/237567009

依赖项更新

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,然后替换延迟的 Fragment 将不再导致延迟的 Fragment 泄漏。(I2ec7db/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 是否添加了菜单项,移除任何 Fragment 都会使 Activity 的菜单失效。(50f098b/244336571
  • 修复了一个问题,即如果 Lifecycle 已经 STARTED 并且结果已经可用,则在 setFragmentResultListener 内调用 clearFragmentResultListener 将不起作用。(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 版本包含以下提交。

错误修复

  • Fragment 将不再错误地将 ViewModel 状态保存为视图注册表保存状态的一部分。(I10d2bb/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)的主机并调用其已弃用的分派函数将无法分派到子 Fragment。(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 版本包含以下提交。

错误修复

  • 修复了一个错误,该错误导致回退栈上的 Fragment 获取 onMultiWindowModeChanged()onPictureInPictureModeChanged()onLowMemory()onConfigurationChanged() 回调。(I34581I8dfe6b/242570955
  • 嵌套的子片段将不再接收多个onMultiWindowModeChanged()onPictureInPictureModeChanged()onLowMemory()onConfigurationChanged()回调。(I690b3Id0096If9d6bI2cba2)

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的问题。(Ib1c07b/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()返回的默认对话框。
  • 保存实例状态重构 - 片段已开始更改保存实例状态的方式。这是为了帮助清楚地识别片段中已保存的状态以及状态的来源。当前更改包括:
    • FragmentManager现在将其保存的实例状态保存到Bundle中,而不是直接保存到自定义Parcelable中。
    • 通过Fragment Result APIs设置但尚未传递的结果现在与FragmentManager的内部状态分开保存。
    • 与每个单独片段关联的状态现在与FragmentManager的内部状态分开保存,因此您可以将与单个片段关联的已保存状态量与其在Fragment调试日志中存在的唯一ID关联起来。

其他更改

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

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关联起来。(a153e0b/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方法,该方法使用commitNowshowNow函数保持一致。请注意,这不会立即关闭Dialog,它只会同步更新FragmentManager的状态。(I15c36b/72644830)

保存实例状态重构

  • FragmentManager现在将其保存的实例状态保存到Bundle中,而不是直接保存到自定义Parcelable中。这是提高对片段实际保存内容透明度的第一步。(I93807b/207158202)
  • 通过Fragment Result APIs设置但尚未传递的结果现在与FragmentManager的内部状态分开保存。这将提高对作为已保存实例状态一部分保存的结果的透明度。(I6ea12b/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 变更

  • 提供菜单到活动ActionBar的Fragment API已弃用,因为它们将片段与活动紧密耦合,并且无法独立测试。Activity 1.4.0-alpha01中添加的MenuHostMenuProvider API提供了一个可测试的、生命周期感知的等效API界面,片段应该使用该界面。(I50a59I20758)

错误修复

  • SavedStateViewFactory现在支持使用CreationExtras,即使它是用SavedStateRegistryOwner初始化的。如果提供了额外参数,则忽略已初始化的参数。(I6c43bb/224844583)

1.5.0-alpha03版本

2022年2月23日

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

API 变更

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

行为变更

1.5.0-alpha02版本

2022年2月9日

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

新功能

错误修复

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

1.4 版本

1.4.1 版本

2022年1月26日

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

错误修复

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

1.4.0 版本

2021年11月17日

androidx.fragment:fragment:1.4.0androidx.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() 方法,该方法返回最近添加到容器的片段。这使用与 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() 不同的是,如果在回退栈上找不到指定的名称,或者提供了 null 名称,popBackStack() 将弹出回退栈上的所有事务,而 saveBackStack() 如果您之前没有使用具有该精确非 null 名称的 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-beta01androidx.fragment:fragment-ktx:1.4.0-beta01androidx.fragment:fragment-testing:1.4.0-beta01 已发布。1.4.0-beta01 版本包含这些提交。

错误修复

  • 父片段现在将在启动自己的回调之前将其整个层次结构中的 onHiddenChanged() 分派。(Iedc20b/77504618
  • 从具有打开键盘的片段切换到具有回收器视图的片段时,键盘现在将自动关闭。(I8b842b/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 时将片段生命周期更正为片段视图生命周期。(aosp/1830457b/200326272

文档更新

  • 现在由ActivityResult APIs处理的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.6FragmentActivity现在始终在其重写的生命周期回调中的第一个操作中解锁保存的状态。(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来保存其状态。FragmentController中的saveAllState()restoreSavedState()方法也已被弃用。如果您使用FragmentControllerFragmentActivity之外托管Fragment,则应让您的FragmentHostCallbacks实现SavedStateRegistryOwner。(Iba68eb/188734238

错误修复

  • 修复了在同时运行使用replace()FragmentTransaction时,作为支持多个回退栈的一部分调用saveBackStack()会失败的问题。(I73137
  • 修复了在使用restoreBackStack() API 支持多个回退栈时,手动还原包含多个事务的已保存回退栈后会发生NullPointerException的问题。这也修复了setReorderingAllowed(true)未对所有事务进行检查的问题。(I8c593
  • 修复了FragmentManager即使在从FragmentManager中删除Fragment后,也会错误地继续还原Fragment先前保存的状态,从而导致保存的状态随时间不断增长的问题。(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 现在支持将特定的 Fragment 类从严格模式 Violation 中豁免,允许该类绕过任何惩罚。(Ib4e5db/184786736

  • FragmentStrictModeViolation 类已扩展,以根据每个违规行为添加结构信息。这允许您准确验证导致违规的原因以及违规的 fragment (If5118b/187871150),每个 Violation 包含以下内容:

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

行为变更

  • FragmentContainerView 现在在尝试通过编程方式或通过 XML 更改 fitsSystemWindow 属性时会抛出异常。应由各个 fragment 的视图处理内边距。(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() 方法,该方法返回最近添加到容器的 fragment。这使用与 FragmentContainerView 的 ID 一起使用的 findFragmentById() 相同的逻辑,但允许链接调用。(Ife17ab/162527857

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

多个回退栈

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

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

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

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

可以与 saveBackStack() 一起使用的片段事务必须满足某些条件。

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

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

Fragment 严格模式

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

  • detectFragmentReuse() 检测以前已移除的 Fragment 实例是否正在重新添加到 FragmentManager。在 Fragment 实例被销毁并从 FragmentManager 中移除后,您决不应该与之交互或保留其引用。(#142b/153738653
  • detectFragmentTagUsage() 检测您是否在布局 XML 中使用 <fragment> 标签。在将 fragment 作为布局的一部分加载时,应始终使用 FragmentContainerView。(#141b/153738235
  • detectWrongFragmentContainer() 检测您是否将 fragment 添加到 *不是* FragmentContainerView 的容器中。在布局中,应始终使用 FragmentContainerView 作为 fragment 的容器。(#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) 时发出警告 - 您应始终使用对话框 fragment 的 getLayoutInflater() 方法来获取适合 LayoutInflater 的方法。(#156b/170781346
  • DialogFragmentCallbacksDetector Lint 检查现在会在 DialogFragmentonCreateDialog() 方法中调用 setOnCancelListenersetOnDismissListener 时发出警告 - 这些侦听器由 DialogFragment 本身拥有,您应该重写 onCancel()onDismiss() 以接收这些回调。(#171b/181780047b/187524311

错误修复

  • 来自 片段 1.3.4:修复了 片段 1.3.3 中引入的一个回归问题,该问题在片段内使用 ViewModelProvider 或 Jetpack Compose 方法 viewModel()ViewTreeViewModelStoreOwner.get() API 一起使用时出现。这些用例现在会正确使用片段提供的 ViewModelProvider.Factory(如果它覆盖了 getDefaultViewModelProviderFactory() 方法,例如使用 Hilt 的 @AndroidEntryPoint 注解的片段)。如果未覆盖该方法,则会创建一个 SavedStateViewModelFactory 作为默认工厂,它会与片段的视图一起保存和恢复其状态。(I5cbfab/186097368
  • 来自 片段 1.3.4:在 API 29 上使用 FragmentContainerView 时,内边距将不再无限分发,从而修复了 BottomNavigationBarFloatingActionButton 实例的问题。(I1bb78b/186012452
  • 来自 片段 1.3.4:现在可以在进程死亡后从片段结果包中检索 Parcelable 对象。(I65932b/187443158
  • 来自 片段 1.3.4:在对 ViewGroup 执行共享元素转换时,如果 ViewGroup 的 transitionGroup 设置为 false,现在它将正确进行转换。(I99675

外部贡献

版本 1.3

版本 1.3.6

2021年7月21日

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

错误修复

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

依赖项更新

版本 1.3.5

2021年6月16日

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

错误修复

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

版本 1.3.4

2021 年 5 月 18 日

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

错误修复

  • 修复了 片段 1.3.3 中引入的一个回归问题,该问题在使用 Hilt 时,在片段内使用 ViewModelProvider 或 Jetpack Compose 方法 viewModel()ViewTreeViewModelStoreOwner.get() API 一起使用时出现。这些用例现在会正确使用片段提供的 ViewModelProvider.Factory(如果它覆盖了 getDefaultViewModelProviderFactory() 方法)。如果未覆盖该方法,则会创建一个 SavedStateViewModelFactory 作为默认工厂,它会与片段的视图一起保存和恢复其状态。(I5cbfab/186097368
  • 在 API 29 上使用 FragmentContainerView 时,内边距将不再无限分发,从而修复了 BottomNavigationBarFloatingActionButton 实例的问题。(I1bb78b/186012452
  • 现在可以在进程死亡后从片段结果包中检索 Parcelable 对象。(I65932b/187443158
  • 在对 ViewGroup 执行共享元素转换时,如果 ViewGroup 的 transitionGroup 设置为 false,现在它将正确进行转换。(I99675

版本 1.3.3

2021年4月21日

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

新功能

  • 现在,当与使用片段视图的 ViewTreeSavedStateRegistryOwner.get() 返回的 SavedStateRegistryOwner 一起使用时,SavedStateViewModelFactory 可以正常工作。(I21acfb/181577191

错误修复

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

新的状态管理器错误修复

  • 新的片段状态管理器现在可以正确处理带有隐藏操作的退出转换。(I9e4deb/184830265

版本 1.3.2

2021年3月24日

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

新的状态管理器错误修复

  • 同时运行popBackStack()commit()操作时,最后一个操作现在将设置所有动画的方向,而不是运行一些弹出动画和一些进入动画。(I7072eb/181142246
  • 在共享元素层级结构中的视图在进行共享元素转换时,其转换名称将不再被清除。(I4d4a6b/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.1androidx.fragment:fragment-ktx:1.3.1androidx.fragment:fragment-testing:1.3.1已发布。1.3.1版本包含这些提交。

新功能

  • 现在,DialogFragment中的对话框可以通过其DecorView访问ViewTree所有者,确保DialogFragment可以与ComposeView一起使用。(Ib9290b/180691023

错误修复

  • 使用FragmentContainerView将Fragment膨胀到已经RESUMED的Activity中后,现在在配置更改后可以正确显示。(Ie14c8b/180538371
  • Fragment toString()结尾不再有多余的}。(I54705b/177761088
  • FragmentActivity中重写的方法现在正确继承了基方法javaDoc。(I736ceb/139548782
  • setFragmentResultsetFragmentResultListener的文档已更新其参数文档,以反映它们不再接受可为空的值。(I990bab/178348386

新的状态管理器错误修复

  • 修复了由mFocusedView引起的Fragment内存泄漏问题。(Ib4e9eb/179925887
  • 使用显示/隐藏事务时,Fragment现在会正确调用onCreateOptionsMenu。(I8bce8b/180255554
  • 在Fragment布局之前启动转换的子Fragment现在将正确达到RESUMED状态。(Ic11e6b/180825150
  • 使用<fragment>标签膨胀的Fragment现在将始终达到RESUMED状态。(I452ac,(I9fa49))

依赖项更新

1.3.0版本

2021年2月10日

androidx.fragment:fragment:1.3.0androidx.fragment:fragment-ktx:1.3.0androidx.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获取结果

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

  • **FragmentOnAttachListener**: FragmentActivityFragment上的onAttachFragment()回调已弃用。添加了一个新的FragmentOnAttachListener来提供更灵活的替代方案,允许将onAttachFragment()委派给单独的可测试监听器,并支持向除直接子FragmentManager以外的其他FragmentManager添加监听器。

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

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

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

  • **setRetainInstance()弃用**: Fragment上的setRetainInstance()方法已弃用。随着ViewModel的引入,开发人员拥有一个特定的API来保留可以与Activity、Fragment和Navigation图关联的状态。这允许开发人员使用普通的非保留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
  • 在视图层级结构附加之前添加转换的Fragment现在可以正确达到RESUMED状态。(I1fc1db/177154873

新的状态管理器错误修复

  • Fragment的视图Lifecycle现在可以正确处理在Lifecycle达到CREATED之前销毁Fragment视图的情况,避免出现“no event down from INITIALIZED”的异常。(eda2bdb/176138645
  • 使用Animator的Fragment在使用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
  • 现在在恢复片段根视图时,焦点可以正确地恢复到这些视图。(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
  • 尝试将片段的最大生命周期设置为 DESTROYED 现在将抛出 IllegalArgumentExceptionIe7651b/170765622
  • 使用 DESTROYED 状态初始化 FragmentScenario 现在将抛出 IllegalArgumentExceptionI73590b/170765622

新的状态管理器错误修复

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

外部贡献

  • FragmentFactory 现在为不同的 ClassLoader 实例分别缓存片段类。感谢 Simon Schiller!(#87b/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 变更

行为变更

  • 片段资源文件已正确设置为私有。(aosp/1425237

错误修复

  • 使用 <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
  • 只有共享元素转换的片段现在可以正确完成其特殊效果,这意味着它们实际上移动到其最终状态。(Iaebc7b/166658128
  • 片段视图现在始终在销毁之前从容器中移除。(Id5876
  • 新的状态管理器现在始终在添加进入的片段视图之前移除退出的片段视图。(I41a6e
  • 新的状态管理器现在会尊重对片段视图可见性的显式更改。这意味着如果您在动画开始之前将进入片段的视图设置为 INVISIBLE,它将实际上保持不可见。(b/164481490
  • 片段现在优先考虑 Animators 而不是 Animations,这意味着同时具有两者的片段将只运行 Animator 并忽略 Animation。(b/167579557
  • 新的状态管理器不再导致片段在使用进入动画时闪烁。(b/163084315

已知问题

使用新的状态管理器时,如果您在进入特殊效果期间按下返回键,而不是返回到上一个片段,则旧片段永远不会被重新添加,导致出现空白屏幕。(b/167259187b/167092035b/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 内部状态管理的重大重构,这会影响生命周期方法、动画和转换的调度,以及如何处理推迟的事务。默认情况下启用此功能。有关更多详细信息,请参阅 Fragments:重建内部博客文章。(b/139536619b/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的reified扩展方法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之外的其他FragmentManager。(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

行为变更

  • 先前已弃用的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-alpha04androidx.fragment:fragment-ktx:1.3.0-alpha04androidx.fragment:fragment-testing:1.3.0-alpha04已发布。1.3.0-alpha04版本包含这些提交。

新功能

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

API 变更

  • 目标片段API已弃用。要在线程之间传递数据,应改用新的片段结果API。(b/149787344
  • Fragment上的startActivityForResult()/onActivityResult()requestPermissions()/onRequestPermissionsResult() API已弃用。请使用Activity 结果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-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/151652127aosp/1263328aosp/1265163
  • 修复了在配置更改后从片段使用prepareCall时发生的崩溃。(b/152137004
  • 修复了在使用setTargetFragment()时忽略共享元素和退出转换的问题。(b/152023196
  • 来自Fragment 1.2.4:更新了Fragment ProGuard规则,以允许混淆保留的片段。(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 Result 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()方法现已弃用。访问片段视图的代码应在onViewCreated()(在onActivityCreated()之前立即调用)中完成,其他初始化代码应在onCreate()中完成。要专门接收activity的onCreate()完成时的回调,应在onAttach()中将LifeCycleObserver注册到activity的Lifecycle上,并在收到onCreate()回调后将其移除。(b/144309266

错误修复

  • 来自Fragment 1.2.3:修复了DialogFragment中的一个bug,该bug在从onCreateDialog()中调用getLayoutInflater()时会导致StackOverflowError。(b/117894767aosp/1258664
  • 来自Fragment 1.2.3:缩小了Fragment包含的ProGuard规则的范围,以确保可以剥离未使用的Fragment类。(b/149665169
  • 来自Fragment 1.2.3:在使用与Kotlin属性名称相同的局部变量名时,修复了UseRequireInsteadOfGet Lint检查中的误报。(b/149891163
  • 来自Fragment 1.2.3FragmentContainerView不再为在布局预览中使用不正确的构造函数抛出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和导航图关联的状态。这允许开发者使用普通的、非保留的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中的一个bug,该bug在从onCreateDialog()中调用getLayoutInflater()时会导致StackOverflowError。(b/117894767aosp/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
  • 现在,碎片建议使用关联的require___()方法来生成更具描述性的错误消息,而不是对所有包含getrequire等效项的碎片API使用checkNotNull(get___())requireNonNull(get___())get___()!!。(aosp/1202883

错误修复

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

错误修复

  • 通过采用Class实例(或Kotlin的具名类型版本)的addreplace方法添加的碎片现在保留了它们的默认构造函数。(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以来重要更改

  • FragmentContainerViewFragmentContainerView是强烈推荐用于动态添加碎片的容器,它取代了FrameLayout或其他布局的使用。它还支持与<fragment>标签相同的classandroid:name和可选的android:tag,但是它使用普通的FragmentTransaction来添加此初始碎片,而不是<fragment>使用的自定义代码路径。
  • onDestroyView()计时:碎片现在会在调用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集成:现在,当使用by viewModels()by activityViewModels()ViewModelProvider构造函数或带有Fragment的ViewModelProviders.of()时,SavedStateViewModelFactory是默认使用的工厂。
  • 新的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
  • 当使用classandroid:name在XML中使用FragmentContainerView添加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 1.2.0-rc04在使用<fragment>标签时的回归,该回归导致在活动销毁期间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

依赖项更改

  • Fragments现在依赖于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 不为 null,并且在执行它们时 getDialog() 返回非 null 值。(b/141974033
  • FragmentContainerView 现在将由 classandroid:name 定义的 Fragment 作为 inflation 的一部分添加,确保 findFragmentById()findFragmentByTag() 随后立即工作。(b/142520327
  • 修复了由于保存状态导致的 FragmentContainerView 中的 IllegalStateException。(b/142580713
  • 修复了当 FragmentContainerView 类被混淆时 FragmentContainerView 中的 UnsupportedOperationException。(b/142657034

已知问题

  • 仅通过 FragmentContainerView 上的 classandroid:name 属性引用的 Fragment 不会被 ProGuard 自动保留,需要手动为每个 Fragment 类添加保留规则。在通过 aapt2 修复此问题之前,我们已禁用建议迁移到 FragmentContainerView 的 Lint 规则。(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 的支持。与 <fragment> 标签不同,FragmentContainerView 在后台使用普通的 FragmentTransaction 来添加初始 Fragment,允许在 FragmentContainerView 上进行进一步的 FragmentTransaction 操作,并启用布局的视图绑定。(b/139830628b/141177981
  • Fragments 现在包含一个 Lint 警告,提供一个快速修复以将 <fragment> 替换为 FragmentContainerView。(b/139830056

错误修复

  • 修复了使用 androidx.transition 时发生的 ClassCastException。(b/140680619
  • 使用 Transition 1.3.0-beta01 时,Fragments 现在会在分派 onDestroyView() 之前等待 androidx.transition 过渡完成(除了在 Fragment 1.2.0-alpha03Fragment 1.2.0-alpha02 中分别修复的框架过渡和动画)。(aosp/1119841
  • 使用 Transition 1.3.0-beta01 时,Fragments 现在会在开始相同容器上的新过渡/动画之前正确取消 androidx.transition 过渡。(aosp/1119841
  • 修复了在 API 17 及以下版本中,使用 FragmentContainerView 时在 Fragment 的根视图上使用 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 的非 null FragmentManager(可以使用 isAdded() 来确定调用是否安全)。(b/140574496)
  • 静态 FragmentManager.enableDebugLogging 方法已被弃用。FragmentManager 现在尊重 Log.isLoggable() 的标签 FragmentManager,允许您启用 DEBUGVERBOSE 日志记录,而无需重新编译您的应用。(aosp/1116591

错误修复

  • 现在在其他 Fragment 上运行退出动画时,Fragments 会被正确销毁。(b/140574199
  • 修复了 Fragments 会调用 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
  • Fragments 现在会在分派 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。 此版本中包含的提交可以在这里找到 这里

新功能

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

API 更改

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

错误修复

  • 修复了在replace()之前使用setPrimaryNavigationFragment()弹出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()用于访问作用域为Activity的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已发布。此版本中包含的提交可以在这里找到这里

错误修复

  • Fragment现在在转换运行时使用show()hide()操作时会正确更新其可见性。(b/133385058)
  • 修复了在replace()之前使用setPrimaryNavigationFragment()弹出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已发布。此版本中包含的提交可以在这里找到这里

错误修复

  • 嵌套Fragment的androidx.lifecycle.Lifecycle回调(特别是与STARTEDRESUMEDPAUSEDSTOPPEDDESTROYED相关的回调)现在已正确嵌套。(b/133497591)
  • 在Fragment的onCreate()中注册的OnBackPressedCallback实例现在优先于子FragmentManager。(b/133175997)
  • 替换其父Fragment时,不再为子Fragment设置动画。(b/121017790)
  • 使用animateLayoutChanges="true"时,现在会忽略Fragment动画和转换,从而修复了Fragment未正确销毁的问题。(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 不兼容。使用此版本的 Fragments 时,请升级到 Preferences 1.1.0-alpha05。

新功能

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

API 更改

  • 重大更改:已删除以前已弃用的 FragmentFactoryinstantiate 方法(该方法接受 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),回退栈中的片段在托管 Activity 重新创建时**不会**收到对 onCreateView() 的回调。onCreateView() 现在只会在片段可见时(即回退栈弹出)调用。

错误修复

  • 修复了在 XML 中使用 <fragment> 标签以及 FragmentActivityAppCompatActivitycontentLayoutId 构造函数时出现的问题。(b/129907905
  • 修正了一个问题,即在配置更改后,回退栈上的片段不会移动到至少 CREATED 状态,导致 ViewModel 和子保留片段未正确处置。(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
  • 修复了在恢复片段状态时在 Activity 上使用 @ContentView 构造函数时出现的问题。(b/127313094
  • 修正了当用尚未附加到 FragmentManager 的 Fragment 替换现有目标 Fragment 时 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
  • 修复了与先前版本的 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 日

新功能

  • Fragment 现在实现了BundleSavedStateRegistryOwner,并依赖于新发布的 SavedState 库 [aosp/824380]
  • 添加了一个by activityViewModels Kotlin 属性委托,用于检索与包含 Activity 关联的 ViewModel [b/119050253]
  • 已扩展by viewModels Kotlin 属性委托,使其可以接收一个可选的 lambda 方法来获取ViewModelStoreOwner,允许您传入父片段或其他自定义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
  • 从保存的实例状态恢复的 Fragments 现在将始终接收一个非 null 的Bundle [b/119794496]
  • 移除 Fragments 如果重新添加,将不再重用其Lifecycle对象 [b/118880674]

版本 1.1.0-alpha02

2018 年 12 月 3 日

新功能

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

错误修复

  • 修复了在回退栈上使用嵌套 Fragments 时发生的 IllegalStateException。(b/119256498
  • 修复了使用FragmentScenario.recreate()FragmentFactory时发生的崩溃。(aosp/820540
  • 修复了片段移除后目标片段不可访问的问题。(aosp/807634

版本 1.1.0-alpha01

2018 年 11 月 5 日

这是fragment-testing构件和基于 androidx.test:core API 构建的FragmentScenario 的第一个版本。有关更多详细信息,请参阅片段测试文档

新功能

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

API 更改

  • 大幅扩展了 Fragment API 表面上的可空性注释。

错误修复

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

已知问题

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