Fragment
| 最新更新 | 稳定版本 | 版本候选版 (RC) | Beta 版本 | Alpha 版本 |
|---|---|---|---|---|
| 2026 年 6 月 17 日 | 1.8.9 | - | - | 1.9.0-alpha01 |
声明依赖项
要添加对 Fragment 的依赖项,您必须将 Google Maven 代码库添加到您的项目中。如需了解详情,请参阅 Google Maven 代码库。
在应用或模块的 build.gradle 文件中,为您需要的工件添加依赖项
Groovy
dependencies { def fragment_version = "1.8.9" // Java language implementation implementation "androidx.fragment:fragment:$fragment_version" // Kotlin implementation "androidx.fragment:fragment-ktx:$fragment_version" // Compose implementation "androidx.fragment:fragment-compose:$fragment_version" // Testing Fragments in Isolation debugImplementation "androidx.fragment:fragment-testing-manifest:$fragment_version" androidTestImplementation "androidx.fragment:fragment-testing:$fragment_version" }
Kotlin
dependencies { val fragment_version = "1.8.9" // Java language implementation implementation("androidx.fragment:fragment:$fragment_version") // Kotlin implementation("androidx.fragment:fragment-ktx:$fragment_version") // Compose implementation("androidx.fragment:fragment-compose:$fragment_version") // Testing Fragments in Isolation debugImplementation("androidx.fragment:fragment-testing:$fragment_version") }
如需详细了解依赖项,请参阅添加构建依赖项。
反馈
您的反馈有助于改进 Jetpack。如果您发现了新问题或有改进此库的想法,请告诉我们。在创建新问题之前,请先查看此库中的现有问题。您可以点击星标按钮,为您现有的问题投票。
如需了解详情,请参阅 问题跟踪器文档。
版本 1.9
版本 1.9.0-alpha01
2026 年 6 月 17 日
androidx.fragment:fragment-*:1.9.0-alpha01 已发布。版本 1.9.0-alpha01 包含这些提交。
API 变更
- Fragment 现在实现了
ContextAware接口,可用于在 Fragment 附加时执行代码。(I38019, b/477255355)
Bug 修复
- 修复了在执行预测性返回手势期间,Activity 被切换到后台时 Fragment 导致的崩溃问题。(I55734, b/389589678)
- UnsafeFragmentLifecycleObserverDetector 不再在组合 (composition) 内部运行。(Ic4176, b/501504696)
- [来自 Fragment 1.8.9] 修复了以下问题:在取消会导致隐藏操作弹出的预测性返回手势时,会导致后续手势在使用动画工具时无法正确设置动画。(I0a400, b/384765586)
- [来自 Fragment 1.8.9] 修复了以下错误:
setMaxLifecycle和popBackStack的组合可能导致无法将顶部 Fragment 移动到 RESUMED 状态。(I3448b, b/406127576) - [来自 Fragment 1.8.8] 修复了以下问题:FragmentManager 在尝试保存以
setMaxLifecycle(Lifecycle.State.INITIALIZED)添加的 Fragment 的状态时会崩溃。这些 Fragment 因为从未使用过onCreate(),所以不再有保存的状态或调用onSaveInstanceState()。(I6e37a, b/408163315) - [来自 Fragment 1.8.7] 修复了 FragmentManager 在同一帧中进行弹出和替换操作后未处于正确状态的问题,这可能导致与预测性返回结合使用时发生崩溃。(I50ad1, b/380288461)
- [来自 Fragment 1.8.6]
FragmentContainerView的setOnApplyWindowInsetsListener覆盖现在接受空监听器。(I575f0, b/282790626) - [来自 Fragment 1.8.5] 修复了仅在预测性返回手势被取消或中断后由
saveBackStack触发的IllegalStateException问题。(I3387d, b/342419080) - [来自 Fragment 1.8.4] 修复了在动态交换
AndroidFragment实例正在使用的类时,AndroidFragment中出现的UninitializedPropertyAccessException。(I12dea, b/365578408) - [来自 Fragment 1.8.4] 修复了快速按系统返回键或执行快速手势返回会导致 Fragment 崩溃的问题。(Ibc038, b/364804225, b/364914301)
- [来自 Fragment 1.8.4] 修复了 Fragment 中的一个问题:中断预测性返回手势会将 Fragment 管理器置于未定义状态,甚至最终显示错误的 Fragment。(If82e2, b/338624457)
- [来自 Fragment 1.8.3] 如果
AndroidFragment在包含它的 Activity/Fragment 的状态已经保存时被添加到组合中,它将不再崩溃。(I985e9, b/356643968) - [来自 Fragment 1.8.2] 在 FragmentManager 有挂起操作时触发系统返回将不再导致越界异常。(I9ba32, b/342316801)
- [来自 Fragment 1.8.2]
AndroidFragment现在可以正确处理父 Fragment 被放入 Fragment 返回栈的情况,从而在弹出回到该 Fragment 时避免“找不到 id 的视图”的问题。(I94608, b/347706985) - [来自 Fragment 1.8.2] 通过接受
ViewGroup的FragmentTransaction.add方法添加的 Fragment 现在会在进行到onStart()之前等待onContainerAvailable。这会影响该 API 的用户(例如AndroidFragment),这些用户现在会等待AndroidFragment重新进入组合,然后再将其进行到onStart()。(I94608, b/347706985) - [来自 Fragment 1.8.1] 修复了没有容器的 Fragment 在开始预测性返回手势时立即被 DESTROYED 的问题。(If6b83, b/345244539)
外部贡献
- 将 fragment-ktx 合并到 fragment 库中。所有 Kotlin 扩展现在都是主 fragment 工件的一部分。fragment-ktx 现在是一个空的兼容性工件。感谢 Jake Wharton!(Idabaa)
1.8 版本
版本 1.8.9
2025 年 8 月 13 日
androidx.fragment:fragment-*:1.8.9 已发布。版本 1.8.9 包含这些提交。
Bug 修复
- 修复了以下问题:在取消会导致隐藏操作弹出的预测性返回手势时,会导致后续手势在使用动画工具时无法正确设置动画。(I0a400, b/384765586)
- 修复了
setMaxLifecycle和popBackStack的组合可能导致无法将顶部 Fragment 移动到 RESUMED 状态的错误。(I3448b, b/406127576)
版本 1.8.8
2025 年 6 月 4 日
androidx.fragment:fragment-*:1.8.8 已发布。版本 1.8.8 包含这些提交。
Bug 修复
- 修复了
FragmentManager在尝试保存以setMaxLifecycle(Lifecycle.State.INITIALIZED)添加的 Fragment 的状态时会崩溃的问题。这些 Fragment 因为从未使用过onCreate(),所以不再有保存的状态或调用onSaveInstanceState()。(I6e37a)
版本 1.8.7
2025 年 5 月 20 日
androidx.fragment:fragment-*:1.8.7 已发布。版本 1.8.7 包含这些提交。
Bug 修复
- 修复了
FragmentManager在同一帧中的弹出和替换操作后未处于正确状态的问题,这可能导致与通过popBackStack或预测性返回手势弹出返回栈结合使用时发生崩溃。(I50ad1) - 修复了因使用 AndroidX Transitions 而导致的崩溃,这种情况出现在快速连续的 Fragment 事务试图取消尚未开始的过渡且 AndroidX Transition 库未能正确清除过渡状态时。(参见 b/414612221)。(Ib5235)
版本 1.8.6
2025 年 2 月 12 日
androidx.fragment:fragment-*:1.8.6 已发布。版本 1.8.6 包含这些提交。
Bug 修复
FragmentContainerView的setOnApplyWindowInsetsListener覆盖现在接受空监听器,这与框架允许的情况一致。(I575f0, b/282790626)
版本 1.8.5
2024 年 10 月 30 日
androidx.fragment:fragment-*:1.8.5 已发布。版本 1.8.5 包含这些提交。
Bug 修复
- 修复了仅在预测性返回手势被取消后由
saveBackStack触发的IllegalStateException。(I3387d, b/342419080)
版本 1.8.4
2024 年 10 月 2 日
androidx.fragment:fragment-*:1.8.4 已发布。版本 1.8.4 包含这些提交。
Bug 修复
- 修复了使用 Androidx Transitions 时,快速按下系统返回键或执行快速手势返回会导致 Fragment 崩溃的问题。(Ibc038, b/364804225)
- 修复了 Fragment 中的一个问题:中断预测性返回手势会将 Fragment 管理器置于未定义状态,甚至最终显示错误的 Fragment。(If82e2, b/338624457)
- 修复了在动态交换
AndroidFragment实例正在使用的类时,AndroidFragment中出现的UninitializedPropertyAccessException。(I12dea)
1.8.3 版本
2024 年 9 月 4 日
androidx.fragment:fragment-*:1.8.3 已发布。版本 1.8.3 包含这些提交。
Bug 修复
FragmentManager现在在处理预测性返回手势时会正确考虑挂起的操作。这应能确保执行系统返回不再导致IndexOutOfBoundsException。(I9ba32, b/342316801)- 如果
AndroidFragment在包含它的 Activity/Fragment 的状态已经保存时被添加到组合中,它将不再崩溃。(I985e9, b/356643968)
1.8.2 版本
2024 年 7 月 24 日
androidx.fragment:fragment-*:1.8.2 已发布。版本 1.8.2 包含这些提交。
Bug 修复
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 已发布。版本 1.8.1 包含这些提交。
Bug 修复
- 修复了没有容器的 Fragment 在开始预测性返回手势时立即被
DESTROYED的问题。现在它们会被保持在CREATED状态,直到手势完成。(If6b83, b/345244539)
1.8.0 版本
2024 年 6 月 12 日
androidx.fragment:fragment-*:1.8.0 已发布。版本 1.8.0 包含这些提交。
自 1.7.0 以来的重要变化
fragment-compose工件现在包含一个AndroidFragmentComposable,允许通过 Fragment 类名将 Fragment 添加到 Compose 层级中。它会自动处理 Fragment 状态的保存和恢复。这应该作为之前推荐的通过使用AndroidViewBinding来扩充 Fragment 的方法的直接替代方案。FragmentManager的OnBackStackChangedListener接口上的onBackStackChangeCancelled回调现在作为FragmentManager中执行操作的一部分触发,使其在时间上更接近onBackStackChangeCommitted回调。
1.8.0-rc01 版本
2024 年 5 月 29 日
androidx.fragment:fragment-*:1.8.0-rc01 已发布。版本 1.8.0-rc01 包含这些提交。
Bug 修复
FragmentManagers OnBackStackChangedListener接口上的onBackStackChangeCancelled回调现在作为FragmentManager中执行操作的一部分触发,使其在时间上更接近onBackStackChangeCommitted回调。(I5ebfb, b/332916112)
1.8.0-beta01 版本
2024 年 5 月 14 日
androidx.fragment:fragment-*:1.8.0-beta01 已发布。版本 1.8.0-beta01 包含这些提交。
Bug 修复
- 来自 Fragment
1.7.1:预测性返回现在仅对所有 Fragment 都具有 Animator 或可寻址 Androidx Transition 的事务运行。这修复了取消部分可寻址事务会导致黑屏的问题。(I43037, b/339169168)
1.8.0-alpha02 版本
2024 年 4 月 17 日
androidx.fragment:fragment-*:1.8.0-alpha02 已发布。版本 1.8.0-alpha02 包含这些提交。
Bug 修复
- 来自 Fragment
1.7.0-rc02:添加了日志以说明为什么在没有其他过渡的情况下设置sharedElement会导致无法运行。(Iec48e) - 来自 Fragment
1.7.0-rc02:修复了一个 bug:如果将不可寻址的共享元素添加到所有其他过渡都是可寻址的事务中,会导致崩溃。现在,该事务将正确地被视为不可寻址。(I18ccd)
1.8.0-alpha01 版本
2024年4月3日
androidx.fragment:fragment-*:1.8.0-alpha01 已发布。版本 1.8.0-alpha01 包含这些提交。
新功能
- 新的
AndroidFragmentComposable允许通过 Fragment 类名将 Fragment 添加到 Compose 层级中。它会自动处理 Fragment 状态的保存和恢复。这可以用作 AndroidViewBindingComposable的直接替代品。(b/312895363, Icf841)
文档变更
- 更新了
OnBackStackChangedListenerAPI 的文档,以说明它们的调用时机以及应如何使用它们。(I0bfd9)
依赖项更新
- Fragment 现在依赖于 Profile Installer 1.3.1。
版本 1.7
版本 1.7.1
2024 年 5 月 14 日
androidx.fragment:fragment-*:1.7.1 已发布。版本 1.7.1 包含这些提交。
Bug 修复
- 预测性返回现在仅对所有 Fragment 都具有 Animator 或可寻址 Androidx Transition 的事务运行。这修复了取消部分可寻址事务会导致空白屏幕的问题。(I43037, b/339169168)
版本 1.7.0
2024 年 5 月 1 日
androidx.fragment:fragment-*:1.7.0 已发布。版本 1.7.0 包含这些提交。
预测性返回手势支持
- 当使用
Animator或使用 AndroidX Transition 1.5.0 时,Fragment 现在提供对应用内预测性返回的支持。这允许用户通过在决定完成手势以提交事务或取消之前寻址您的 Animator/Transition,使用返回手势查看上一个 Fragment。
| 过渡系统 | XML 资源 | 支持预测性返回 |
|---|---|---|
动画 |
R.anim |
否 |
Animator |
R.animator |
是 |
框架 Transition |
R.transition |
否 |
AndroidX Transition,使用 Transition 1.4.1 或更低版本 |
R.transition |
否 |
AndroidX Transition,使用 Transition 1.5.0 |
R.transition |
是 |
如果您在加入预测性返回手势后在 Fragment 中发现任何预测性返回支持方面的问题,请通过示例项目提交针对 Fragment 的问题以复现您的问题。您可以通过在 Activity 的 onCreate() 中使用 FragmentManager.enabledPredictiveBack(false) 来禁用预测性返回。
FragmentManager.OnBackStackChangedListener() 现在提供 onBackStackChangeProgressed() 和 onBackStackChangeCancelled(),分别用于接收预测性返回进度和取消事件。
Fragment Compose 工件
创建了一个新的 fragment-compose 工件,旨在支持那些正处于从基于 Fragment 的架构向全 Compose 架构迁移过程中的应用。
此新工件中提供的第一个功能是 Fragment 上的 content 扩展方法,它通过为您创建一个 ComposeView 并设置正确的 ViewCompositionStrategy,使在单个 Fragment 的 UI 中使用 Compose 变得更加容易。
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 包含这些提交。
Bug 修复
- 添加了日志以说明为什么在没有其他过渡的情况下设置
sharedElement会导致无法运行。(Iec48e) - 修复了一个 bug:如果将不可寻址的共享元素添加到所有其他过渡都是可寻址的事务中,会导致崩溃。现在,该事务将正确地被视为不可寻址。(I18ccd)
版本 1.7.0-rc01
2024年4月3日
androidx.fragment:fragment-*:1.7.0-rc01 已发布。版本 1.7.0-rc01 包含这些提交。
依赖项更新
- Fragment 现在依赖于 Profile Installer 1.3.1。
版本 1.7.0-beta01
2024年3月20日
androidx.fragment:fragment-*:1.7.0-beta01 已发布。版本 1.7.0-beta01 包含这些提交。
API 变更
FragmentHostCallback现在用 Kotlin 编写,以便 Host 泛型的可空性与onGetHost()返回类型的可空性相匹配。(I40af5)
Bug 修复
- 修复了在不在容器中的 Fragment 上提交预测性返回手势时,该 Fragment 永远不会被销毁的问题。Fragment 现在将立即移动到最终状态。(Ida0d9)
- 修复了 Fragment 中的一个问题:用预测性返回手势中断传入的过渡会销毁进入的视图,并留下一个空白屏幕。(Id3f22, b/319531491)
版本 1.7.0-alpha10
2024 年 2 月 7 日
androidx.fragment:fragment-*:1.7.0-alpha10 已发布。版本 1.7.0-alpha10 包含这些提交。
Bug 修复
- 修复了之前 Fragment 版本中的已知问题:如果从未通过
addOnBackStackChangedListener添加过FragmentManager.OnBackStackChangedListener,则使用 Fragment 的预测性返回支持Animator或 AndroidX Transition 会导致 Fragment 从handleOnBackProgressed抛出NullPointerException。(I7c835)
版本 1.7.0-alpha09
2024 年 1 月 24 日
androidx.fragment:fragment-*:1.7.0-alpha09 已发布。版本 1.7.0-alpha09 包含这些提交。
Fragment Compose 工件
创建了一个新的 fragment-compose 工件,旨在支持那些正处于从基于 Fragment 的架构向全 Compose 架构迁移过程中的应用。
此新工件中提供的第一个功能是 Fragment 上的 content 扩展方法,它通过为您创建一个 ComposeView 并设置正确的 ViewCompositionStrategy,使在单个 Fragment 的 UI 中使用 Compose 变得更加容易。(561cb7, b/258046948)
class ExampleFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = content {
// Write your @Composable content here
val viewModel: ExampleViewModel = viewModel()
// or extract it into a separate, testable method
ExampleComposable(viewModel)
}
}
新功能
FragmentManager.OnBackStackChangedListener()现在提供onBackStackChangeProgressed()和onBackStackChangeCancelled(),分别用于接收预测性返回进度和取消事件。(214b87)
已知问题
- 在使用 Fragment 的预测性返回支持
Animator或 AndroidX Transition 时,如果从未通过addOnBackStackChangedListener添加过FragmentManager.OnBackStackChangedListener,Fragment 将从handleOnBackProgressed抛出NullPointerException。手动添加监听器可以绕过此崩溃。Fragment 的下一个版本将提供修复程序。
版本 1.7.0-alpha08
2024 年 1 月 10 日
androidx.fragment:fragment-*:1.7.0-alpha08 已发布。版本 1.7.0-alpha08 包含这些提交。
清理
- 移除了针对 Transition 库的临时解决方案,该库已在 Transition
1.5.0-alpha06中修复。(I04356)
版本 1.7.0-alpha07
2023 年 11 月 29 日
androidx.fragment:fragment-*:1.7.0-alpha07 已发布。版本 1.7.0-alpha07 包含这些提交。
Bug 修复
- 修复了由设置共享元素过渡且未能同时设置 enter/exitTransition 引起的
NullPointerException。(I8472b) - 来自 Fragment
1.6.2:当FragmentContainerView的 Fragment 被扩充时,其状态(如FragmentManager、Host 和 id)现在可以在onInflate回调中访问。(I1e44c, b/307427423) - 来自 Fragment
1.6.2:当使用clearBackStack移除一组 Fragment 时,任何嵌套 Fragment 的ViewModel现在都将在父 Fragment 的ViewModels被清除时被清除。(I6d83c, b/296173018)
版本 1.7.0-alpha06
2023年10月4日
androidx.fragment:fragment-*:1.7.0-alpha06 已发布。版本 1.7.0-alpha06 包含这些提交。
依赖项更新
- Fragments 已更新,依赖于在 Transition
1.5.0-alpha04中添加的新animateToStartAPI。
版本 1.7.0-alpha05
2023年9月20日
androidx.fragment:fragment-*:1.7.0-alpha05 已发布。版本 1.7.0-alpha05 包含这些提交。
新功能
- 当使用 Androidx Transitions 时,Fragment 现在提供对预测性返回的支持。这允许您使用返回手势,通过您的自定义 Androidx Transition 寻址到上一个 Fragment,然后再决定通过完成的手势提交或取消事务。您必须依赖 Transition
1.5.0-alpha03版本才能启用此功能。(Ib49b4, b/285175724)
已知问题
- 目前存在一个问题:在取消一次带有过渡的返回手势后,下一次启动返回手势时将无法运行过渡,从而导致空白屏幕。这可能是由 Transition 库中的问题引起的。(b/300157785)。如果您看到此问题,请通过示例项目提交针对 Fragment 的问题以复现您的问题。您可以通过在 Activity 的
onCreate()中使用FragmentManager.enabledPredictiveBack(false)来禁用预测性返回。
版本 1.7.0-alpha04
2023年9月6日
androidx.fragment:fragment-*:1.7.0-alpha04 已发布。版本 1.7.0-alpha04 包含这些提交。
Bug 修复
- 修复了在取消预测性返回手势时,Fragment 未能达到正确生命周期状态的问题。(I7cffe, b/297379023)
- 修复了允许动画与过渡同时运行的回归问题。(I59f36)
- 修复了在 Fragment 中使用预测性返回时,尝试在返回栈倒数第二个 Fragment 上连续两次快速后退会导致崩溃的问题。(Ifa1a4)
版本 1.7.0-alpha03
2023 年 8 月 23 日
androidx.fragment:fragment-*:1.7.0-alpha03 已发布。版本 1.7.0-alpha03 包含这些提交。
Bug 修复
- 修复了在 Fragment 中使用预测性返回时导致 Fragment 管理器返回栈中的第一个 Fragment 被跳过,并且在通过 3 按钮导航或预测性返回手势使用系统返回时 Activity 结束的问题。(I0664b, b/295231788)
版本 1.7.0-alpha02
2023年8月9日
androidx.fragment:fragment-*:1.7.0-alpha02 已发布。版本 1.7.0-alpha02 包含这些提交。
Bug 修复
- 当使用来自 API 34 的带有预测性返回手势的 Fragment 时,如果您使用的是不支持寻址的过渡系统(
Animations、Transitions)或根本不使用过渡,Fragment 现在将等待手势完成后再执行返回操作。(I8100c)
版本 1.7.0-alpha01
2023 年 6 月 7 日
androidx.fragment:fragment-*:1.7.0-alpha01 已发布。此版本是在内部分支中开发的。
新功能
- 在使用
Animator时,Fragment 现在提供对应用内预测性返回的支持。这允许您在通过手势完成提交事务或取消之前,使用您的自定义 Animator 通过返回手势查看上一个 Fragment。您还可以通过使用实验性的enablePredictiveBack()并传入false来禁用此新行为。
版本 1.6
版本 1.6.2
2023 年 11 月 1 日
androidx.fragment:fragment-*:1.6.2 已发布。版本 1.6.2 包含这些提交。
Bug 修复
- 当
FragmentContainerView的 Fragment 被扩充时,其状态(如FragmentManager、Host 和 id)现在可以在onInflate回调中访问。(I1e44c, b/307427423) - 当使用
clearBackStack移除一组 Fragment 时,任何嵌套 Fragment 的ViewModel现在都将在父 Fragment 的ViewModels被清除时被清除。(I6d83c, b/296173018)
版本 1.6.1
2023 年 7 月 26 日
androidx.fragment:fragment-*:1.6.1 已发布。版本 1.6.1 包含这些提交。
Bug 修复
- 修复了以下问题:在 Activity 停止但未销毁时存储的已保存状态,即使在 Fragment 实例移回
RESUMED状态后,也会被错误地缓存。当使用多个返回栈 API 保存和恢复该 Fragment 时,如果该 Fragment 实例在返回栈上,这会导致使用该缓存状态。(I71288, b/246289075)
依赖项更新
- Fragment 现在依赖于 Activity 1.7.2。这修复了 Kotlin 用户无法在没有对 Activity 的显式依赖的情况下扩展
ComponentDialog的问题。(b/287509323)
版本 1.6.0
2023 年 6 月 7 日
androidx.fragment:fragment-*:1.6.0 已发布。版本 1.6.0 包含这些提交。
自 1.5.0 以来的重要更改
Fragment的已保存状态已被完全拆分为私有库状态(自定义Parcelable类)和开发者提供的状态,后者现在始终存储在Bundle中,从而可以确定 Fragment 状态的确切来源。FragmentManager.OnBackStackChangedListener接口已扩展了两个额外的回调:onBackStackChangeStarted和onBackStackChangeCommitted,它们分别在每个Fragment被添加到/从 Fragment 返回栈中移除之前,以及在事务提交之后调用。FragmentStrictMode添加了一个新的WrongNestedHierarchyViolation,用于检测子 Fragment 嵌套在其父级的视图层级中,但未添加到父级的childFragmentManager中的情况。- 接受
Intent或IntentSender的Fragment和FragmentManagerAPI 现在已正确地用@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-testing和androidx.test之间的版本偏差而导致的冲突。
版本 1.6.0-rc01
2023 年 5 月 10 日
androidx.fragment:fragment-*:1.6.0-rc01 已发布。版本 1.6.0-rc01 包含这些提交。
Bug 修复
- 修复了连续发出多个
startActivityForResult请求时ActivityResult以错误请求代码发送的问题。(If0b9d, b/249519359) - 修复了
onBackStackChangeListener回调被分发给实际上并未更改返回栈的事务的问题(如果它们与更改返回栈的事务混合在一起)。(I0eb5c, b/279306628)
版本 1.6.0-beta01
2023 年 4 月 19 日
androidx.fragment:fragment-*:1.6.0-beta01 已发布。版本 1.6.0-beta01 包含这些提交。
Bug 修复
- 将带有超时的
postponeEnterTransition与替换延迟的 Fragment 一起使用,不再导致延迟的 Fragment 泄露。(I2ec7d, b/276375110) - 新的
onBackStackChangeStarted和onBackStackChangeCommitted回调现在只会分发一个 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的访问。(I022e3, b/234274777)- Fragment
commitNow()、executePendingTransactions()和popBackStackImmediate()API 已用@MainThread注解,这意味着它们现在在未从主线程调用时都会抛出构建错误,而不是等待在运行时失败。(Ic9665, b/236538905)
Bug 修复
- 修复了
FragmentManager中的一个 bug,其中在同一帧中保存和恢复可能会导致崩溃。(Ib36af, b/246519668) OnBackStackChangedListener的onBackStackChangeStarted和onBackStackChangeCommitted回调现在仅在FragmentManager返回栈发生更改时执行。(I66055, b/274788957)
版本 1.6.0-alpha08
2023 年 3 月 22 日
androidx.fragment:fragment-*:1.6.0-alpha08 已发布。版本 1.6.0-alpha08 包含这些提交。
行为变更
OnBackStackChangedListener.onBackStackChangeCommited回调的计时已调整为在 Fragment 操作执行之前执行。这确保了回调永远不会收到已分离的 Fragment。(I66a76, b/273568280)
Bug 修复
- 来自 Fragment
1.5.6:修复了在setFragmentResultListener内部调用clearFragmentResultListener如果Lifecycle已经处于STARTED状态且结果已经可用时不起作用的问题。(If7458)
依赖项更新
- Fragment 现在依赖于 Lifecycle
2.6.1。(586fe7) - Fragment 现在依赖于 SavedState
1.2.1。(078e4e) - Fragment 现在依赖于 ProfileInstaller
1.3.0。(3fc05b)
版本 1.6.0-alpha07
2023 年 3 月 8 日
androidx.fragment:fragment-*:1.6.0-alpha07 已发布。版本 1.6.0-alpha07 包含这些提交。
Bug 修复
- 来自 Fragment
1.5.6:修复了移除任何 Fragment(无论它是否添加了菜单项)都会使 Activity 的菜单失效的问题。(50f098, b/244336571)
版本 1.6.0-alpha06
2023 年 2 月 22 日
androidx.fragment:fragment-*:1.6.0-alpha06 已发布。版本 1.6.0-alpha06 包含这些提交。
行为变更
FragmentManager的onBackStackChangedListener上的新onBackStackChangedStarted回调现在将在 Fragment 开始移动到其目标状态之前执行。(I34726)
版本 1.6.0-alpha05
2023 年 2 月 8 日
androidx.fragment:fragment-*:1.6.0-alpha05 已发布。版本 1.6.0-alpha05 包含这些提交。
新功能
FragmentManager.OnBackStackChagnedListener接口现在提供了两个额外的回调:onBackStackChangeStarted和onBackStackChangeCommitted,它们允许在FragmentManager中发生返回栈更改时提供更多信息和控制。(Ib7ce5, b/238686802)
API 变更
- 接受
Intent或IntentSender的Fragment和FragmentManagerAPI 现在已正确地用@NonNull注解,以防止传入空值,因为空值总是会立即导致这些方法调用的相应 Android 框架 API 崩溃。(I06fd4)
版本 1.6.0-alpha04
2022 年 12 月 7 日
androidx.fragment:fragment-*:1.6.0-alpha04 已发布。版本 1.6.0-alpha04 包含这些提交。
新功能
FragmentStrictMode添加了一个新的WrongNestedHierarchyViolation,用于检测子 Fragment 嵌套在其父级的视图层级中,但未添加到父级的childFragmentManager中的情况。(I72521, b/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-testing 和 androidx.test 之间的版本偏差而导致的冲突。(I8e534, b/128612536)
Bug 修复
- 来自 Fragment
1.5.5:Fragment 将不再错误地将ViewModel状态保存为视图注册表已保存状态的一部分。(I10d2b, b/253546214)
版本 1.6.0-alpha03
2022 年 10 月 5 日
androidx.fragment:fragment:1.6.0-alpha03、androidx.fragment:fragment-ktx:1.6.0-alpha03 和 androidx.fragment:fragment-testing:1.6.0-alpha03 已发布。版本 1.6.0-alpha03 包含这些提交。
API 变更
- 扩展
DialogFragment的类现在将被要求在它们的onDismiss()覆盖中调用 super。(I14798, b/238928865)
Bug 修复
- 修复了由集成新的提供程序回调接口(
OnConfigurationChangedProvider、OnMultiWindowModeChangedProvider、OnTrimMemoryProvider、OnPictureInPictureModeChangedProvider)引起的回归,以确保 Fragment 始终获得正确的回调。(I9b380,I34581, (I8dfe6, b/242570955),If9d6b,Id0096,I690b3,I2cba2)
版本 1.6.0-alpha02
2022 年 8 月 24 日
androidx.fragment:fragment:1.6.0-alpha02、androidx.fragment:fragment-ktx:1.6.0-alpha02 和 androidx.fragment:fragment-testing:1.6.0-alpha02 已发布。版本 1.6.0-alpha02 包含这些提交。
Bug 修复
- 来自 Fragment
1.5.2:修复了同时执行popBackStack()和replace()事务可能导致退出的 Fragment 运行错误的Animation/Animator的问题。(Ib1c07, b/214835303)
版本 1.6.0-alpha01
2022 年 7 月 27 日
androidx.fragment:fragment:1.6.0-alpha01、androidx.fragment:fragment-ktx:1.6.0-alpha01 和 androidx.fragment:fragment-testing:1.6.0-alpha01 已发布。版本 1.6.0-alpha01 包含这些提交。
行为变更
Fragment的已保存状态已被完全拆分为私有库状态(自定义Parcelable类)和开发者提供的状态,后者现在始终存储在Bundle中,从而可以确定 Fragment 状态的确切来源。(b/207158202)
Bug 修复
- 来自 Fragment
1.5.1:修复了DialogFragmentCallbacksDetector中的回归,其中使用 AGP 7.4 捆绑的 lint 版本会导致 lint 崩溃。(b/237567009)
依赖项更新
- 来自 Fragment
1.5.1:Fragment 库现在依赖于 Lifecycle2.5.1。(Id204c) - 来自 Fragment
1.5.1:Fragment 库现在依赖于 Activity1.5.1。(I10f07)
版本 1.5
版本 1.5.7
2023 年 4 月 19 日
androidx.fragment:fragment:1.5.7、androidx.fragment:fragment-ktx:1.5.7 和 androidx.fragment:fragment-testing:1.5.7 已发布。版本 1.5.7 包含这些提交。
Bug 修复
- 将带有超时的
postponeEnterTransition与替换延迟的 Fragment 一起使用,不再导致延迟的 Fragment 泄露。(I2ec7d, b/276375110)
版本 1.5.6
2023 年 3 月 22 日
androidx.fragment:fragment:1.5.6、androidx.fragment:fragment-ktx:1.5.6 和 androidx.fragment:fragment-testing:1.5.6 已发布。版本 1.5.6 包含这些提交。
Bug 修复
- 修复了移除任何 Fragment(无论它是否添加了菜单项)都会使 Activity 的菜单失效的问题。(50f098, b/244336571)
- 修复了在
setFragmentResultListener内部调用clearFragmentResultListener如果Lifecycle已经处于STARTED状态且结果已经可用时不起作用的问题。(If7458)
版本 1.5.5
2022 年 12 月 7 日
androidx.fragment:fragment:1.5.5、androidx.fragment:fragment-ktx:1.5.5 和 androidx.fragment:fragment-testing:1.5.5 已发布。版本 1.5.5 包含这些提交。
Bug 修复
- Fragment 将不再错误地将
ViewModel状态保存为视图注册表已保存状态的一部分。(I10d2b, b/253546214)
版本 1.5.4
2022 年 10 月 24 日
androidx.fragment:fragment:1.5.4、androidx.fragment:fragment-ktx:1.5.4 和 androidx.fragment:fragment-testing:1.5.4 已发布。版本 1.5.4 包含这些提交。
Bug 修复
- 修复了使用带有未实现提供程序回调接口(
OnConfigurationChangedProvider、OnMultiWindowModeChangedProvider、OnTrimMemoryProvider、OnPictureInPictureModeChangedProvider)的主机的自定义FragmentController,并调用其已弃用的分发函数会导致无法分发到子 Fragment 的错误。(I9b380)
版本 1.5.3
2022 年 9 月 21 日
androidx.fragment:fragment:1.5.3、androidx.fragment:fragment-ktx:1.5.3 和 androidx.fragment:fragment-testing:1.5.3 已发布。版本 1.5.3 包含这些提交。
Bug 修复
- 修复了导致返回栈上的 Fragment 获取
onMultiWindowModeChanged()、onPictureInPictureModeChanged()、onLowMemory()和onConfigurationChanged()回调的错误。(I34581, I8dfe6, b/242570955) - 嵌套子 Fragment 将不再接收多个
onMultiWindowModeChanged()、onPictureInPictureModeChanged()、onLowMemory()或onConfigurationChanged()回调。(I690b3, Id0096, If9d6b, I2cba2)
版本 1.5.2
2022 年 8 月 10 日
androidx.fragment:fragment:1.5.2、androidx.fragment:fragment-ktx:1.5.2 和 androidx.fragment:fragment-testing:1.5.2 已发布。版本 1.5.2 包含这些提交。
Bug 修复
- 修复了同时执行
popBackStack()和replace()事务可能导致退出的 Fragment 运行错误的Animation/Animator的问题。(Ib1c07, b/214835303)
版本 1.5.1
2022 年 7 月 27 日
androidx.fragment:fragment:1.5.1、androidx.fragment:fragment-ktx:1.5.1 和 androidx.fragment:fragment-testing:1.5.1 已发布。版本 1.5.1 包含这些提交。
Bug 修复
- 修复了
DialogFragmentCallbacksDetector中的回归,其中使用 AGP 7.4 捆绑的 lint 版本会导致 lint 崩溃。(b/237567009)
依赖项更新
- Fragment 库现在依赖于 Lifecycle
2.5.1。(Id204c) - Fragment 库现在依赖于 Activity
1.5.1。(I10f07)
版本 1.5.0
2022 年 6 月 29 日
androidx.fragment:fragment:1.5.0、androidx.fragment:fragment-ktx:1.5.0 和 androidx.fragment:fragment-testing:1.5.0 已发布。版本 1.5.0 包含这些提交。
自 1.4.0 以来的重要更改
- CreationExtras 集成 -
Fragment现在能够通过 Lifecycle2.5.0的CreationExtras提供无状态ViewModelProvider.Factory。 - 组件对话框集成 -
DialogFragment现在通过 Activity1.5.0使用ComponentDialog作为onCreateDialog()返回的默认对话框。 - 保存实例状态重构 - Fragment 已开始改变其保存实例状态的方式。这是一项旨在帮助明确识别 Fragment 中保存了什么状态以及状态来源的工作。目前的变更包括:
FragmentManager现在将其已保存的实例状态保存到Bundle中,而不是直接保存在自定义Parcelable中。- 通过
Fragment Result API设置且尚未交付的结果现在与FragmentManager的内部状态分开保存。 - 与每个单独 Fragment 关联的状态现在与
FragmentManager的内部状态分开保存,从而允许您将与单个 Fragment 关联的已保存状态量与Fragment调试日志中存在的唯一 ID 相关联。
其他更改
FragmentStrictMode现在提供了一种功能,允许私有第三方 Fragment 通过使用带有类名的allowViolation()来绕过特定的违规惩罚。- 用于向您的 Activity 的
ActionBar提供菜单的 Fragment API 已被弃用。在 Activity1.4.0中添加的MenuHost和MenuProviderAPI 提供了一个可测试、生命周期感知且 Fragment 应该使用的等效 API 表面。
版本 1.5.0-rc01
2022 年 5 月 11 日
androidx.fragment:fragment:1.5.0-rc01、androidx.fragment:fragment-ktx:1.5.0-rc01 和 androidx.fragment:fragment-testing:1.5.0-rc01 已发布。版本 1.5.0-rc01 包含这些提交。
保存实例状态重构
- 与每个单独 Fragment 关联的状态现在与
FragmentManager的内部状态分开保存,从而允许您将与单个 Fragment 关联的已保存状态量与 Fragment 调试日志中存在的唯一 ID 相关联。(a153e0, b/207158202)
版本 1.5.0-beta01
2022 年 4 月 20 日
androidx.fragment:fragment:1.5.0-beta01、androidx.fragment:fragment-ktx:1.5.0-beta01 和 androidx.fragment:fragment-testing:1.5.0-beta01 已发布。版本 1.5.0-beta01 包含这些提交。
API 变更
DialogFragment添加了一个新的dismissNow方法,该方法使用commitNow以与showNow函数保持一致。请注意,这不会使Dialog立即被销毁,它只会同步更新FragmentManager的状态。(I15c36, b/72644830)
保存实例状态重构
FragmentManager现在将其已保存的实例状态保存到Bundle中,而不是直接保存在自定义Parcelable中。这是为实际由 Fragment 保存的内容提供额外透明度的第一步。(I93807, b/207158202)- 通过 Fragment Result API 设置且尚未交付的结果现在与
FragmentManager的内部状态分开保存。这将允许对作为已保存实例状态一部分保存的结果提供额外的透明度。(I6ea12, b/207158202)
版本 1.5.0-alpha05
2022 年 4 月 6 日
androidx.fragment:fragment:1.5.0-alpha05、androidx.fragment:fragment-ktx:1.5.0-alpha05 和 androidx.fragment:fragment-testing:1.5.0-alpha05 已发布。版本 1.5.0-alpha05 包含这些提交。
API 变更
Fragment的setHasOptionsMenu()已弃用。根据 Fragment1.5.0-alpha04发行说明,应改用新的菜单 API 来管理菜单及其菜单项。(I7b4b4,b/226438239)
1.5.0-alpha04 版本
2022 年 3 月 23 日
androidx.fragment:fragment:1.5.0-alpha04、androidx.fragment:fragment-ktx:1.5.0-alpha04 和 androidx.fragment:fragment-testing:1.5.0-alpha04 已发布。版本 1.5.0-alpha04 包含这些提交。
API 变更
- 用于向 Activity 的
ActionBar提供菜单的 Fragment API 已弃用,因为它们将 fragment 与 activity 紧密耦合,且无法在隔离环境中进行测试。Activity1.4.0-alpha01中添加的MenuHost和MenuProviderAPI 提供了一种可测试、生命周期感知的同等 API 接口,fragment 应该使用这些接口。(I50a59,I20758)
Bug 修复
SavedStateViewFactory现在支持在通过SavedStateRegistryOwner初始化时也使用CreationExtras。如果提供了 extras,则会忽略已初始化的参数。(I6c43b,b/224844583)
版本 1.5.0-alpha03
2022 年 2 月 23 日
androidx.fragment:fragment:1.5.0-alpha03、androidx.fragment:fragment-ktx:1.5.0-alpha03 和 androidx.fragment:fragment-testing:1.5.0-alpha03 已发布。版本 1.5.0-alpha03 包含这些提交。
API 变更
- 现在可以将
CreationExtras传递给by viewModels()和by activityViewModels()函数。(Ibefe7,b/217601110)
行为变更
DialogFragment现在默认使用ComponentDialog作为onCreateDialog()返回的对话框。(If3784,b/217618170)
版本 1.5.0-alpha02
2022 年 2 月 9 日
androidx.fragment:fragment:1.5.0-alpha02、androidx.fragment:fragment-ktx:1.5.0-alpha02 和 androidx.fragment:fragment-testing:1.5.0-alpha02 已发布。版本 1.5.0-alpha02 包含这些提交。
新功能
FragmentStrictMode现在允许私有的第三方 fragment 通过使用带有类名的allowViolation()来绕过特定的违规惩罚。(I8f678)
版本 1.5.0-alpha01
2022 年 1 月 26 日
androidx.fragment:fragment:1.5.0-alpha01、androidx.fragment:fragment-ktx:1.5.0-alpha01 和 androidx.fragment:fragment-testing:1.5.0-alpha01 已发布。Version 1.5.0-alpha01 包含这些提交。
新功能
Fragment现在集成了 ViewModel CreationExtras(作为 Lifecycle2.5.0-alpha01的一部分引入)。(I3060b,b/207012585)
Bug 修复
- 摘自 Fragment
1.4.1:当从 xml 生成的视图 ID 为负值时,FragmentContainerView不再抛出非法状态异常。(Ic185b,b/213086140) - 摘自 Fragment
1.4.1:当将自定义ownerProducerlambda 与by viewModels()延迟函数一起使用时,如果未提供自定义ViewModelProvider.Factory,它现在将使用来自该所有者的defaultViewModelProviderFactory,而不是始终使用 fragment 的工厂。(I56170,b/214106513) - 修复了从
Fragment的registerForActivityResult()回调中首次访问ViewModel时发生的崩溃。(Iea2b3)
版本 1.4
版本 1.4.1
2022 年 1 月 26 日
androidx.fragment:fragment:1.4.1、androidx.fragment:fragment-ktx:1.4.1 和 androidx.fragment:fragment-testing:1.4.1 已发布。版本 1.4.1 包含这些提交。
Bug 修复
FragmentContainerView不再在从 xml 生成的视图 ID 为负值时抛出非法状态异常。(Ic185b,b/213086140)- 当将自定义
ownerProducerlambda 与by viewModels()延迟函数一起使用时,如果未提供自定义ViewModelProvider.Factory,它现在将使用来自该所有者的defaultViewModelProviderFactory,而不是始终使用 fragment 的工厂。(I56170,b/214106513)
版本 1.4.0
2021 年 11 月 17 日
androidx.fragment:fragment:1.4.0、androidx.fragment:fragment-ktx:1.4.0 和 androidx.fragment:fragment-testing:1.4.0 已发布。版本 1.4.0 包含这些提交。
自 1.3.0 以来的重要变更
FragmentStrictModeAPI 提供运行时检查,允许您验证您的应用或您所依赖的库是否没有调用已弃用的 fragment API。当检测到违规时,您可以选择打印日志消息、触发自定义监听器或让应用崩溃。控制启用哪些检查以及触发哪些“惩罚”的FragmentStrictMode.Policy可以通过新的setStrictModePolicy()方法在FragmentManager上设置。该策略适用于该FragmentManager,并传递应用于任何未设置自己唯一策略的子 fragment 管理器。请参阅 针对 fragment 的 StrictMode。FragmentContainerView现在提供一个getFragment()方法,该方法返回最近添加到容器中的 fragment。它使用与findFragmentById()相同的逻辑,并带有FragmentContainerView的 ID,但允许链式调用。val navController = binding.container.getFragment<NavHostFragment>().navControllerFragmentScenario现在实现了Closeable,允许您将其与 Kotlin 的use方法或 try-with-resources 一起使用。添加了
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE},用于指定是否在 fragment 转换中启用从主题中获取的标准 Activity 转换动画。已移除实验性 API
FragmentManager.enableNewStateManager(boolean),新的状态管理器现在是唯一可用的选项。
多重返回栈 (Multiple back stacks)
FragmentManager 维护一个返回栈,由使用 addToBackStack() 的 fragment 事务组成。这允许您弹出这些事务并返回到以前的状态,使用 使用 fragment 保存状态 的机制来允许 fragment 适当地恢复其状态。
此版本通过提供三个新的 FragmentManager API 扩展了这些机制:saveBackStack(String name)、restoreBackStack(String name) 和 clearBackStack(String name)。这些 API 使用与 addToBackStack() 相同的 name 来保存 FragmentTransaction 的状态以及在这些事务中添加的每个 fragment 的状态,并允许您稍后恢复这些事务及其 fragment,并保持其状态完整。这允许您通过保存当前的返回栈并恢复已保存的返回栈,有效地在多个返回栈之间“切换”。
saveBackStack() 的操作类似于 popBackStack(),因为它是异步的,并且会导致所有回到该特定名称的 fragment 事务被逆转(“弹出”),并且任何已添加的 fragment 都会被销毁和移除,但它在几个重要方面有所不同:
saveBackStack()始终是包含性的。- 与
popBackStack()不同(如果未找到指定的名称或提供了空名称,它将弹出返回栈上的所有事务),如果您之前没有使用该精确的非空名称提交过使用addToBackStack()的 fragment 事务,saveBackStack()将不会执行任何操作。 - 保存从这些事务中添加的所有 fragment 的状态。这意味着每个 fragment 的视图状态都被存储,每个 fragment 的
onSaveInstanceState()被调用并且该状态被恢复,并且与这些 fragment 关联的任何ViewModel实例都被保留(并且不会调用它们的onCleared())。
可与 saveBackStack() 一起使用的 fragment 事务必须满足特定条件:
- 每个 fragment 事务必须使用
setReorderingAllowed(true)以确保事务可以作为单个原子操作恢复。 - 保存的事务集必须是自包含的(即,它们不得显式引用该事务集之外的任何 fragment),以确保它们可以在以后的任何时间恢复,无论在此期间对返回栈做了哪些更改。
- 任何保存的 fragment 不得是保留的 fragment,也不得在其子 fragment 的传递集中包含保留的 fragment,以确保在保存返回栈后
FragmentManager不会返回对已保存 fragment 的任何引用。
与 saveBackStack() 类似,restoreBackStack() 和 clearBackStack()(分别恢复以前保存的返回栈或清除以前保存的返回栈)如果之前没有使用相同的名称调用过 saveBackStack(),则都不会执行任何操作。
有关更多信息,请参阅 多重返回栈:深入探究。
版本 1.4.0-rc01
2021 年 11 月 3 日
androidx.fragment:fragment:1.4.0-rc01 已发布,与 Fragment 1.4.0-beta01 相比没有变化。版本 1.4.0-rc01 包含这些提交。
版本 1.4.0-beta01
2021 年 10 月 27 日
androidx.fragment:fragment:1.4.0-beta01、androidx.fragment:fragment-ktx:1.4.0-beta01 和 androidx.fragment:fragment-testing:1.4.0-beta01 已发布。版本 1.4.0-beta01 包含这些提交。
Bug 修复
- 父 fragment 现在将在启动自己的回调之前沿其整个层次结构向下分发
onHiddenChanged()。(Iedc20,b/77504618) - 从带有打开键盘的 fragment 切换到带有 recycler view 的 fragment 时,键盘现在会自动关闭。(I8b842,b/196852211)
DialogFragment现在为您在调用show()、showNow()或dismiss()时创建的所有事务使用setReorderingAllowed(true)。(Ie2c14)- 极长的 Lint 警告
DetachAndAttachFragmentInSameFragmentTransaction已缩短为DetachAndAttachSameFragment。(e9eca3)
版本 1.4.0-alpha10
2021 年 9 月 29 日
androidx.fragment:fragment:1.4.0-alpha10、androidx.fragment:fragment-ktx:1.4.0-alpha10 和 androidx.fragment:fragment-testing:1.4.0-alpha10 已发布。版本 1.4.0-alpha10 包含这些提交。
Lint
- 添加了
DetachAndAttachFragmentInSameFragmentTransactionlint 警告,用于检测在同一个FragmentTransaction中对同一个Fragment调用detach()和attach()— 由于这些互补的操作在同一个事务中执行时会相互抵消,因此必须将它们拆分为单独的事务才能真正起作用。(aosp/1832956,b/200867930) - 添加了
FragmentAddMenuProviderlint 错误,用于在使用MenuHost的addMenuProviderAPI 时纠正 Fragment 生命周期到 Fragment 视图生命周期的用法。(aosp/1830457,b/200326272)
文档更新
- 用于 Activity Result API(即
startActivityForResult、startIntentSenderForResult、onActivityResult、requestPermissions和onRequestPermissionsResult)现在处理的 API 的弃用消息都已扩展并包含更多详细信息。(cce80f) Fragment和DialogFragment的onActivityCreated()的弃用消息都已扩展并包含更多详细信息。(224db4)
版本 1.4.0-alpha09
2021 年 9 月 15 日
androidx.fragment:fragment:1.4.0-alpha09、androidx.fragment:fragment-ktx:1.4.0-alpha09 和 androidx.fragment:fragment-testing:1.4.0-alpha09 已发布。版本 1.4.0-alpha09 包含这些提交。
新功能
- 您现在可以调用
clearBackStack(name)来清除之前用saveBackStack(name)保存的任何状态。(I70cd7)
API 变更
FragmentContainerView类已用 Kotlin 重写,确保getFragment函数能够正确尊重可空性。(If694a,b/189629145)- FragmentStrictMode 现在用 Kotlin 编写(I11767,b/199183506)
Bug 修复
- 修复了在使用
setReorderingAllowed(true)添加 fragment,然后在执行挂起事务之前立即移除该 fragment 时,状态未被正确清理的问题。(I8ccb8)
版本 1.4.0-alpha08
2021 年 9 月 1 日
androidx.fragment:fragment:1.4.0-alpha08、androidx.fragment:fragment-ktx:1.4.0-alpha08 和 androidx.fragment:fragment-testing:1.4.0-alpha08 已发布。版本 1.4.0-alpha08 包含这些提交。
Bug 修复
- 改进了
UseRequireInsteadOfGetLint 检查,以更好地处理冗余括号。(I2d865) - 改进了
UseGetLayoutInflaterLint 检查,以处理额外的边界情况。(Ie5423)
版本 1.4.0-alpha07
2021 年 8 月 18 日
androidx.fragment:fragment:1.4.0-alpha07、androidx.fragment:fragment-ktx:1.4.0-alpha07 和 androidx.fragment:fragment-testing:1.4.0-alpha07 已发布,没有显著变化。版本 1.4.0-alpha07 包含这些提交。
版本 1.4.0-alpha06
2021 年 8 月 4 日
androidx.fragment:fragment:1.4.0-alpha06、androidx.fragment:fragment-ktx:1.4.0-alpha06 和 androidx.fragment:fragment-testing:1.4.0-alpha06 已发布。版本 1.4.0-alpha06 包含这些提交。
Bug 修复
- 修复了在快速切换返回栈时,在恢复
FragmentTransaction时表现为IllegalStateException或出现 fragment 的第二个副本的多重返回栈问题。(I9039f) - 修复了
FragmentManager在状态恢复后仍保留通过saveBackStack()保存的状态副本的问题。(Ied212) DialogFragment的dismissAllowingStateLoss()方法在通过show(FragmentTransaction, String)方法专门添加 DialogFragment 后,在状态保存后调用时不再崩溃。(I84422)
版本 1.4.0-alpha05
2021 年 7 月 21 日
androidx.fragment:fragment:1.4.0-alpha05、androidx.fragment:fragment-ktx:1.4.0-alpha05 和 androidx.fragment:fragment-testing:1.4.0-alpha05 已发布。版本 1.4.0-alpha05 包含这些提交。
Bug 修复
- 摘自 Fragment
1.3.6:当根视图设置了transitionGroup=”true”时,使用hide()时 Fragment 的视图现在会正确设置为GONE。(aosp/1766655,b/193603427) - 摘自 Fragment
1.3.6:FragmentActivity现在在它重写的生命周期回调中,总是将其作为第一个操作来解锁已保存的状态。(I6db7a)
依赖项更新
- 摘自 Fragment
1.3.6:Fragments 现在依赖于 Activity1.2.4。(I3a66c)
版本 1.4.0-alpha04
2021 年 6 月 30 日
androidx.fragment:fragment:1.4.0-alpha04、androidx.fragment:fragment-ktx:1.4.0-alpha04 和 androidx.fragment:fragment-testing:1.4.0-alpha04 已发布。版本 1.4.0-alpha04 包含这些提交。
API 变更
FragmentManager现在在内部使用SavedStateRegistry来保存其状态。FragmentController中的saveAllState()和restoreSavedState()方法也已被弃用。如果您正在使用FragmentController在FragmentActivity之外托管 fragment,则应该让您的FragmentHostCallbacks实现SavedStateRegistryOwner。(Iba68e,b/188734238)
Bug 修复
- 修复了在同时运行使用
replace()的FragmentTransaction时,作为支持多重返回栈一部分的saveBackStack()调用失败的问题。(I73137) - 修复了在使用
restoreBackStack()API 进行多重返回栈支持时,手动恢复包含多个事务的已保存返回栈后发生的NullPointerException。这也修复了没有为所有事务检查setReorderingAllowed(true)的问题。(I8c593) - 修复了
FragmentManager即使在这些 fragment 从FragmentManager中移除后,仍错误地继续恢复已保存的 fragment 状态,从而导致保存的状态随着时间的推移不断增加的问题。(I1fb8e)
版本 1.4.0-alpha03
2021 年 6 月 16 日
androidx.fragment:fragment:1.4.0-alpha03、androidx.fragment:fragment-ktx:1.4.0-alpha03 和 androidx.fragment:fragment-testing:1.4.0-alpha03 已发布。版本 1.4.0-alpha03 包含这些提交。
新功能
- 所有 Fragment StrictMode
Violation类都已更新,并提供了更详细的错误消息,解释了违规的详细信息。(b/187871638)FragmentTagUsageViolation现在包含更详细的错误消息,其中包含 fragment 本应被添加到其中的父容器。(Ic33a7)WrongFragmentContainerViolation现在有更详细的错误消息,其中包含 fragment 被添加到的容器。(Ib55f8)TargetFragmentUsageViolation的用例类现在有更详细的错误消息,包括导致违规的 fragment 和任何其他包含的信息。(Icc6ac)- 扩展
RetainInstanceUsageViolation的类现在有更详细的错误消息,包括导致违规的 fragment。(I6bd55) FragmentReuseViolation现在有更详细的错误消息,包括 fragment 的前一个 id。(I28ce2)SetUserVisibleHintViolation现在有更详细的错误消息,包括用户可见提示被设置为什么。(Ib2d5f)
行为变更
- 撤销了对在
FragmentContainerView上调用fitsSystemWindows的限制 - 这不再导致您的应用崩溃。(6b8ddd,b/190622202)
Bug 修复
- 摘自 Fragment
1.3.5:修复了 Fragment1.3.4通过 aosp/1679887 引入的共享元素转换中的回归。Fragment 现在正确处理转换组(直接通过transitionGroup="true"设置或间接通过transitionName或background设置),并且共享元素不再抛出IndexOutOfBoundsException。(I16484,b/188679569,b/188969304) FragmentManager在您尝试隐藏正在移除的 fragment 时不再崩溃。(I573dd,b/183634730)OnCreateDialogIncorrectCallbacklint 检查在评估顶级变量时不再崩溃。(0a9efa,b/189967522)
版本 1.4.0-alpha02
2021 年 6 月 2 日
androidx.fragment:fragment:1.4.0-alpha02、androidx.fragment:fragment-ktx:1.4.0-alpha02 和 androidx.fragment:fragment-testing:1.4.0-alpha02 已发布。版本 1.4.0-alpha02 包含这些提交。
新功能
FragmentStrictMode现在总是会在通过FragmentManager启用日志记录时记录违规,无论正在使用当前的严格模式策略如何。(I02df6,b/187872638)FragmentStrictMode现在支持将特定的Fragment类免除严格模式Violation,从而允许该类绕过任何惩罚。(Ib4e5d,b/184786736)FragmentStrictModeViolation类已扩展,增加了基于每次违规的结构信息。这允许您验证到底是什么导致了违规,以及违规的 fragment(If5118,b/187871150),每个Violation包含以下内容:WrongFragmentContainerViolation现在包含Fragment试图被添加到的ViewGroup。(I83c75,b/187871150)TargetFragmentUsageViolation已扩展为SetTargetFragmentUsageViolation、GetTargetFragmentUsageViolation和GetTargetFragmentRequestCodeUsageViolation,其中SetTargetFragmentUsageViolation包含目标 fragment 和请求代码。(I741b4,b/187871150)SetUserVisibleHintViolation现在包含传递给setUserVisibleHint()的布尔值。(I00585,b/187871150)FragmentTagUsageViolation现在包含<fragment>标签试图将 fragment 膨胀到的 ViewGroup。(I5dbbc,b/187871150)FragmentReuseViolation现在包含导致违规的Fragment前一个实例的唯一 ID。(I0544d,b/187871150)RetainInstanceUsageViolation现在是抽象的,并且有两个子类SetRetainInstanceUsageViolation和GetRetainInstanceUsageViolation,分别表示违规类型的两种情况。(Ic81e5,b/187871150)
行为变更
FragmentContainerView现在在尝试以编程方式或通过 XML 更改fitsSystemWindow属性时抛出异常。插入内容应由每个单独的 fragment 的视图处理。(Ie6651,b/187304502)
版本 1.4.0-alpha01
2021 年 5 月 18 日
androidx.fragment:fragment:1.4.0-alpha01、androidx.fragment:fragment-ktx:1.4.0-alpha01 和 androidx.fragment:fragment-testing:1.4.0-alpha01 已发布。版本 1.4.0-alpha01 包含这些提交。
新功能
FragmentContainerView现在提供一个getFragment()方法,该方法返回最近添加到容器中的 fragment。它使用与findFragmentById()相同的逻辑,并带有FragmentContainerView的 ID,但允许链式调用。(Ife17a,b/162527857)val navController = binding.container.getFragment<NavHostFragment>().navController添加了
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE},用于指定是否在 fragment 转换中启用从主题中获取的标准 Activity 转换动画。(I46652)
多重返回栈 (Multiple back stacks)
FragmentManager 维护一个返回栈,由使用 addToBackStack() 的 fragment 事务组成。这允许您弹出这些事务并返回到以前的状态,使用 使用 fragment 保存状态 的机制来允许 fragment 适当地恢复其状态。
此版本通过提供两个新的 FragmentManager API 扩展了这些机制:saveBackStack(String name) 和 restoreBackStack(String name)。这些 API 使用与 addToBackStack() 相同的 name 来保存 FragmentTransaction 的状态以及在这些事务中添加的每个 fragment 的状态,并允许您稍后恢复这些事务及其 fragment,并保持其状态完整。这允许您通过保存当前的返回栈并恢复已保存的返回栈,有效地在多个返回栈之间“切换”。
saveBackStack() 的操作类似于 popBackStack(),因为它是异步的,并且会导致所有回到该特定名称的 fragment 事务被逆转(“弹出”),并且任何已添加的 fragment 都会被销毁和移除,但它在几个重要方面有所不同:
saveBackStack()始终是包含性的。- 与
popBackStack()不同(如果未找到指定的名称或提供了空名称,它将弹出返回栈上的所有事务),如果您之前没有使用该精确的非空名称提交过使用addToBackStack()的 fragment 事务,saveBackStack()将不会执行任何操作。 - 保存从这些事务中添加的所有 fragment 的状态。这意味着每个 fragment 的视图状态都被存储,每个 fragment 的
onSaveInstanceState()被调用并且该状态被恢复,并且与这些 fragment 关联的任何ViewModel实例都被保留(并且不会调用它们的onCleared())。
可与 saveBackStack() 一起使用的 fragment 事务必须满足特定条件:
- 每个 fragment 事务必须使用
setReorderingAllowed(true)以确保事务可以作为单个原子操作恢复。 - 保存的事务集必须是自包含的(即,它们不得显式引用该事务集之外的任何 fragment),以确保它们可以在以后的任何时间恢复,无论在此期间对返回栈做了哪些更改。
- 任何保存的 fragment 不得是保留的 fragment,也不得在其子 fragment 的传递集中包含保留的 fragment,以确保在保存返回栈后
FragmentManager不会返回对已保存 fragment 的任何引用。
与 saveBackStack() 类似,如果您之前没有使用相同的名称调用过 saveBackStack(),则 restoreBackStack() 不会执行任何操作。(b/80029773)
Fragment StrictMode
FragmentStrictMode API 提供运行时检查,允许您验证您的应用或您所依赖的库是否没有调用已弃用的 fragment API。当检测到违规时,您可以选择打印日志消息、触发自定义监听器或让应用崩溃。控制启用哪些检查以及触发哪些“惩罚”的 FragmentStrictMode.Policy 可以通过新的 setStrictModePolicy() 方法在 FragmentManager 上设置。该策略适用于该 FragmentManager,并传递应用于任何未设置自己唯一策略的子 fragment 管理器。(#123,#131,#150,b/143774122)
detectFragmentReuse()检测之前移除的Fragment实例是否正被重新添加到FragmentManager中。在Fragment实例被销毁并从FragmentManager中移除后,您绝不应与之交互或保留对它的引用。(#142,b/153738653)detectFragmentTagUsage()检测您何时在布局 XML 中使用<fragment>标签。在布局中包含 fragment 时,您应该始终使用FragmentContainerView。(#141,b/153738235)detectWrongFragmentContainer()检测您何时将 fragment 添加到不是FragmentContainerView的容器中。在布局中,您应该始终使用FragmentContainerView作为 fragment 的容器。(#146,b/181137036)detectRetainInstanceUsage()检测您何时使用已弃用的setRetainInstance()或getRetainInstance()API。(#140,b/153737954)detectSetUserVisibleHint()检测您何时使用已弃用的setUserVisibleHint()API。(#136,b/153738974)detectTargetFragmentUsage()检测您何时使用已弃用的setTargetFragment()、getTargetFragment()或getTargetRequestCode()API。(#139,b/153737745)
API 变更
- 已移除实验性 API
FragmentManager.enableNewStateManager(boolean),新的状态管理器现在是唯一可用的选项。(I90036,b/162776418) FragmentScenario现在实现了Closeable,允许您将其与 Kotlin 的use方法或 try-with-resources 一起使用。(#121,b/143774122)
新的 Lint 检查
UseGetLayoutInflaterLint 检查现在会在DialogFragment内使用LayoutInflater.from(Context)时发出警告 - 您应该始终使用 dialog fragment 的getLayoutInflater()方法来获取适当的LayoutInflater。(#156,b/170781346)DialogFragmentCallbacksDetectorLint 检查现在会在DialogFragment的onCreateDialog()方法中调用setOnCancelListener或setOnDismissListener时发出警告 - 这些监听器由DialogFragment本身拥有,您应该重写onCancel()和onDismiss()以接收这些回调。(#171,b/181780047,b/187524311)
Bug 修复
- 摘自 Fragment 1.3.4:修复了在 Fragment 内将
ViewTreeViewModelStoreOwner.get()API 与ViewModelProvider或 Jetpack Compose 的viewModel()方法一起使用时引入的回归。如果您的 Fragment 重写了getDefaultViewModelProviderFactory()(正如使用 Hilt 时使用@AndroidEntryPoint注解的 Fragment 所做的那样),这些用例现在将正确使用您的 Fragment 提供的ViewModelProvider.Factory。如果您没有重写该方法,则会创建一个与 Fragment 视图一起保存和恢复其状态的SavedStateViewModelFactory作为默认工厂。(I5cbfa,b/186097368) - 摘自 Fragment 1.3.4:在 API 29 上使用
FragmentContainerView时,插入内容将不再无限期地分发,修复了BottomNavigationBar和FloatingActionButton实例的问题。(I1bb78,b/186012452) - 摘自 Fragment 1.3.4:您现在可以在进程销毁后从 fragment 结果包中检索您的 Parcelable。(I65932,b/187443158)
- 摘自 Fragment 1.3.4:在 ViewGroup 上执行共享元素转换时,如果 ViewGroup 设置了
transitionGroup为 false,它现在将正确转换。(I99675)
外部贡献
- 感谢 simonschiller 使
FragmentScenario实现了Closeable。(#121,b/143774122) - 感谢 simonschiller 为此版本添加了整个
FragmentStrictModeAPI!(#123,#131,#150,b/143774122,#142,b/153738653,#141,b/153738235,#146,b/181137036,#140,b/153737954,#136,b/153738974,#139,b/153737745) - 感谢 tatocaster 添加了
UseGetLayoutInflaterLint 检查。(#156,b/170781346) - 感谢 tatocaster 添加了
DialogFragmentCallbacksDetectorLint 检查。(#171,b/181780047)
版本 1.3
版本 1.3.6
2021 年 7 月 21 日
androidx.fragment:fragment:1.3.6、androidx.fragment:fragment-ktx:1.3.6 和 androidx.fragment:fragment-testing:1.3.6 已发布。版本 1.3.6 包含这些提交。
Bug 修复
- 摘自 Fragment
1.4.0-alpha03:FragmentManager在您尝试隐藏正在移除的 fragment 时不再崩溃。(I573dd,b/183634730) - 当根视图设置了
transitionGroup=”true”时,使用hide()时 Fragment 的视图现在会正确设置为GONE。(aosp/1766655,b/193603427) FragmentActivity现在在它重写的生命周期回调中,总是将其作为第一个操作来解锁已保存的状态。(I6db7a)
依赖项更新
- 摘自 Fragment
1.3.6:Fragments 现在依赖于 Activity1.2.4。(I3a66c)
版本 1.3.5
2021 年 6 月 16 日
androidx.fragment:fragment:1.3.5、androidx.fragment:fragment-ktx:1.3.5 和 androidx.fragment:fragment-testing:1.3.5 已发布。版本 1.3.5 包含这些提交。
Bug 修复
- 修复了 Fragment
1.3.4通过 aosp/1679887 引入的共享元素转换中的回归。Fragment 现在正确处理转换组(直接通过transitionGroup="true"设置或间接通过transitionName或background设置),并且共享元素不再抛出IndexOutOfBoundsException。(I16484,b/188679569,b/188969304)
版本 1.3.4
2021 年 5 月 18 日
androidx.fragment:fragment:1.3.4、androidx.fragment:fragment-ktx:1.3.4 和 androidx.fragment:fragment-testing:1.3.4 已发布。版本 1.3.4 包含这些提交。
Bug 修复
- 修复了在 Fragment 内将
ViewTreeViewModelStoreOwner.get()API 与ViewModelProvider或 Jetpack Compose 的viewModel()方法一起使用(使用 Hilt 时)引入的回归。如果您的 Fragment 重写了getDefaultViewModelProviderFactory()(正如@AndroidEntryPoint注解的 Fragment 所做的那样),这些用例现在将正确使用您的 Fragment 提供的ViewModelProvider.Factory。如果您没有重写该方法,则会创建一个与 Fragment 视图一起保存和恢复其状态的SavedStateViewModelFactory作为默认工厂。(I5cbfa,b/186097368) - 在 API 29 上使用
FragmentContainerView时,插入内容将不再无限期地分发,修复了BottomNavigationBar和FloatingActionButton实例的问题。(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.3 和 androidx.fragment:fragment-testing:1.3.3 已发布。版本 1.3.3 包含这些提交。
新功能
- 在使用通过 Fragment 视图使用
ViewTreeSavedStateRegistryOwner.get()返回的SavedStateRegistryOwner时,使用SavedStateViewModelFactory现在可以正常工作。(I21acf,b/181577191)
Bug 修复
- 修复了 Fragment
1.3.2中引入的回归,该回归导致在弹出包含setPrimaryNavFragment操作(例如NavHostFragment使用的那些)的FragmentTransaction时,popEnter动画无法运行。(I38c87,b/183877426) FragmentContainerView现在确保向每个Fragment分发一组新的WindowInsets,确保每个 fragment 现在可以独立消耗插入内容。(I63f68,b/172153900)DialogFragment现在正确处理子 fragment 添加到具有与您自定义Dialog类中容器相同 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.2 和 androidx.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 的
InvalidFragmentVersionForActivityResultlint 检查的问题。 - Fragment 现在依赖于 Lifecycle 2.3.1。
版本 1.3.1
2021 年 3 月 10 日
androidx.fragment:fragment:1.3.1、androidx.fragment:fragment-ktx:1.3.1 和 androidx.fragment:fragment-testing:1.3.1 已发布。版本 1.3.1 包含这些提交。
新功能
DialogFragment中的对话框现在可以通过其 DecorView 获取 ViewTree 所有者,从而确保DialogFragment可以与ComposeView一起使用。(Ib9290,b/180691023)
Bug 修复
- 使用 FragmentContainerView 膨胀到已
RESUMED的 activity 中的 Fragment,现在在配置更改后可以正确显示。(Ie14c8,b/180538371) - Fragment
toString()末尾不再有多余的}。(I54705,b/177761088) - FragmentActivity 中重写的方法现在正确继承了基础方法 javaDoc。(I736ce,b/139548782)
setFragmentResult和setFragmentResultListener的文档已更新其参数文档,以反映它们不再接受可空值。(I990ba,b/178348386)
新状态管理器错误修复
- 修复了由
mFocusedView引起的 fragment 内存泄漏。(Ib4e9e,b/179925887) - Fragment 现在在使用显示/隐藏事务时正确调用
onCreateOptionsMenu。(I8bce8,b/180255554) - 在 fragment 布局前启动转换的子 fragment 现在将正确达到
RESUMED。(Ic11e6,b/180825150) - 使用
<fragment>标签膨胀的 Fragment 现在将始终达到RESUMED。(I452ac,(I9fa49)
依赖项更新
- Fragment 1.3.1 依赖于 Activity
1.2.1。(I557b9)
版本 1.3.0
2021 年 2 月 10 日
androidx.fragment:fragment:1.3.0、androidx.fragment:fragment-ktx:1.3.0 和 androidx.fragment:fragment-testing:1.3.0 已发布。版本 1.3.0 包含这些提交。
自 1.2.0 以来的重大变化
- 新的状态管理器:对
FragmentManager内部的 重大重写 修复了围绕生命周期事件、动画和转换的分发以及如何处理延迟 fragment 的许多问题。 Activity Result API 集成:添加了对 Activity
1.2.0中引入的ActivityResultRegistryAPI 的支持,以处理startActivityForResult()+onActivityResult()以及requestPermissions()+onRequestPermissionsResult()流程,无需重写 Fragment 中的方法,此外还提供了测试这些流程的钩子。请参阅更新的 获取 Activity 结果。- 此版本修复了围绕无效请求代码和权限请求分发的一些问题,这些问题阻止了 Activity Result API 在以前版本的
FragmentActivity上工作。您必须升级到 Fragment 1.3.0 才能在FragmentActivity或AppCompatActivity中使用 Activity Result API。
- 此版本修复了围绕无效请求代码和权限请求分发的一些问题,这些问题阻止了 Activity Result API 在以前版本的
Fragment Result API:添加了对通过
FragmentManager上的新 API 在两个 Fragment 之间传递结果的支持。这适用于层次结构 fragment(父/子)、DialogFragment 以及导航中的 fragment,并确保结果仅在 Fragment 至少处于STARTED状态时发送给它。目标 fragment API 已弃用,取而代之的是这些新 API。请参阅 使用 Fragment Result API 获取结果。FragmentOnAttachListener:FragmentActivity和Fragment上的onAttachFragment()回调已被弃用。添加了一个新的FragmentOnAttachListener以提供更灵活的替代方案,允许将onAttachFragment()委托给单独的、可测试的监听器,并支持向除直接子 FragmentManager 之外的 FragmentManager 添加监听器。FragmentScenario改进:来自fragment-testing工件的FragmentScenario类已用 Kotlin 重写,并获得了一些改进:FragmentScenario现在使用setMaxLifecycle()来实现moveToState(),确保在所有 API 级别上行为一致,并将 Fragment 的状态与底层 Activity 解耦。FragmentScenario现在支持设置初始Lifecycle.State,以支持在第一次移动到每个Lifecycle.State之前断言 fragment 的状态。- 现在有一种
FragmentScenarioAPI 的onFragment替代方案,即 Kotlin 具象化扩展方法withFragment,它允许您返回一个值。值得注意的是,它会重新抛出在给定块中引发的异常。
ViewTree支持:Fragment现在支持 Lifecycle2.3.0和 SavedState1.1.0中添加的ViewTreeLifecycleOwner.get(View)、ViewTreeViewModelStoreOwner.get(View)和ViewTreeSavedStateRegistryOwnerAPI,因此当在Fragment中使用View时,它将返回该 Fragment 作为ViewModelStoreOwner,以及绑定到 fragment 的 视图生命周期 的SavedStateRegistryOwner和LifecycleOwner。TRANSIT_动画更改:Fragment 默认效果TRANSIT_FRAGMENT_OPEN、TRANSIT_FRAGMENT_CLOSE和TRANSIT_FRAGMENT_FADE现在使用Animator而不是Animation。用于构建这些动画器的资源现在是私有的。setRetainInstance()弃用:Fragment 上的setRetainInstance()方法已被弃用。随着 ViewModels 的引入,开发者有了一个特定的 API 来保留可以与 Activities、Fragments 和 Navigation 图关联的状态。这允许开发者使用正常的、非保留的 Fragment,并将他们想要保留的特定状态单独保留,避免了常见的泄漏来源,同时保持了单一创建和销毁保留状态(即ViewModel的构造函数和它接收的onCleared()回调)的有用属性。ViewPager 1 适配器弃用:随着 ViewPager2
1.0.0的发布,用于与ViewPager交互的FragmentPagerAdapter和FragmentStatePagerAdapter类已被弃用。请参阅 从 ViewPager 迁移到 ViewPager2。
版本 1.3.0-rc02
2021 年 1 月 27 日
androidx.fragment:fragment:1.3.0-rc02、androidx.fragment:fragment-ktx:1.3.0-rc02 和 androidx.fragment:fragment-testing:1.3.0-rc02 已发布。版本 1.3.0-rc02 包含这些提交。
Bug 修复
- 修复了配置更改后父
DialogFragment会出现在子DialogFragment之上的问题;子对话框 fragment 现在总是出现在父对话框 fragment 之上。(I30806,b/177439520) - 修复了使用
Animation执行hide操作会导致隐藏的 fragment 在动画结束时闪烁的问题。(I57e22,b/175417675) - 在视图层次结构附加之前添加了转换的 Fragment 现在可以正确达到
RESUMED。(I1fc1d,b/177154873)
新状态管理器错误修复
- Fragment 的视图
Lifecycle现在可以正确处理 Fragment 视图在Lifecycle达到CREATED之前被销毁的情况,避免了说明“no event down from INITIALIZED”的异常。(eda2bd,b/176138645) - 使用
Animator的 Fragment 在使用FragmentContainerView时现在以正确的顺序出现。(Id9aa3,b/176089197)
版本 1.3.0-rc01
2020 年 12 月 16 日
androidx.fragment:fragment:1.3.0-rc01、androidx.fragment:fragment-ktx:1.3.0-rc01 和 androidx.fragment:fragment-testing:1.3.0-rc01 已发布。1.3.0-rc01 版本包含这些提交。
Bug 修复
onPrepareOptionsMenu()现在遵循与onCreateOptionsMenu()相同的逻辑,当父 Fragment 调用setMenuVisibility(false)时,不再调用该方法。(Id7de8, b/173203654)
新状态管理器错误修复
- 修复了将带有
Animation的 Fragment 添加到FragmentContainerView,随后通过弹出(pop)操作中断该添加过程时出现的内存泄漏和视觉伪影。(I952d8) - 修复了在 Fragment 的
onCreate()或onViewCreated()方法中替换 Fragment 时,其视图仍保留在视图层次结构中的问题。(I8a7d5) - Fragment 根视图在恢复(resumed)时现在可以正确恢复焦点。(Ifc84b)
- 在同一个 Fragment 事务中组合使用弹出和替换操作时,现在将显示正确的动画。(Ifd4e4, b/170328691)
版本 1.3.0-beta02
2020 年 12 月 2 日
androidx.fragment:fragment:1.3.0-beta02、androidx.fragment:fragment-ktx:1.3.0-beta02 和 androidx.fragment:fragment-testing:1.3.0-beta02 已发布。1.3.0-beta02 版本包含这些提交。
新功能
FragmentScenario已完全转换为 Kotlin,同时通过使用 Kotlin 1.4 的FragmentAction函数式接口保持了源码和二进制兼容性。(I19d31)
行为变更
- 未使用
class或android:name属性扩充 Fragment 的FragmentContainerView现在可以在FragmentActivity之外使用。(Id4397, b/172266337) - 尝试将 Fragment 的最大生命周期设置为
DESTROYED时,现在会抛出IllegalArgumentException。(Ie7651, b/170765622) - 使用
DESTROYED状态初始化FragmentScenario时,现在会抛出IllegalArgumentException。(I73590, b/170765622)
新状态管理器错误修复
- 修复了在使用
Animator或TRANSIT_FRAGMENT_选项之一中断 Fragment 过渡时,视图无法达到其最终状态的问题。(I92426, b/169874632) - 修复了导致带有退出
Animation的 Fragment 无法被正确销毁的问题。(I83d65) - 反转效果的退出 Fragment 现在可以正确取消并使用正确的进入效果重新启动。(I62226, b/167092035)
- 修复了
hide()操作的退出Animator不执行的问题。(Id7ffe) - Fragment 在推迟后立即启动时,现在可以正确显示。(Ie713b, b/170022857)
- 在动画期间移除其焦点视图的 Fragment 在达到
RESUMED状态后,不会再尝试恢复对已分离视图的焦点。(I38c65, b/172925703)
外部贡献
FragmentFactory现在为不同的ClassLoader实例分别缓存 Fragment 类。感谢 Simon Schiller!(#87, b/113886460)
版本 1.3.0-beta01
2020 年 10 月 1 日
androidx.fragment:fragment:1.3.0-beta01、androidx.fragment:fragment-ktx:1.3.0-beta01 和 androidx.fragment:fragment-testing:1.3.0-beta01 已发布。1.3.0-beta01 版本包含这些提交。
新功能
setMaxLifecycle()现在支持将Lifecycle状态设置为INITIALIZING,只要 Fragment 尚未移动到CREATED状态即可。(b/159662173)
API 变更
- 升级 androidx 以使用 Kotlin 1.4(Id6471, b/165307851, b/165300826)
行为变更
- Fragment 资源文件已正确设为私有。(aosp/1425237)
Bug 修复
- 使用
<fragment>标签扩充的 Fragment 现在会在移动到 STARTED 之前,正确等待其视图被添加到容器中。(I02f4c) - 可见且随后被
setMaxLifecycle()设置为CREATED的 Fragment 现在可以正确运行其退出效果。(b/165822335) - 移除未添加到回退栈的已分离 Fragment 不再导致内存泄漏。感谢 Nicklas Ansman Giertz!(b/166489383)
- 活跃的 Fragment 现在始终具有非 null 的
FragmentManager,并且具有非 nullFragmentManager的 Fragment 将始终被视为活跃。(aosp/1422346) - Fragment 的默认效果
TRANSIT_FRAGMENT_OPEN、TRANSIT_FRAGMENT_CLOSE和TRANSIT_FRAGMENT_FADE现在使用Animator而非Animation。(b/166155034)
新状态管理器错误修复
- Fragment 现在可以正确地从其动画开始之前的位置恢复其视图焦点状态。(Icc256)
- 仅具有共享元素过渡的 Fragment 现在可以正确完成其特殊效果,这意味着它们实际上移动到了最终状态。(Iaebc7, b/166658128)
- Fragment 视图在被销毁之前,现在始终会从容器中移除。(Id5876)
- 新的状态管理器现在在添加进入的 Fragment 视图之前,始终会移除退出的 Fragment 视图。(I41a6e)
- 对 Fragment 视图可见性的显式更改现在会受到新状态管理器的尊重。这意味着,如果您在动画开始前将进入的 Fragment 视图设置为
INVISIBLE,它将保持不可见状态。(b/164481490) - Fragment 现在优先处理
Animators而非Animations,这意味着同时拥有两者的 Fragment 将仅运行Animator并忽略Animation。(b/167579557) - 使用新的状态管理器时,不再会导致 Fragment 在使用进入动画时闪烁。(b/163084315)
已知问题
使用新的状态管理器时,如果您在进入特殊效果期间按下返回键,旧的 Fragment 不会被重新添加,而是导致出现空白屏幕,而不是返回到上一个 Fragment。(b/167259187, b/167092035, b/168442830)
版本 1.3.0-alpha08
2020 年 8 月 19 日
androidx.fragment:fragment:1.3.0-alpha08、androidx.fragment:fragment-ktx:1.3.0-alpha08 和 androidx.fragment:fragment-testing:1.3.0-alpha08 已发布。1.3.0-alpha08 版本包含这些提交。
新的状态管理器
此版本包含对 FragmentManager 内部状态管理的重大重构,这影响了生命周期方法、动画和过渡的调度,以及推迟事务的处理方式。此功能默认启用。有关详细信息,请参阅《Fragments:重建内部结构》博客文章。(b/139536619, b/147749580)
FragmentManager.enableNewStateManager(boolean)中的一个实验性 API 可用于控制FragmentManager是否使用新的状态管理器。(I7b6ee)
以下问题仅在使用新的状态管理器时得到修复
replace操作的上一个 Fragment 现在在新的 Fragment 启动之前被正确停止。(b/161654580)- Fragment 现在防止在同一个 Fragment 上发生多个相互竞争的动画,从而避免了
Animation会覆盖所有Transition效果,或者单个 Fragment 上的Animator和Transition同时运行的情况。(b/149569323) - 所有进入和退出的 Fragment 的
enterTransition和exitTranstion现在都会运行,而不仅仅是最后一个进入的 Fragment 和第一个退出的 Fragment。(b/149344150) - 推迟的 Fragment 不再卡在
CREATED状态,而是与其他 Fragment 一起移动到STARTED。(b/129035555) - 修复了在混合使用推迟重新排序的事务和非重新排序的事务时,
FragmentManager会乱序执行操作的问题。(b/147297731) - 在推迟 Fragment 时,同时弹出多个 Fragment 将不再导致中间的 Fragment 暂时可见。(b/37140383)
FragmentManager在onAttachFragment()回调中调用findFragmentById()或findFragmentByTag()时,现在会返回正确的 Fragment。(b/153082833)- 当替换它们的 Fragment 被推迟时,Fragment 不再对正在销毁的 Fragment 调用
onCreateView()。(b/143915710) - 尝试组合框架
Transition和 AndroidXTransition实例时的错误消息,现在会提及具有无效过渡的 Fragment。(b/155574969)
行为变更
- 您现在可以在 Fragment 的
onCreate()生命周期方法中对ActivityResultLauncher调用launch()。(b/161464278) - 在
onCreate()之后调用registerForActivityResult()现在会抛出一个异常,表明这是不允许的,而不是在配置更改后静默失败而不交付结果。(b/162255449) FragmentActivity现在使用在 Activity1.2.0-alpha08中引入的OnContextAvailableListenerAPI 来恢复FragmentManager的状态。添加到FragmentActivity子类的任何监听器都将在该监听器之后运行。(I513da)
Bug 修复
- 在使用
startIntentSenderForResult()时传递的ActivityOptions现在受到尊重。(b/162247961)
已知问题
- 使用新的状态管理器时,在
onViewCreated()之后和onResume()之前直接设置 Fragment 根视图的可见性,会导致您设置的可见性被控制根视图可见性的FragmentManager覆盖。作为变通方法,您应该始终使用hide()和show()操作来更改 Fragment 的可见性。(b/164481490)
版本 1.3.0-alpha07
2020 年 7 月 22 日
androidx.fragment:fragment:1.3.0-alpha07、androidx.fragment:fragment-ktx:1.3.0-alpha07 和 androidx.fragment:fragment-testing:1.3.0-alpha07 已发布。1.3.0-alpha07 版本包含这些提交。
新功能
FragmentScenario现在支持将初始生命周期状态设置为CREATED、STARTED或RESUMED,而不是始终将 Fragment 移动到RESUMED状态。(b/159662750)- 添加了
FragmentScenarioAPI 中onFragment的替代方案,即 Kotlin 实化扩展方法withFragment,它允许您返回一个值。值得注意的是,它会重新抛出在给定块中引发的异常。(b/158697631)
行为变更
FragmentScenario现在使用setMaxLifecycle()来实现moveToState(),确保所有 API 级别上的行为一致,并将 Fragment 的状态与其底层 Activity 解耦。(b/156527405)- 由
ViewTreeSavedStateRegistryOwner返回的SavedStateRegistryOwner现在绑定到 Fragment 视图的生命周期。这确保了它的状态保存和恢复与 Fragment 的视图同步。(b/158503763)
Bug 修复
- Fragment 现在会等待 Fragment 视图被附加后才调用
ViewCompat.requestApplyInsets(),避免了插入请求被丢弃的情况。(b/158095749) - 调用
clearFragmentResultListener现在可以正确清除生命周期观察者。(b/159274993)
版本 1.3.0-alpha06
2020 年 6 月 10 日
androidx.fragment:fragment:1.3.0-alpha06、androidx.fragment:fragment-ktx:1.3.0-alpha06 和 androidx.fragment:fragment-testing:1.3.0-alpha06 已发布。1.3.0-alpha06 版本包含这些提交。
新功能
FragmentActivity和Fragment上的onAttachFragment()回调已被弃用。添加了新的FragmentOnAttachListener以提供更灵活的替代方案,允许将onAttachFragment()委托给独立的、可测试的监听器,并支持将监听器添加到除直接子 FragmentManager 之外的 FragmentManager。(I06d3d)
Bug 修复
- 父 Fragment 现在在子 Fragment 之前恢复其视图状态,修复了当
DialogFragment显示另一个DialogFragment作为子 Fragment 时,在配置更改后的视觉排序问题。(b/157195715) - 修复了
UseRequireInsteadOfGetLint 检查无法正确处理?.和!!运算符链式用法的问题。(b/157677616)
版本 1.3.0-alpha05
2020 年 5 月 20 日
androidx.fragment:fragment:1.3.0-alpha05、androidx.fragment:fragment-ktx:1.3.0-alpha05 和 androidx.fragment:fragment-testing:1.3.0-alpha05 已发布。1.3.0-alpha05 版本包含这些提交。
新功能
- 在使用
Fragment中的View时,增加了对来自 Lifecycle2.3.0-alpha03的ViewTreeViewModelStoreOwner和来自 SavedState1.1.0-alpha01的ViewTreeSavedStateRegistryOwner的支持。(aosp/1297993, aosp/1300264)
API 变更
setFragmentResult()和setFragmentResultListener()API 现在分别采用非 null 的Bundle和FragmentResultListener。要显式清除之前设置的结果或监听器,请使用新的clearFragmentResult()和clearFragmentResultListener()方法。(b/155416778)- 采用 lambda 的
setFragmentResultListener()Kotlin 扩展现在被标记为inline。(b/155323404)
行为变更
Fragment上之前已弃用的startActivityForResult()、startIntentSenderForResult()和requestPermissions现在内部使用ActivityResultRegistry,从而在使用这些 API 时消除了对请求码仅使用低位(低于0xFFFF)的限制。(b/155518741)
文档更新
- 扩展了关于
Fragment(@LayoutRes int)和DialogFragment(@LayoutRes int)构造函数的文档,以明确指出在使用默认FragmentFactory时,应从子类的无参构造函数中调用它们。(b/153042497)
版本 1.3.0-alpha04
2020 年 4 月 29 日
androidx.fragment:fragment:1.3.0-alpha04、androidx.fragment:fragment-ktx:1.3.0-alpha04 和 androidx.fragment:fragment-testing:1.3.0-alpha04 已发布。1.3.0-alpha04 版本包含这些提交。
新功能
- 增加了通过
FragmentManager上的新 API 在两个 Fragment 之间传递结果的支持。这适用于层级 Fragment(父/子)、DialogFragment 以及 Navigation 中的 Fragment,并确保结果仅在您的 Fragment 至少处于STARTED状态时才发送给它。(b/149787344)
API 变更
- 目标 Fragment API 已被弃用。要在 Fragment 之间传递数据,应使用新的 Fragment Result API。(b/149787344)
- Fragment 上的
startActivityForResult()/onActivityResult()和requestPermissions()/onRequestPermissionsResult()API 已被弃用。请使用 Activity Result API。(aosp/1290887) - 来自 Activity
1.2.0-alpha04的**重大变更**:prepareCall()方法已重命名为registerForActivityResult()。(aosp/1278717)
Bug 修复
- Fragment 的
getViewLifecycleOwner()现在在调用onSaveInstanceState()之前停止,反映了 Fragment 生命周期行为。(b/154645875) - 在 Fragment 上调用
setMenuVisibility(false)现在可以正确更改其子 Fragment 提供的菜单的可见性。(b/153593580) - 修复了将 Fragment 添加到
DialogFragment的视图层次结构(使用FragmentContainerView)时出现的illegalStateException。(b/154366601) - 在活动之外托管 Fragment 时,Fragment 上的
getDefaultViewModelProviderFactory()方法不再崩溃。(b/153762914)
版本 1.3.0-alpha03
2020 年 4 月 1 日
androidx.fragment:fragment:1.3.0-alpha03、androidx.fragment:fragment-ktx:1.3.0-alpha03 和 androidx.fragment:fragment-testing:1.3.0-alpha03 已发布。1.3.0-alpha03 版本包含这些提交。
API 变更
Fragment上的prepareCall方法现在是final的。(b/152439361)
Bug 修复
- 修复了在使用
BottomSheetDialogFragment时在 Fragment1.3.0-alpha02中引入的回归问题。(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类上的FragmentLiveDataObserveLint 规则,因为它们的生命周期和视图生命周期始终同步,使得调用observe时使用this或viewLifecycleOwner都是安全的。(b/151765086)
依赖项变更
- Fragment 依赖于 Activity
1.2.0-alpha03,该版本对 Activity1.2.0-alpha02中引入的 Activity Result API 进行了重大改进。
版本 1.3.0-alpha02
2020 年 3 月 18 日
androidx.fragment:fragment:1.3.0-alpha02、androidx.fragment:fragment-ktx:1.3.0-alpha02 和 androidx.fragment:fragment-testing:1.3.0-alpha02 已发布。1.3.0-alpha02 版本包含这些提交。
新功能
- 添加了对 Activity
1.2.0-alpha02中引入的ActivityResultRegistryAPI 的支持,以处理startActivityForResult()+onActivityResult()以及requestPermissions()+onRequestPermissionsResult()流程,而无需覆盖 Fragment 中的方法,并提供了用于测试这些流程的钩子。请参阅更新后的《从 Activity 获取结果》。(b/125158199)
API 变更
DialogFragment现在提供了一个带有@LayoutRes的构造函数,该参数指示onCreateView()默认应扩充的布局。(b/150327080)onActivityCreated()方法现在已被弃用。触及 Fragment 视图的代码应在onViewCreated()(在onActivityCreated()之前立即调用)中完成,其他初始化代码应在onCreate()中。要在活动onCreate()完成时专门接收回调,应在onAttach()中向活动的Lifecycle注册一个LifeCycleObserver,并在收到onCreate()回调后移除。(b/144309266)
Bug 修复
- 来自 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 属性名称的局部变量名称时,UseRequireInsteadOfGetLint 检查中的误报。(b/149891163) - 来自 Fragment
1.2.3:FragmentContainerView不再因为在布局预览中使用错误的构造函数而抛出UnsupportedOperationException。(b/149707833)
已知问题
BottomSheetDialogFragment不再正确地在屏幕上定位其对话框。(b/151652127)
版本 1.3.0-alpha01
2020 年 3 月 4 日
androidx.fragment:fragment:1.3.0-alpha01、androidx.fragment:fragment-ktx:1.3.0-alpha01 和 androidx.fragment:fragment-testing:1.3.0-alpha01 已发布。1.3.0-alpha01 版本包含这些提交。
新功能
- 添加了对 Lifecycle
2.3.0-alpha01中引入的ViewTreeLifecycleOwner.get(View)API 的支持,使其返回 Fragment 的viewLifecycleOwner作为onCreateView()返回的任何 View 的LifecycleOwner。(aosp/1182955)
API 变更
- Fragment 上的
setRetainInstance()方法已被弃用。随着 ViewModel 的引入,开发人员拥有了特定的 API 来保留可以与 Activity、Fragment 和 Navigation 图相关联的状态。这允许开发人员使用常规的、非保留的 Fragment,并将他们希望保留的特定状态分开,避免了常见的泄漏源,同时保持了单一创建和销毁保留状态的有用属性(即ViewModel的构造函数和它收到的onCleared()回调)。(b/143911815) - 随着 ViewPager2
1.0.0的发布,用于与ViewPager交互的FragmentPagerAdapter和FragmentStatePagerAdapter类已被弃用。请参阅《从 ViewPager 迁移到 ViewPager2》。(b/145132715)
Bug 修复
- Fragment ProGuard 规则现在正确地仅保留所使用的
Fragment类的默认构造函数,而不是所有Fragment实例,修复了在 Fragment1.2.1中引入的回归问题。(b/149665169 - 在 Fragment
1.2.2中添加的require___()Lint 规则不再对共享与被遮蔽的 Kotlin 属性名称(即view)相同名称的局部变量产生误报。(b/149891163) FragmentContainerView不再在 Android Studio 的布局预览中使用时抛出UnsupportedOperationException。(b/149707833)- 修复了在保存状态后添加的保留 Fragment 在每次配置更改后不会持续重新创建和销毁的问题。(b/145832397)
1.2.5 版本
1.2.5 版本
2020 年 6 月 10 日
androidx.fragment:fragment:1.2.5、androidx.fragment:fragment-ktx:1.2.5 和 androidx.fragment:fragment-testing:1.2.5 已发布。1.2.5 版本包含这些提交。
Bug 修复
- Fragment 的
getViewLifecycleOwner()现在在调用onSaveInstanceState()之前停止,反映了 Fragment 生命周期行为。这之前已在 Fragment1.3.0-alpha04中发布。(b/154645875) - 在 Fragment 上调用
setMenuVisibility(false)现在可以正确更改其子 Fragment 提供的菜单的可见性。这之前已在 Fragment1.3.0-alpha04中发布。(b/153593580)
1.2.4 版本
1.2.4 版本
2020 年 4 月 1 日
androidx.fragment:fragment:1.2.4、androidx.fragment:fragment-ktx:1.2.4 和 androidx.fragment:fragment-testing:1.2.4 已发布。1.2.4 版本包含这些提交。
Bug 修复
- 更新了 Fragment ProGuard 规则,允许混淆保留的 Fragment。(b/151605338)
- 禁用了
DialogFragment类上的FragmentLiveDataObserveLint 规则,因为它们的生命周期和视图生命周期始终同步,使得调用observe时使用this或viewLifecycleOwner都是安全的。(b/151765086)
1.2.3 版本
1.2.3 版本
2020 年 3 月 18 日
androidx.fragment:fragment:1.2.3、androidx.fragment:fragment-ktx:1.2.3 和 androidx.fragment:fragment-testing:1.2.3 已发布。1.2.3 版本包含这些提交。
Bug 修复
- 修复了
DialogFragment中的一个错误,该错误导致在onCreateDialog()中调用getLayoutInflater()时出现StackOverflowError。(b/117894767, aosp/1258665) - 缩小了 Fragment 包含的 ProGuard 规则范围,以确保可以剥离未使用的 Fragment 类。(b/149665169)
- 修复了在使用遮蔽 Kotlin 属性名称的局部变量名称时,
UseRequireInsteadOfGetLint 检查中的误报。(b/149891163) FragmentContainerView不再因为在布局预览中使用错误的构造函数而抛出UnsupportedOperationException。(b/149707833)
1.2.2 版本
1.2.2 版本
2020 年 2 月 19 日
androidx.fragment:fragment:1.2.2、androidx.fragment:fragment-ktx:1.2.2 和 androidx.fragment:fragment-testing:1.2.2 已发布。1.2.2 版本包含这些提交。
新的 Lint 检查
- Lint 建议在
onCreateView()、onViewCreated()和onActivityCreated()中向OnBackPressedDispatcher调用时,使用viewLifecycleOwner作为LifecycleOwner。(b/142117657) - 添加了一个新的 Lint 检查,确认在使用
fragment-testing工件时,使用了正确的debugImplementation。(b/141500106) - Fragment 现在建议对所有包含
get和require等价 API 的 Fragment API,使用相关的require___()方法来获取更具描述性的错误消息,而不是使用checkNotNull(get___())、requireNonNull(get___())或get___()!!。(aosp/1202883)
Bug 修复
- 修复了 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.1、androidx.fragment:fragment-ktx:1.2.1 和 androidx.fragment:fragment-testing:1.2.1 已发布。1.2.1 版本包含这些提交。
错误修复
- 通过采用
Class实例(或 Kotlin 实化版本)的add和replace方法添加的 Fragment,现在其默认构造函数会被 ProGuard 保留。(b/148181315) FragmentStatePagerAdapter和FragmentPagerAdapter不再捕获在运行finishUpdate()时由FragmentManager抛出的异常。(aosp/1208711)- 修复了
FragmentManager.findFragment()不适用于通过<fragment>标签添加的 Fragment 的问题。(b/147784323) - 使用
<fragment>标签扩充的 Fragment 现在在布局中时,始终会在onCreate()之前接收对onInflate()的调用。(aosp/1215856) - 当 Activity 已经销毁时,在
FragmentManager实例上调用toString()不再抛出NullPointerException。(b/148189412)
依赖关系变更
- Fragment
1.2.1现在依赖于 Lifecycle ViewModel SavedState2.2.0。
版本 1.2.0
版本 1.2.0
2020 年 1 月 22 日
androidx.fragment:fragment:1.2.0、androidx.fragment:fragment-ktx:1.2.0 和 androidx.fragment:fragment-testing:1.2.0 已发布。1.2.0 版本包含这些提交。
自 1.1.0 以来的重要更改
- FragmentContainerView:
FragmentContainerView是强烈推荐用于动态添加 Fragment 的容器,取代了FrameLayout或其他布局的使用。它还支持与<fragment>标签相同的class、android:name和可选的android:tag,但使用常规的FragmentTransaction来添加此初始 Fragment,而不是使用<fragment>使用的自定义代码路径。 onDestroyView()时机:Fragment 现在等待退出动画、退出框架过渡和退出 AndroidX 过渡(使用 Transition1.3.0时)完成,然后再调用onDestroyView()。- 基于类的
add()和replace():在FragmentTransaction上添加了add()和replace()的新重载,它们采用Class<? extends Fragment>和可选的参数Bundle。这些方法使用您的FragmentFactory来构造要添加的 Fragment 实例。使用实化类型的 Kotlin 扩展(例如fragmentTransaction.replace<YourFragment>(R.id.container))也已添加到fragment-ktx中。 - 生命周期 ViewModel SavedState 集成:
SavedStateViewModelFactory现在是使用by viewModels()、by activityViewModels()、ViewModelProvider构造函数或带有 Fragment 的ViewModelProviders.of()时的默认工厂。 - 新的 Lint 检查:添加了一个新的 Lint 检查,确保您在从
onCreateView()、onViewCreated()或onActivityCreated()观察LiveData时使用getViewLifecycleOwner()。 getFragmentManager()弃用:Fragment 上的getFragmentManager()和requireFragmentManager()方法已被弃用,并替换为单个getParentFragmentManager()方法,该方法返回 Fragment 添加到的非 nullFragmentManager(您可以使用isAdded()来确定调用是否安全)。FragmentManager.enableDebugLogging()弃用:静态FragmentManager.enableDebugLogging方法已被弃用。FragmentManager现在尊重标记为FragmentManager的Log.isLoggable(),允许您启用DEBUG或VERBOSE日志记录,而无需重新编译您的应用。
已知问题
- 仅通过
FragmentContainerView上的class或android:name属性引用的 Fragment 不会自动被 ProGuard 保留,需要您为每个 Fragment 类手动添加 keep 规则。(b/142601969) - 当使用
FragmentContainerView在 XML 中使用class或android:name添加NavHostFragment时,您不能在 Activity 的onCreate()中使用findNavController()。(b/142847973)
1.2.0-rc05 版本
2020 年 1 月 8 日
androidx.fragment:fragment:1.2.0-rc05、androidx.fragment:fragment-ktx:1.2.0-rc05 和 androidx.fragment:fragment-testing:1.2.0-rc05 已发布。1.2.0-rc05 版本包含这些提交。
错误修复
- 修复了 Fragment
1.2.0-rc04中使用<fragment>标签时导致的在 Activity 销毁期间错误调用onViewCreated()的回归问题。(b/146290333) - 使用
<fragment>标签添加的 Fragment 现在即使仅在有时存在于布局中时(例如,仅在横向布局中),也能正确清除其非配置状态。因此,这些 Fragment 现在即使不在您的布局中也会正确移动到CREATED,而不是在被实例化但从未通过任何生命周期方法。(b/145769287)
1.2.0-rc04 版本
2019 年 12 月 18 日
androidx.fragment:fragment:1.2.0-rc04、androidx.fragment:fragment-ktx:1.2.0-rc04 和 androidx.fragment:fragment-testing:1.2.0-rc04 已发布。1.2.0-rc04 版本包含这些提交。
错误修复
- 调整了
TRANSIT_FRAGMENT_OPEN、TRANSIT_FRAGMENT_CLOSE和TRANSIT_FRAGMENT_FADE的动画,以避免视觉问题。(b/145468417)
版本 1.2.0-rc03
2019 年 12 月 4 日
androidx.fragment:fragment:1.2.0-rc03、androidx.fragment:fragment-ktx:1.2.0-rc03 和 androidx.fragment:fragment-testing:1.2.0-rc03 已发布。1.2.0-rc03 版本包含这些提交。
错误修复
- 修复了一个意外行为更改,即在 Fragment 的退出动画/过渡运行期间,已移除的 Fragment 仍由
findFragmentById()/findFragmentByTag()返回。(b/143982969, aosp/1167585) - 当包含的 Activity 调用
onSaveInstanceState()时,子 Fragment 现在在父 Fragment 之前被正确停止。(b/144380645) - 修复了在弹出隐藏的 Fragment 后视图被错误地标记为
INVISIBLE的问题。(b/70793925) - Fragment 共享元素过渡现在处理已旋转、缩放等的视图。(b/142835261)
文档更新
- 澄清了有关
setUserVisibleHint()的弃用文档。(b/143897055) - 改进了有关
setFragmentFactory()和getFragmentFactory()的文档,以更好地表明设置FragmentFactory也将影响子 FragmentManager。(aosp/1170095)
依赖关系变更
- Fragment 现在依赖于 Lifecycle
2.2.0-rc03、Lifecycle ViewModel SavedState1.0.0-rc03和 Activity1.1.0-rc03。
版本 1.2.0-rc02
2019 年 11 月 7 日
androidx.fragment:fragment:1.2.0-rc02、androidx.fragment:fragment-ktx:1.2.0-rc02 和 androidx.fragment:fragment-testing:1.2.0-rc02 已发布。1.2.0-rc02 版本包含这些提交。
错误修复
- 在使用 Kotlin 时,从
onCreateView()、onViewCreated()或onActivityCreated()观察LiveData时使用getViewLifecycleOwner()的 LintFix(在 Fragment1.2.0-rc01中引入)现在使用 Kotlin 属性访问语法viewLifecycleOwner而不是getViewLifecycleOwner()。(aosp/1143821)
版本 1.2.0-rc01
2019 年 10 月 23 日
androidx.fragment:fragment:1.2.0-rc01、androidx.fragment:fragment-ktx:1.2.0-rc01 和 androidx.fragment:fragment-testing:1.2.0-rc01 已发布。1.2.0-rc01 版本包含这些提交。
新功能
FragmentContainerView现在支持class属性以及android:name,反映了<fragment>标签的功能。(b/142722242)- 添加了一个新的 Lint 检查,确保您在从
onCreateView()、onViewCreated()或onActivityCreated()观察LiveData时使用getViewLifecycleOwner()。(b/137122478)
错误修复
DialogFragment上的onDismiss和onCancel回调现在保证传递给它们的DialogInterface是非 null 的,并且在执行它们时getDialog()返回非 null。(b/141974033)FragmentContainerView现在将通过class或android:name定义的 Fragment 作为扩充的一部分添加,确保findFragmentById()和findFragmentByTag()在此之后立即生效。(b/142520327)- 修复了
FragmentContainerView中由于状态保存而导致的IllegalStateException。(b/142580713) - 修复了
FragmentContainerView类被混淆时在FragmentContainerView中抛出的UnsupportedOperationException。(b/142657034)
已知问题
- 仅通过
FragmentContainerView上的class或android:name属性引用的 Fragment 不会自动被 ProGuard 保留,需要您为每个 Fragment 类手动添加 keep 规则。我们已禁用建议移动到FragmentContainerView的 Lint 规则,直到通过aapt2解决此问题。(b/142601969)
版本 1.2.0-beta02
2019 年 10 月 11 日
androidx.fragment:fragment:1.2.0-beta02、androidx.fragment:fragment-ktx:1.2.0-beta02 和 androidx.fragment:fragment-testing:1.2.0-beta02 已发布。1.2.0-beta02 版本包含这些提交。
错误修复
- 修复了 Fragment 的
onInflate()没有从FragmentContainerView接收正确属性的问题,破坏了诸如NavHostFragment之类的情况。(b/142421837)
版本 1.2.0-beta01
2019 年 10 月 9 日
androidx.fragment:fragment:1.2.0-beta01、androidx.fragment:fragment-ktx:1.2.0-beta01 和 androidx.fragment:fragment-testing:1.2.0-beta01 已发布。1.2.0-beta01 版本包含这些提交。
新功能
FragmentContainerView添加了对添加初始 Fragment 的支持,并增加了对android:name和可选android:tagXML 属性的支持。与<fragment>标签不同,FragmentContainerView在底层使用常规的FragmentTransaction来添加初始 Fragment,从而允许对FragmentContainerView进行进一步的FragmentTransaction操作,并使布局能够使用 View Binding。(b/139830628, b/141177981)- Fragment 现在包含一个 Lint 警告,提供了一个将
<fragment>替换为FragmentContainerView的快速修复。(b/139830056)
错误修复
- 修复了使用
androidx.transition时出现的ClassCastException。(b/140680619) - 在使用 Transition
1.3.0-beta01时,Fragment 现在等待androidx.transition过渡(除了框架过渡和动画,分别在 Fragment1.2.0-alpha03和 Fragment1.2.0-alpha02中修复)完成,然后才调度onDestroyView()。(aosp/1119841) - 在使用 Transition
1.3.0-beta01时,Fragment 现在可以在同一个容器上启动新的过渡/动画之前,正确取消androidx.transition过渡。(aosp/1119841) - 修复了 API 17 及更低版本在使用
FragmentContainerView时对 Fragment 的根视图使用androidx.transition过渡时出现的问题。(b/140361893) fragment-testing工件现在依赖于 AndroidX Test1.2.0,修复了与最新 Espresso 3.2.0 的不兼容性。(b/139100149)- 删除了
FragmentManager中对Log.w的使用。(aosp/1126468)
已知问题
- Fragment 的
onInflate()没有从FragmentContainerView接收正确属性,破坏了诸如NavHostFragment之类的情况。(b/142421837)
版本 1.2.0-alpha04
2019 年 9 月 18 日
androidx.fragment:fragment:1.2.0-alpha04、androidx.fragment-ktx:example:1.2.0-alpha04 和 androidx.fragment:fragment-testing:1.2.0-alpha04 已发布。1.2.0-alpha04 版本包含这些提交。
API 变更
Fragment上的getFragmentManager()和requireFragmentManager()方法已被弃用,并替换为单个getParentFragmentManager()方法,该方法返回 Fragment 添加到的非 nullFragmentManager(您可以使用isAdded()来确定调用是否安全)。(b/140574496)- 静态
FragmentManager.enableDebugLogging方法已被弃用。FragmentManager现在尊重标记为FragmentManager的Log.isLoggable(),允许您启用DEBUG或VERBOSE日志记录,而无需重新编译您的应用。(aosp/1116591)
错误修复
- Fragment 现在在其他 Fragment 的退出动画运行时被正确销毁。(b/140574199)
- 修复了 Fragment 在以前不调用
Activity.findViewById()的地方调用它的问题。(aosp/1116431)
版本 1.2.0-alpha03
2019 年 9 月 5 日
androidx.fragment:fragment:1.2.0-alpha03、androidx.fragment:fragment-ktx:1.2.0-alpha03 和 androidx.fragment:fragment-testing:1.2.0-alpha03 已发布。此版本中包含的提交可以在此处找到。
API 变更
FragmentContainerView现在是final的。(b/140133091)
错误修复
FragmentContainerView现在在从回退栈弹出 Fragment 时正确反转绘制顺序。(b/139104187)- 修复了在同时弹出 Fragment 和添加新 Fragment 时运行错误动画的问题。(b/111659726)
- Fragment 现在等待过渡(除了在 Fragment
1.2.0-alpha02中修复的动画)完成,然后再调度onDestroyView()。(b/138741697)
版本 1.2.0-alpha02
2019 年 8 月 7 日
androidx.fragment:fragment:1.2.0-alpha02、androidx.fragment:fragment-ktx:1.2.0-alpha02 和 androidx.fragment:fragment-testing:11.2.0-alpha02 已发布。此版本中包含的提交可以在此处找到。
新功能
SavedStateViewModelFactory现在是使用by viewModels()、by activityViewModels()、ViewModelProvider构造函数或带有Fragment的ViewModelProviders.of()时的默认工厂。(b/135716331)- 在
FragmentTransaction上使用setTransition时,使用TRANSIT_FRAGMENT_OPEN、TRANSIT_FRAGMENT_CLOSE、TRANSIT_FRAGMENT_FADE时的默认动画已更新,以匹配 Android 10 设备上 Activity 使用的动画。(aosp/1012812, aosp/1014730)
API 变更
- 引入了
FragmentContainerView作为强烈推荐用于动态添加 Fragment 的容器,取代了FrameLayout等的使用,因为它修复了动画 z-ordering 问题和调度到 Fragment 的窗口插入。(b/37036000, aosp/985243, b/136494650) - 添加了一个静态
FragmentManager.findFragment(View)方法,用于从由 Fragment 扩充的视图中检索包含的 Fragment。Kotlin 扩展也可在fragment-ktx中使用。(aosp/1090757) - 在
FragmentTransaction上添加了add()和replace()的新重载,它们采用Class<? extends Fragment>和可选的参数Bundle。这些方法使用您的FragmentFactory来构造要添加的 Fragment 实例。使用实化类型的 Kotlin 扩展(例如fragmentTransaction.replace<YourFragment>(R.id.container))也已添加到fragment-ktx中。(b/126124987) @MainThread注解已添加到 Fragment 生命周期回调中。(b/127272564)FragmentTransaction和FragmentManager.BackStackEntry上与面包屑标题相关的 API 已弃用。(b/138252944)FragmentTransaction上的setTransitionStyle方法已弃用。(aosp/1011537)FragmentManager中的许多方法不再是abstract(抽象)方法。FragmentManager本身仍为abstract,不应直接实例化或扩展;您应继续仅从getSupportFragmentManager()、getChildFragmentManager()等获取现有实例。
错误修复
- 来自 Fragment
1.1.0-rc04:Fragment 现在可以正确取消已弹出 Fragment 的延迟转换。(b/138251858) - 来自 Fragment
1.1.0-rc03:修复了多次调用带有超时的postponeEnterTransition()时不会取消之前超时的问题。(b/137797118) - 来自 Fragment
1.1.0-rc02:修复了在FragmentPagerAdapter和FragmentStatePagerAdapter中移除当前项时导致的崩溃问题。(b/137209870) - Fragment 现在会等待动画完成,然后再分发
onDestroyView()。(b/136110528) - 在为父 Fragment 设置动画时,子 Fragment 及其后代的 Fragment 动画现在可被正确处理。(b/116675313)
- 修复了在使用共享元素转换并结合弹出 (pop) 和添加 (add) 操作时出现的
NullPointerException。(b/120507394) - 添加了针对在 Robolectric 测试中使用
FragmentPagerAdapter和FragmentStatePagerAdapter时出现IllegalStateException的权宜之计。(b/137201343)
版本 1.2.0-alpha01
2019 年 7 月 2 日
androidx.fragment:fragment:1.2.0-alpha01、androidx.fragment:fragment-ktx:1.2.0-alpha01 和 androidx.fragment:fragment-testing:1.2.0-alpha01 已发布。此版本包含的提交记录可以在此处找到。
新功能
FragmentManager现在会在附加 Fragment 的视图之后,并在调用onViewCreated()之前直接调用requestApplyInsets(),确保您的视图始终具有正确的内边距 (insets)。(b/135945162)
错误修复
- 修复了在
replace()之前使用setPrimaryNavigationFragment()的FragmentTransaction弹出时发生的NullPointerException。(b/134673465)
版本 1.1.0
版本 1.1.0
2019 年 9 月 5 日
androidx.fragment:fragment:1.1.0、androidx.fragment:fragment-ktx:1.1.0 和 androidx.fragment:fragment-testing:1.1.0 已发布。此版本包含的提交记录可以在此处找到。
自 1.0.0 版本以来的重要变更
- fragment-testing:
fragment-testing工件提供了一个FragmentScenario类,用于隔离测试 Fragment。有关更多详细信息,请参阅测试您的应用 Fragment 文档。 - FragmentFactory:您现在可以在
FragmentManager上设置FragmentFactory以管理 Fragment 实例的创建,从而消除了必须拥有无参构造函数的严格要求。 - ViewModels 的 Kotlin 属性委托:
fragment-ktx工件现在包含两个 Kotlin 属性委托:用于访问与单个 Fragment 关联的 ViewModel 的by viewModels(),以及用于访问作用域限定为 Activity 的 ViewModel 的by activityViewModels()。 - 最大生命周期 (Max Lifecycle):您现在可以通过在
FragmentTransaction上调用setMaxLifecycle()来设置 Fragment 的最大生命周期状态。这取代了现已弃用的setUserVisibleHint()。FragmentPagerAdapter和FragmentStatePagerAdapter提供了新的构造函数,允许您切换到此新行为。 - FragmentActivity 布局 ID 构造函数:
FragmentActivity的子类现在可以选择调用一个接受R.layoutID 的FragmentActivity构造函数,该 ID 表示应被设置为内容视图的布局,作为在onCreate()中调用setContentView()的替代方法。这不会改变您的子类必须拥有无参构造函数的要求。 - Fragment 布局 ID 构造函数:
Fragment的子类现在可以选择调用一个接受R.layoutID 的Fragment构造函数,该 ID 表示应为此 Fragment 使用的布局,作为覆盖onCreateView()的替代方法。可以在onViewCreated()中配置扩充后的布局。 - 带超时的延迟处理 (Postpone with a timeout):添加了一个新的
postponeEnterTransition()重载方法,该方法接受一个超时参数。
版本 1.1.0-rc04
2019 年 8 月 7 日
androidx.fragment:fragment:1.1.0-rc04、androidx.fragment:fragment-ktx:1.1.0-rc04 和 androidx.fragment:fragment-testing:1.1.0-rc04 已发布。此版本包含的提交记录可以在此处找到。
错误修复
- Fragment 现在可以正确取消已弹出 Fragment 的延迟转换。(b/138251858)
版本 1.1.0-rc03
2019 年 7 月 19 日
androidx.fragment:fragment:1.1.0-rc03、androidx.fragment:fragment-ktx:1.1.0-rc03 和 androidx.fragment:fragment-testing:1.1.0-rc03 已发布。此版本包含的提交记录可以在此处找到。
错误修复
- 修复了多次调用带有超时的
postponeEnterTransition()时不会取消之前超时的问题。(b/137797118)
版本 1.1.0-rc02
2019 年 7 月 17 日
androidx.fragment:fragment:1.1.0-rc02、androidx.fragment:fragment-ktx:1.1.0-rc02 和 androidx.fragment-testing:fragment:1.1.0-rc02 已发布。此版本包含的提交记录可以在此处找到。
错误修复
- 修复了在
FragmentPagerAdapter和FragmentStatePagerAdapter中移除当前项时导致的崩溃问题。(b/137209870)
版本 1.1.0-rc01
2019 年 7 月 2 日
androidx.fragment:fragment:1.1.0-rc01、androidx.fragment:fragment-ktx:1.1.0-rc01 和 androidx.fragment:fragment-testing:1.1.0-rc01 已发布。此版本包含的提交记录可以在此处找到。
错误修复
- Fragment 现在可以在转换运行期间使用
show()或hide()操作时,正确更新其可见性。(b/133385058) - 修复了在
replace()之前使用setPrimaryNavigationFragment()的FragmentTransaction弹出时发生的NullPointerException。(b/134673465)
版本 1.1.0-beta01
2019 年 6 月 5 日
androidx.fragment:fragment:1.1.0-beta01、androidx.fragment:fragment-ktx:1.1.0-beta01 和 androidx.fragment:fragment-testing:1.1.0-beta01 已发布。此版本包含的提交记录可以在此处找到。
错误修复
- 嵌套 Fragment 的
androidx.lifecycle.Lifecycle回调(特别是与STARTED、RESUMED、PAUSED、STOPPED和DESTROYED相关的回调)现在已正确嵌套。(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-alpha09、androidx.fragment:fragment-ktx:1.1.0-alpha09 和 androidx.fragment:fragment-testing:1.1.0-alpha09 已发布。此版本包含的提交记录可以在此处找到。
API 变更
- 当主要导航 Fragment 发生更改时,Fragment 现在会收到对新的
onPrimaryNavigationFragmentChanged(boolean)方法的回调。aosp/960857
错误修复
- 当父 Fragment 被移除时,由子 Fragment 扩充的菜单项现在会被正确移除。b/131581013
版本 1.1.0-alpha08
2019 年 5 月 7 日
androidx.fragment:fragment:1.1.0-alpha08、androidx.fragment:fragment-ktx:1.1.0-alpha08 和 androidx.fragment:fragment-testing:1.1.0-alpha08 已发布。此版本包含的提交记录可以在此处找到。
此版本与 Preferences 1.1.0-alpha01 到 1.1.0-alpha04 不兼容。使用此版本的 Fragment 时,请升级到 Preferences 1.1.0-alpha05。
新功能
- 添加了一个新的
postponeEnterTransition()重载方法,该方法接受一个超时参数,超时后 Fragment 将自动调用startPostponedEnterTransition()b/120803208
API 变更
- 破坏性变更:此前已弃用的、接受
Bundle的FragmentFactoryinstantiate方法已被移除。aosp/953856 - 破坏性变更:
FragmentPagerAdapter和FragmentStatePagerAdapter中的RESUME_ONLY_CURRENT_FRAGMENT和USE_SET_USER_VISIBLE_HINT常量已分别重命名为BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT和BEHAVIOR_SET_USER_VISIBLE_HINT。aosp/954782
错误修复
- 生命周期已通过
setMaxLifecycle()限制的 Fragment 在达到最终状态之前不再会被恢复 (resumed)。b/131557151 - 当使用
setMaxLifecycle(Lifecycle.State.CREATED)时,Fragment 的视图将被正确销毁。aosp/954180
版本 1.1.0-alpha07
2019 年 4 月 25 日
androidx.fragment:fragment:1.1.0-alpha07、androidx.fragment:fragment-ktx:1.1.0-alpha07 和 androidx.fragment:fragment-testing:1.1.0-alpha07 已发布。此版本包含的提交记录可以在此处找到。
新功能
- 您现在可以通过在
FragmentTransaction上调用setMaxLifecycle()来设置 Fragment 的最大生命周期状态。这取代了现已弃用的setUserVisibleHint()。FragmentPagerAdapter和FragmentStatePagerAdapter提供了新的构造函数,允许您切换到此新行为。(b/129780800)
API 变更
FragmentScenario上的moveToState(STARTED)现在只能在 API 24+ 的设备上调用。(b/129880016)
行为变更
- 作为 (b/129907905) 的结果,后台堆栈上的 Fragment 在宿主 Activity 重新创建时将不会收到
onCreateView()的回调。onCreateView()现在仅在 Fragment 变得可见(即弹出后台堆栈)时才会被调用。
错误修复
- 修复了在使用 XML 中的
<fragment>标签以及FragmentActivity或AppCompatActivity的contentLayoutId构造函数时出现的问题。(b/129907905) - 纠正了一个问题,即后台堆栈上的 Fragment 在配置更改后不会至少移动到
CREATED状态,导致 ViewModel 和保留的子 Fragment 无法正确处理。(b/129593351) - 修复了由于保存实例状态后保留的 Fragment 不同步而导致的
restoreSaveState崩溃问题。(b/130433793) (aosp/947824) - 修复了添加了 Fragment 生命周期支持的
OnBackPressedCallback在FragmentManager拥有后台堆栈时不会被调用的问题。有关更多详细信息,请参阅 androidx.activity 1.0.0-alpha07。(aosp/948209) - Fragment 不再为动画强制执行
LAYER_TYPE_HARDWARE。如果您特别需要硬件层动画,请将其作为动画的一部分进行设置。(b/129486478)
版本 1.1.0-alpha06
2019 年 4 月 3 日
androidx.fragment:fragment:1.1.0-alpha06、androidx.fragment:fragment-ktx:1.1.0-alpha06 和 androidx.fragment:fragment-testing:1.1.0-alpha06 已发布。此版本包含的提交记录可以在此处找到。
新功能
- FragmentManager 抛出的异常现在在消息中包含了 Fragment 的名称。(b/67759402)
API 变更
Fragment和FragmentActivity现在包含第二个接受@LayoutRes int的构造函数,它取代了之前用@ContentView注解类的行为。这种方法在应用和库模块中都适用。(b/128352521)FragmentActivity的onActivityResult()现在已被正确标记为@CallSuper。(b/127971684)- FragmentFactory 中接受参数 Bundle 的
instantiate方法已被弃用,应用应使用新的不带 Bundle 的instantiate重载方法。(b/128836103) FragmentScenario方法现在已正确标注为@StyleRes。(aosp/924193)FragmentTabHost已弃用。(b/127971835)FragmentActivity的getThemedContext()已被移除。(aosp/934078)
错误修复
- 修复了 1.1.0-alpha05 中的回归问题,该问题导致传入的 Fragment 在屏幕上闪烁。(b/129405432)
- 修复了在 popBackStack+replace+popBackStack 一系列操作后主要导航 Fragment 会丢失的问题。(b/124332597)
- 修复了在恢复 Fragment 状态时使用 Activity 的
@ContentView构造函数时出现的问题。(b/127313094) - 修正了在用尚未附加到 FragmentManager 的 Fragment 替换现有目标 Fragment 时
setTargetFragment()的逻辑。(aosp/932156)
版本 1.1.0-alpha05
2019 年 3 月 13 日
androidx.fragment:fragment:1.1.0-alpha05、androidx.fragment:fragment-ktx:1.1.0-alpha05 和 androidx.fragment:fragment-testing:1.1.0-alpha05 已发布。此版本包含的完整提交记录可以在此处找到。
新功能
@ContentView注解查找现在已缓存 (b/123709449)
行为变更
- 对附加到不同 FragmentManager 的 Fragment 调用
remove()、hide()、show()、detach()和setPrimaryNavigationFragment()现在会抛出IllegalStateException,而不是静默失败 (aosp/904301)
错误修复
FragmentActivity的onNewIntent现在已被正确标记为@CallSuper(b/124120586)- 修复了使用
getDialog().dismiss()或getDialog().cancel()时DialogFragment的onDismiss()可能被调用两次的问题 (b/126563750)
版本 1.1.0-alpha04
2019 年 2 月 7 日
androidx.fragment:fragment 1.1.0-alpha04、androidx.fragment:fragment-ktx 1.1.0-alpha04 和 androidx.fragment:fragment-testing 1.1.0-alpha04 已发布。
新功能
- 增加了对
@ContentView类注解的支持,允许您指明应扩充哪个布局 XML 文件,作为覆盖onCreateView()的替代方法。建议在onViewCreated()中执行与视图相关的工作。(aosp/837619) fragment-testing现在依赖于稳定版androidx.test:core-ktx1.1.0 (b/121209673)- 您现在可以在
FragmentScenario中使用openActionBarOverflowOrOptionsMenu来测试 Fragment 托管的选项菜单 (b/121126668)
API 变更
- 添加了一个
requireArguments()方法,它返回一个@NonNull Bundle或者抛出IllegalStateException(b/121196360) - 添加了一条说明:
getLifecycle()、getViewLifecycleOwner()和getViewLifecycleOwnerLiveData()不应被覆盖,并将于未来版本中成为 final。如果您目前正在覆盖此方法,请提交功能请求。(aosp/880714) - 添加了一条说明:
getViewModelStore()不应被覆盖,并将于未来版本中成为 final。如果您目前正在覆盖此方法,请提交功能请求。(aosp/880713) - 修复了与之前 Fragment 版本之间的二进制兼容性问题。(aosp/887877) (aosp/889834)
错误修复
- 当您向
setTargetFragment()传递null时,目标 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 activityViewModelsKotlin 属性委托,用于获取与包含 Activity 关联的 ViewModel [b/119050253] by viewModelsKotlin 属性委托已扩展,现在接受一个可选的 lambda 方法来获取ViewModelStoreOwner,允许您通过如val viewModel: MyViewModel by viewModels(::requireParentFragment)这样的代码传入父 Fragment 或其他自定义ViewModelStoreOwner[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 实例。 - 添加了一个用于从 Fragment 检索 ViewModel 的新
by viewModels()Kotlin 属性委托。 - 待处理的输入事件(例如点击)现在会在 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。