Fragment
最新更新 | 稳定版 | 候选版本 | 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
异常。(I3387d,b/342419080)
1.8.4版本
2024年10月2日
发布了androidx.fragment:fragment-*:1.8.4
。1.8.4版本包含这些提交。
错误修复
- 修复了一个问题:使用Androidx Transitions时,快速按下系统返回按钮或快速执行手势返回会导致Fragment崩溃。(Ibc038,b/364804225)
- 修复了Fragment中的一个问题:中断预测返回手势会使FragmentManager进入未定义状态,甚至可能显示错误的Fragment。(If82e2,b/338624457)
- 修复了在动态交换
AndroidFragment
实例使用的类时,AndroidFragment
中出现的UninitializedPropertyAccessException
异常。(I12dea)
1.8.3版本
2024年9月4日
发布了androidx.fragment:fragment-*:1.8.3
。1.8.3版本包含这些提交。
错误修复
FragmentManager
现在在处理预测返回手势时会正确考虑挂起的操作。这应该可以确保执行系统返回不再导致IndexOutOfBoundsException
异常。(I9ba32,b/342316801)- 如果在包含Activity/Fragment的状态已保存时将
AndroidFragment
添加到组合中,它将不再崩溃。(I985e9,b/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
状态。(If6b83,b/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)的直接替代。FragmentManager
的OnBackStackChangedListener
接口上的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
回调的时间更加一致。(I5ebfb,b/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的事务。这修复了一个问题:取消部分可搜索的事务会导致黑屏。(I43037,b/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状态的保存和恢复。这可以用作AndroidViewBindingComposable
的直接替代。(b/312895363,Icf841)
文档更改
- 更新了
OnBackStackChangedListener
API的文档,说明了它们的调用时间和使用方法。(I0bfd9)
依赖项更新
- Fragment现在依赖于Profile Installer 1.3.1。
1.7版本
1.7.1版本
2024年5月14日
androidx.fragment:fragment-*:1.7.1
is released. 1.7.1版本包含这些提交。
错误修复
- 预测返回现在仅适用于所有Fragment都具有Animator或可搜索Androidx Transition的事务。这修复了一个问题:取消部分可搜索的事务会导致白屏。(I43037,b/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版本包含这些提交。
依赖项更新
- 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)
错误修复
- 修复了一个问题,即在对不在容器中的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版本包含这些提交。
错误修复
- 修复了先前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-alpha09
。1.7.0-alpha09版本包含这些提交。
Fragment Compose构件
创建了一个新的fragment-compose
构件,专注于支持正在从基于Fragment的架构迁移到完全基于Compose的架构的应用。
此新构件提供的第一个特性是在Fragment
上添加了一个content
扩展方法,旨在简化在单个Fragment的UI中使用Compose,它会为您创建一个ComposeView
并设置正确的ViewCompositionStrategy
。(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)
已知问题
- 当对
Animator
或AndroidX Transition使用Fragment的预测后退支持时,如果从未通过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
1.5.0-alpha06
中修复。(I04356)
1.7.0-alpha07 版本
2023年11月29日
已发布androidx.fragment:fragment-*:1.7.0-alpha07
。1.7.0-alpha07版本包含这些提交。
错误修复
- 修复了由设置共享元素转换并同时未能设置进入/退出转换导致的
NullPointerException
。(I8472b) - 来自Fragment
1.6.2
:当FragmentContainerView
的Fragment膨胀时,其状态(例如FragmentManager
、Host和id)现在可在onInflate
回调中访问。(I1e44c,b/307427423) - 来自Fragment
1.6.2
:当使用clearBackStack
删除一组Fragment时,现在当父Fragment的ViewModels
被清除时,任何嵌套Fragment的ViewModel
也将被清除。(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
中添加的新animateToStart
API。
1.7.0-alpha05 版本
2023年9月20日
已发布androidx.fragment:fragment-*:1.7.0-alpha05
。1.7.0-alpha05版本包含这些提交。
新功能
- Fragments现在在使用Androidx Transitions时提供对预测后退的支持。这允许您使用后退手势在决定通过完成的手势提交或取消事务之前,使用自定义Androidx Transition跳转到上一个Fragment。您必须依赖于Transition
1.5.0-alpha03
版本才能启用此功能。(Ib49b4,b/285175724)
已知问题
- 目前存在一个问题,即在您取消一次带有转换的后退手势后,下次启动后退手势时,它将无法运行转换,从而导致出现空白屏幕。这可能是由转换库中的问题引起的。(b/300157785)。如果您遇到此问题,请针对Fragment提交一个问题,并提供一个可以重现您问题的示例项目。您可以通过在Activity的
onCreate()
中使用FragmentManager.enabledPredictiveBack(false)
来禁用预测后退。
1.7.0-alpha04 版本
2023年9月6日
已发布androidx.fragment:fragment-*:1.7.0-alpha04
。1.7.0-alpha04版本包含这些提交。
错误修复
- 修复了取消预测后退手势时Fragment无法达到正确生命周期状态的问题。(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版本包含这些提交。
错误修复
- 修复了在使用预测后退时Fragment出现的一个问题,该问题导致在使用系统后退(通过3键导航或预测后退手势)时跳过Fragment管理器后退栈中的第一个Fragment并完成Activity。(I0664b,b/295231788)
1.7.0-alpha02 版本
2023年8月9日
已发布androidx.fragment:fragment-*:1.7.0-alpha02
。1.7.0-alpha02版本包含这些提交。
错误修复
- 在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 后,通过完成手势来决定是否提交事务或取消。
1.6 版本
1.6.2 版本
2023 年 11 月 1 日
androidx.fragment:fragment-*:1.6.2
已发布。1.6.2 版本包含这些提交。
错误修复
- 当
FragmentContainerView
的Fragment膨胀时,其状态(例如FragmentManager
、Host 和 id)现在可在onInflate
回调中访问。(I1e44c,b/307427423) - 使用
clearBackStack
移除一组 Fragment 时,当父 Fragment 的ViewModel
被清除时,任何嵌套 Fragment 的ViewModel
现在也会被清除。(I6d83c,b/296173018)
1.6.1 版本
2023 年 7 月 26 日
androidx.fragment:fragment-*:1.6.1
已发布。1.6.1 版本包含这些提交。
错误修复
- 修复了一个问题:即使 Fragment 实例已返回到
RESUMED
状态,在 Activity 停止但未销毁时存储的保存状态也会被错误地缓存。如果该 Fragment 实例在使用多个返回堆栈 API 保存和恢复该 Fragment 时位于返回堆栈中,则会导致该缓存状态被重复使用。(I71288,b/246289075)
依赖项更新
- Fragment 现在依赖于Activity 1.7.2。这修复了一个问题:Kotlin 用户无法扩展
ComponentDialog
而无需显式依赖 Activity。(b/287509323)
1.6.0 版本
2023年6月7日
androidx.fragment:fragment-*:1.6.0
已发布。1.6.0 版本包含这些提交。
自 1.5.0 版本以来的重要更改
Fragment
的保存状态已完全拆分为私有库状态(自定义Parcelable
类)和开发者提供的状态,后者现在始终存储在一个Bundle
中,允许精确确定 Fragment 状态的来源。FragmentManager.OnBackStackChangedListener
接口已扩展了onBackStackChangeStarted
和onBackStackChangeCommitted
两个附加回调,分别在每个Fragment
添加到或从 Fragment 返回堆栈中移除之前和事务提交之后调用。FragmentStrictMode
添加了一个新的WrongNestedHierarchyViolation
,用于检测子 Fragment 是否嵌套在其父级的 View 层次结构中,但未添加到父级的childFragmentManager
中。- 采用
Intent
或IntentSender
的Fragment
和FragmentManager
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-testing
和androidx.test
之间版本差异造成的冲突。
1.6.0-rc01 版本
2023 年 5 月 10 日
androidx.fragment:fragment-*:1.6.0-rc01
已发布。1.6.0-rc01 版本包含这些提交。
错误修复
- 修复了一个问题,该问题会导致在连续发出多个
startActivityForResult
请求时,ActivityResult
以不正确的请求代码发送。(If0b9d,b/249519359) - 修复了一个问题,如果
onBackStackChangeListener
回调与确实更改返回堆栈的事务混合在一起,则会为实际上未更改返回堆栈的事务调度这些回调。(I0eb5c,b/279306628)
1.6.0-beta01 版本
2023 年 4 月 19 日
androidx.fragment:fragment-*:1.6.0-beta01
已发布。1.6.0-beta01 版本包含这些提交。
错误修复
- 使用带有超时的
postponeEnterTransition
,然后替换延迟的 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)
错误修复
- 修复了
FragmentManager
中的一个错误,该错误在同一帧中保存和恢复可能会导致崩溃。(Ib36af,b/246519668) OnBackStackChangedListener
的onBackStackChangeStarted
和onBackStackChangeCommitted
回调现在仅在FragmentManager
返回堆栈更改时才执行。(I66055,b/274788957)
1.6.0-alpha08 版本
2023 年 3 月 22 日
androidx.fragment:fragment-*:1.6.0-alpha08
已发布。1.6.0-alpha08 版本包含这些提交。
行为变更
OnBackStackChangedListener.onBackStackChangeCommited
回调的时机已调整为在执行 Fragment 操作之前执行。这确保回调永远不会传递已分离的 Fragment。(I66a76,b/273568280)
错误修复
- 来自Fragment
1.5.6
:修复了一个问题,即如果Lifecycle
已经STARTED
并且结果已可用,则在setFragmentResultListener
内调用clearFragmentResultListener
将不起作用。(If7458)
依赖项更新
- Fragment 现在依赖于Lifecycle
2.6.1
。(586fe7) - Fragment 现在依赖于SavedState
1.2.1
。(078e4e) - Fragment 现在依赖于ProfileInstaller
1.3.0
。(3fc05b)
1.6.0-alpha07 版本
2023 年 3 月 8 日
androidx.fragment:fragment-*:1.6.0-alpha07
已发布。1.6.0-alpha07 版本包含这些提交。
错误修复
- 来自Fragment
1.5.6
:修复了一个问题,即无论 Fragment 是否添加了菜单项,移除任何 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
和FragmentManager
API 使用@NonNull
进行正确注释,以防止传入空值,因为空值总是会立即使这些方法调用的相应 Android 框架 API 崩溃。(I06fd4)
1.6.0-alpha04 版本
2022 年 12 月 7 日
androidx.fragment:fragment-*:1.6.0-alpha04
已发布。1.6.0-alpha04 版本包含以下提交。
新功能
FragmentStrictMode
添加了一个新的WrongNestedHierarchyViolation
,用于检测子 Fragment 是否嵌套在其父级的 View 层次结构中,但未添加到父级的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)
错误修复
- 来自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)
错误修复
- 修复了新提供程序回调接口(
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 版本包含以下提交。
错误修复
- 来自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)
错误修复
- 来自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 版本包含以下提交。
错误修复
- 使用带有超时的
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 版本包含以下提交。
错误修复
- 修复了一个问题,即无论 Fragment 是否添加了菜单项,移除任何 Fragment 都会使 Activity 的菜单失效。(50f098,b/244336571)
- 修复了一个问题,即如果
Lifecycle
已经STARTED
并且结果已经可用,则在setFragmentResultListener
内调用clearFragmentResultListener
将不起作用。(If7458)
1.5.5 版本
2022 年 12 月 7 日
androidx.fragment:fragment:1.5.5
、androidx.fragment:fragment-ktx:1.5.5
和 androidx.fragment:fragment-testing:1.5.5
已发布。1.5.5 版本包含以下提交。
错误修复
- Fragment 将不再错误地将
ViewModel
状态保存为视图注册表保存状态的一部分。(I10d2b,b/253546214)
1.5.4 版本
2022 年 10 月 24 日
androidx.fragment:fragment:1.5.4
、androidx.fragment:fragment-ktx:1.5.4
和 androidx.fragment:fragment-testing:1.5.4
已发布。1.5.4 版本包含以下提交。
错误修复
- 修复了一个错误,即使用自定义
FragmentController
和未实现提供程序回调接口(OnConfigurationChangedProvider
、OnMultiWindowModeChangedProvider
、OnTrimMemoryProvider
、OnPictureInPictureModeChangedProvider
)的主机并调用其已弃用的分派函数将无法分派到子 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 版本包含以下提交。
错误修复
- 修复了一个错误,该错误导致回退栈上的 Fragment 获取
onMultiWindowModeChanged()
、onPictureInPictureModeChanged()
、onLowMemory()
和onConfigurationChanged()
回调。(I34581,I8dfe6,b/242570955) - 嵌套的子片段将不再接收多个
onMultiWindowModeChanged()
、onPictureInPictureModeChanged()
、onLowMemory()
或onConfigurationChanged()
回调。(I690b3,Id0096,If9d6b,I2cba2)
1.5.2版本
2022年8月10日
androidx.fragment:fragment:1.5.2
、androidx.fragment:fragment-ktx:1.5.2
和androidx.fragment:fragment-testing:1.5.2
已发布。1.5.2版本包含这些提交。
错误修复
- 修复了同时执行
popBackStack()
和replace()
事务可能导致退出片段运行错误的Animation
/Animator
的问题。(Ib1c07,b/214835303)
1.5.1版本
2022 年 7 月 27 日
androidx.fragment:fragment:1.5.1
、androidx.fragment:fragment-ktx:1.5.1
和androidx.fragment:fragment-testing:1.5.1
已发布。1.5.1版本包含这些提交。
错误修复
- 修复了
DialogFragmentCallbacksDetector
中的一个回归问题,该问题会导致使用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()
返回的默认对话框。 - 保存实例状态重构 - 片段已开始更改保存实例状态的方式。这是为了帮助清楚地识别片段中已保存的状态以及状态的来源。当前更改包括:
FragmentManager
现在将其保存的实例状态保存到Bundle
中,而不是直接保存到自定义Parcelable
中。- 通过
Fragment Result APIs
设置但尚未传递的结果现在与FragmentManager
的内部状态分开保存。 - 与每个单独片段关联的状态现在与
FragmentManager
的内部状态分开保存,因此您可以将与单个片段关联的已保存状态量与其在Fragment
调试日志中存在的唯一ID关联起来。
其他更改
FragmentStrictMode
现在允许私有的第三方片段通过使用带类名的allowViolation()
来绕过特定的违规惩罚。- 提供菜单到活动
ActionBar
的Fragment API已弃用。Activity1.4.0
中添加的MenuHost
和MenuProvider
API提供了一个可测试的、生命周期感知的等效API界面,片段应该使用该界面。
1.5.0-rc01版本
2022年5月11日
androidx.fragment:fragment:1.5.0-rc01
、androidx.fragment:fragment-ktx:1.5.0-rc01
和androidx.fragment:fragment-testing:1.5.0-rc01
已发布。1.5.0-rc01版本包含这些提交。
保存实例状态重构
- 与每个单独片段关联的状态现在与
FragmentManager
的内部状态分开保存,因此您可以将与单个片段关联的已保存状态量与其在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
中。这是提高对片段实际保存内容透明度的第一步。(I93807,b/207158202)- 通过Fragment Result APIs设置但尚未传递的结果现在与
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()
已弃用。要管理菜单及其菜单项,应改用新的菜单API,如Fragment1.5.0-alpha04
发行说明中所述。(I7b4b4,b/226438239)
1.5.0-alpha04版本
2022年3月23日
androidx.fragment:fragment:1.5.0-alpha04
、androidx.fragment:fragment-ktx:1.5.0-alpha04
和androidx.fragment:fragment-testing:1.5.0-alpha04
已发布。1.5.0-alpha04版本包含这些提交。
API 变更
- 提供菜单到活动
ActionBar
的Fragment API已弃用,因为它们将片段与活动紧密耦合,并且无法独立测试。Activity1.4.0-alpha01
中添加的MenuHost
和MenuProvider
API提供了一个可测试的、生命周期感知的等效API界面,片段应该使用该界面。(I50a59,I20758)
错误修复
SavedStateViewFactory
现在支持使用CreationExtras
,即使它是用SavedStateRegistryOwner
初始化的。如果提供了额外参数,则忽略已初始化的参数。(I6c43b,b/224844583)
1.5.0-alpha03版本
2022年2月23日
androidx.fragment:fragment:1.5.0-alpha03
、androidx.fragment:fragment-ktx:1.5.0-alpha03
和androidx.fragment:fragment-testing:1.5.0-alpha03
已发布。1.5.0-alpha03版本包含这些提交。
API 变更
- 您现在可以将
CreationExtras
传递给by viewModels()
和by activityViewModels()
函数。(Ibefe7,b/217601110)
行为变更
DialogFragment
现在使用ComponentDialog
作为onCreateDialog()
返回的默认对话框。(If3784,b/217618170)
1.5.0-alpha02版本
2022年2月9日
androidx.fragment:fragment:1.5.0-alpha02
、androidx.fragment:fragment-ktx:1.5.0-alpha02
和androidx.fragment:fragment-testing:1.5.0-alpha02
已发布。1.5.0-alpha02版本包含这些提交。
新功能
FragmentStrictMode
现在允许私有第三方片段使用带有类名的allowViolation()
方法绕过特定的违规处罚。(I8f678)
1.5.0-alpha01 版本
2022年1月26日
androidx.fragment:fragment:1.5.0-alpha01
、androidx.fragment:fragment-ktx:1.5.0-alpha01
和 androidx.fragment:fragment-testing:1.5.0-alpha01
已发布。1.5.0-alpha01 版本包含这些提交。
新功能
Fragment
现在集成了 ViewModel CreationExtras,这是 Lifecycle2.5.0-alpha01
的一部分。(I3060b,b/207012585)
错误修复
- 从 Fragment
1.4.1
开始:当从 xml 生成的视图 ID 为负值时,FragmentContainerView
将不再抛出非法状态异常。(Ic185b,b/213086140) - 从 Fragment
1.4.1
开始:当使用自定义的ownerProducer
lambda 与by viewModels()
延迟函数一起使用时,如果未提供自定义的ViewModelProvider.Factory
,它现在将使用该所有者的defaultViewModelProviderFactory
,而不是始终使用片段的工厂。(I56170,b/214106513) - 修复了从
Fragment
的registerForActivityResult()
回调中第一次访问ViewModel
时发生的崩溃。(Iea2b3)
1.4 版本
1.4.1 版本
2022年1月26日
androidx.fragment:fragment:1.4.1
、androidx.fragment:fragment-ktx:1.4.1
和 androidx.fragment:fragment-testing:1.4.1
已发布。1.4.1 版本包含这些提交。
错误修复
- 当从 xml 生成的视图 ID 为负值时,
FragmentContainerView
将不再抛出非法状态异常。(Ic185b,b/213086140) - 当使用自定义的
ownerProducer
lambda 与by viewModels()
延迟函数一起使用时,如果未提供自定义的ViewModelProvider.Factory
,它现在将使用该所有者的defaultViewModelProviderFactory
,而不是始终使用片段的工厂。(I56170,b/214106513)
1.4.0 版本
2021年11月17日
androidx.fragment:fragment:1.4.0
、androidx.fragment:fragment-ktx:1.4.0
和 androidx.fragment:fragment-testing:1.4.0
已发布。1.4.0 版本包含这些提交。
自 1.3.0 版本以来的重要更改
FragmentStrictMode
API 提供了*运行时*检查,允许您验证您的应用或您依赖的库是否没有调用已弃用的片段 API。当检测到违规时,您可以选择打印日志消息、触发您自己的自定义侦听器或使您的应用崩溃。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-beta01
、androidx.fragment:fragment-ktx:1.4.0-beta01
和 androidx.fragment:fragment-testing:1.4.0-beta01
已发布。1.4.0-beta01 版本包含这些提交。
错误修复
- 父片段现在将在启动自己的回调之前将其整个层次结构中的
onHiddenChanged()
分派。(Iedc20,b/77504618) - 从具有打开键盘的片段切换到具有回收器视图的片段时,键盘现在将自动关闭。(I8b842,b/196852211)
DialogFragment
现在在其调用show()
、showNow()
或dismiss()
时创建的所有事务中使用setReorderingAllowed(true)
。(Ie2c14)DetachAndAttachFragmentInSameFragmentTransaction
的超长 Lint 警告已缩短为DetachAndAttachSameFragment
。(e9eca3)
1.4.0-alpha10 版本
2021年9月29日
androidx.fragment:fragment:1.4.0-alpha10
、androidx.fragment:fragment-ktx:1.4.0-alpha10
和 androidx.fragment:fragment-testing:1.4.0-alpha10
已发布。1.4.0-alpha10 版本包含这些提交。
Lint
- 添加了
DetachAndAttachFragmentInSameFragmentTransaction
lint 警告,用于检测在同一FragmentTransaction
中对同一Fragment
调用detach()
和attach()
——由于这些互补操作在同一事务中执行时会相互抵消,因此必须将它们拆分为单独的事务才能真正执行任何操作。(aosp/1832956,b/200867930) - 添加了
FragmentAddMenuProvider
lint 错误,用于在使用MenuHost
的addMenuProvider
API 时将片段生命周期更正为片段视图生命周期。(aosp/1830457,b/200326272)
文档更新
- 现在由ActivityResult APIs处理的API(即
startActivityForResult
、startIntentSenderForResult
、onActivityResult
、requestPermissions
和onRequestPermissionsResult
)的弃用消息已扩展,包含更多详细信息。(cce80f) Fragment
和DialogFragment
的onActivityCreated()
弃用消息已扩展,包含更多详细信息。(224db4)
1.4.0-alpha09版本
2021年9月15日
androidx.fragment:fragment:1.4.0-alpha09
、androidx.fragment:fragment-ktx:1.4.0-alpha09
和androidx.fragment:fragment-testing:1.4.0-alpha09
已发布。1.4.0-alpha09版本包含这些提交。
新功能
- 您现在可以调用
clearBackStack(name)
来清除之前使用saveBackStack(name)
保存的任何状态。(I70cd7)
API 变更
FragmentContainerView
类已使用Kotlin重写,确保getFragment
函数将正确遵守可空性。(If694a,b/189629145)- FragmentStrictMode现在使用Kotlin编写(I11767,b/199183506)
错误修复
- 修复了使用
setReorderingAllowed(true)
添加的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版本包含这些提交。
错误修复
- 改进了
UseRequireInsteadOfGet
Lint 检查,以更好地处理冗余括号。(I2d865) - 改进了
UseGetLayoutInflater
Lint 检查,以处理其他边缘情况。(Ie5423)
1.4.0-alpha07版本
2021年8月18日
androidx.fragment:fragment:1.4.0-alpha07
、androidx.fragment:fragment-ktx:1.4.0-alpha07
和androidx.fragment:fragment-testing:1.4.0-alpha07
已发布,无显著变化。1.4.0-alpha07版本包含这些提交。
1.4.0-alpha06版本
2021年8月4日
androidx.fragment:fragment:1.4.0-alpha06
、androidx.fragment:fragment-ktx:1.4.0-alpha06
和androidx.fragment:fragment-testing:1.4.0-alpha06
已发布。1.4.0-alpha06版本包含这些提交。
错误修复
- 修复了快速切换回退栈时出现多个回退栈的问题,该问题在还原
FragmentTransaction
时会显示为IllegalStateException
,或者显示为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版本包含这些提交。
错误修复
- 来自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)
错误修复
- 修复了在同时运行使用
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-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)
错误修复
- 来自Fragment
1.3.5
:修复了Fragment1.3.4
中由aosp/1679887引入的共享元素转换中的回归。Fragments现在可以正确处理转换组(直接通过transitionGroup="true"
或间接通过transitionName
或background
设置),并且共享元素将不再抛出IndexOutOfBoundsException
。(I16484,b/188679569,b/188969304) - 当您尝试隐藏正在移除的Fragment时,
FragmentManager
将不再崩溃。(I573dd,b/183634730) OnCreateDialogIncorrectCallback
lint 检查在评估顶级变量时将不再崩溃。(0a9efa,b/189967522)
1.4.0-alpha02版本
2021年6月2日
androidx.fragment:fragment:1.4.0-alpha02
、androidx.fragment:fragment-ktx:1.4.0-alpha02
和androidx.fragment:fragment-testing:1.4.0-alpha02
已发布。1.4.0-alpha02版本包含这些提交。
新功能
- 启用日志记录后,无论当前使用的严格模式策略如何,
FragmentStrictMode
现在始终会记录违规行为,这是通过FragmentManager
实现的。(I02df6,b/187872638) FragmentStrictMode
现在支持将特定的Fragment
类从严格模式Violation
中豁免,允许该类绕过任何惩罚。(Ib4e5d,b/184786736)FragmentStrictMode
的Violation
类已扩展,以根据每个违规行为添加结构信息。这允许您准确验证导致违规的原因以及违规的 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。这使用与FragmentContainerView
的 ID 一起使用的findFragmentById()
相同的逻辑,但允许链接调用。(Ife17a,b/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,#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 变更
FragmentManager.enableNewStateManager(boolean)
的实验性 API 已被移除,而 新的状态管理器 现在是唯一可用的选项。(I90036,b/162776418)FragmentScenario
现在实现了Closeable
,允许您将其与 Kotlin 的use
方法或 try-with-resources 一起使用。(#121,b/143774122)
新的 Lint 检查
UseGetLayoutInflater
Lint 检查现在会在DialogFragment
中使用LayoutInflater.from(Context)
时发出警告 - 您应始终使用对话框 fragment 的getLayoutInflater()
方法来获取适合LayoutInflater
的方法。(#156,b/170781346)DialogFragmentCallbacksDetector
Lint 检查现在会在DialogFragment
的onCreateDialog()
方法中调用setOnCancelListener
或setOnDismissListener
时发出警告 - 这些侦听器由DialogFragment
本身拥有,您应该重写onCancel()
和onDismiss()
以接收这些回调。(#171,b/181780047,b/187524311)
错误修复
- 来自 片段 1.3.4:修复了 片段
1.3.3
中引入的一个回归问题,该问题在片段内使用ViewModelProvider
或 Jetpack Compose 方法viewModel()
与ViewTreeViewModelStoreOwner.get()
API 一起使用时出现。这些用例现在会正确使用片段提供的ViewModelProvider.Factory
(如果它覆盖了getDefaultViewModelProviderFactory()
方法,例如使用 Hilt 的@AndroidEntryPoint
注解的片段)。如果未覆盖该方法,则会创建一个SavedStateViewModelFactory
作为默认工厂,它会与片段的视图一起保存和恢复其状态。(I5cbfa,b/186097368) - 来自 片段 1.3.4:在 API 29 上使用
FragmentContainerView
时,内边距将不再无限分发,从而修复了BottomNavigationBar
和FloatingActionButton
实例的问题。(I1bb78,b/186012452) - 来自 片段 1.3.4:现在可以在进程死亡后从片段结果包中检索 Parcelable 对象。(I65932,b/187443158)
- 来自 片段 1.3.4:在对 ViewGroup 执行共享元素转换时,如果 ViewGroup 的
transitionGroup
设置为 false,现在它将正确进行转换。(I99675)
外部贡献
- 感谢 simonschiller 使
FragmentScenario
实现Closeable
接口。(#121,b/143774122) - 感谢 simonschiller 为此版本添加了完整的
FragmentStrictMode
API!(#123,#131,#150,b/143774122,#142,b/153738653,#141,b/153738235,#146,b/181137036,#140,b/153737954,#136,b/153738974,#139,b/153737745) - 感谢 tatocaster 添加了
UseGetLayoutInflater
Lint 检查。(#156,b/170781346) - 感谢 tatocaster 添加了
DialogFragmentCallbacksDetector
Lint 检查。(#171,b/181780047)
版本 1.3
版本 1.3.6
2021年7月21日
androidx.fragment:fragment:1.3.6
、androidx.fragment:fragment-ktx:1.3.6
和 androidx.fragment:fragment-testing:1.3.6
已发布。版本 1.3.6 包含这些提交。
错误修复
- 来自 片段
1.4.0-alpha03
:当尝试隐藏正在移除的片段时,FragmentManager
将不再崩溃。(I573dd,b/183634730) - 当根视图设置了
transitionGroup=”true”
并使用hide()
时,片段的视图现在将正确设置为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 包含这些提交。
错误修复
- 通过 aosp/1679887 修复了 片段
1.3.4
中引入的共享元素转换中的回归问题。片段现在可以正确处理转换组(直接通过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 包含这些提交。
错误修复
- 修复了 片段
1.3.3
中引入的一个回归问题,该问题在使用 Hilt 时,在片段内使用ViewModelProvider
或 Jetpack Compose 方法viewModel()
与ViewTreeViewModelStoreOwner.get()
API 一起使用时出现。这些用例现在会正确使用片段提供的ViewModelProvider.Factory
(如果它覆盖了getDefaultViewModelProviderFactory()
方法)。如果未覆盖该方法,则会创建一个SavedStateViewModelFactory
作为默认工厂,它会与片段的视图一起保存和恢复其状态。(I5cbfa,b/186097368) - 在 API 29 上使用
FragmentContainerView
时,内边距将不再无限分发,从而修复了BottomNavigationBar
和FloatingActionButton
实例的问题。(I1bb78,b/186012452) - 现在可以在进程死亡后从片段结果包中检索 Parcelable 对象。(I65932,b/187443158)
- 在对 ViewGroup 执行共享元素转换时,如果 ViewGroup 的
transitionGroup
设置为 false,现在它将正确进行转换。(I99675)
版本 1.3.3
2021年4月21日
androidx.fragment:fragment:1.3.3
、androidx.fragment:fragment-ktx:1.3.3
和 androidx.fragment:fragment-testing:1.3.3
已发布。版本 1.3.3 包含这些提交。
新功能
- 现在,当与使用片段视图的
ViewTreeSavedStateRegistryOwner.get()
返回的SavedStateRegistryOwner
一起使用时,SavedStateViewModelFactory
可以正常工作。(I21acf,b/181577191)
错误修复
- 修复了 片段
1.3.2
中引入的一个回归问题,该问题会导致在弹出一个包含setPrimaryNavFragment
操作的FragmentTransaction
(例如NavHostFragment
使用的那些操作)时,popEnter
动画无法运行。(I38c87,b/183877426) FragmentContainerView
现在确保每个Fragment
都分发一组新的WindowInsets
,确保每个片段现在都可以独立使用内边距。(I63f68,b/172153900)DialogFragment
现在可以正确处理将子片段添加到与自定义Dialog
类中的容器具有相同 ID 的容器的情况,从而修复了在重用对话框(例如BottomSheetDialog
)内部使用的 ID 时出现的视图层次结构问题。(Ie6279,b/180021387)FragmentManager.dump()
现在可以正确缩进活动片段列表中的第一个片段。(If5c33,b/183705451)
新的状态管理器错误修复
- 新的片段状态管理器现在可以正确处理带有隐藏操作的退出转换。(I9e4de,b/184830265)
版本 1.3.2
2021年3月24日
androidx.fragment:fragment:1.3.2
、androidx.fragment:fragment-ktx:1.3.2
和 androidx.fragment:fragment-testing:1.3.2
已发布。版本 1.3.2 包含这些提交。
新的状态管理器错误修复
- 同时运行
popBackStack()
和commit()
操作时,最后一个操作现在将设置所有动画的方向,而不是运行一些弹出动画和一些进入动画。(I7072e,b/181142246) - 在共享元素层级结构中的视图在进行共享元素转换时,其转换名称将不再被清除。(I4d4a6,b/179934757)
依赖项更新
- Fragment现在依赖于Activity 1.2.2,修复了在使用Fragment 1.3.1或更高版本时Activity的
InvalidFragmentVersionForActivityResult
lint检查问题。 - Fragment现在依赖于Lifecycle 2.3.1。
1.3.1版本
2021年3月10日
androidx.fragment:fragment:1.3.1
、androidx.fragment:fragment-ktx:1.3.1
和androidx.fragment:fragment-testing:1.3.1
已发布。1.3.1版本包含这些提交。
新功能
- 现在,
DialogFragment
中的对话框可以通过其DecorView访问ViewTree所有者,确保DialogFragment
可以与ComposeView
一起使用。(Ib9290,b/180691023)
错误修复
- 使用FragmentContainerView将Fragment膨胀到已经
RESUMED
的Activity中后,现在在配置更改后可以正确显示。(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
内部结构进行了重大重写,修复了生命周期事件调度、动画和转换以及延迟片段处理方面的许多问题。 **Activity Result API集成**: 添加了对Activity
1.2.0
中引入的ActivityResultRegistry
API的支持,用于处理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之间传递结果的支持。这适用于层级结构片段(父/子)、DialogFragment以及Navigation中的片段,并确保结果仅在片段至少处于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
之前断言片段的状态。- 现在,
FragmentScenario
API的onFragment
有一个替代方案,即Kotlin的reified扩展方法withFragment
,它允许您返回值。值得注意的是,它会重新抛出给定块中引发的异常。
**
ViewTree
支持**:Fragment
现在支持Lifecycle2.3.0
和SavedState1.1.0
中添加的ViewTreeLifecycleOwner.get(View)
、ViewTreeViewModelStoreOwner.get(View)
和ViewTreeSavedStateRegistryOwner
API,以便在使用Fragment
中的View
时,它将Fragment作为ViewModelStoreOwner
以及与片段的视图生命周期绑定的SavedStateRegistryOwner
和LifecycleOwner
返回。**
TRANSIT_
动画更改**: Fragment默认效果TRANSIT_FRAGMENT_OPEN
、TRANSIT_FRAGMENT_CLOSE
和TRANSIT_FRAGMENT_FADE
现在使用Animator
而不是Animation
。用于构建这些动画器的资源现在是私有的。**
setRetainInstance()
弃用**: Fragment上的setRetainInstance()
方法已弃用。随着ViewModel的引入,开发人员拥有一个特定的API来保留可以与Activity、Fragment和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版本包含这些提交。
错误修复
- 修复了在配置更改后,父
DialogFragment
将出现在子DialogFragment
之上的问题;子对话框片段现在始终出现在父对话框片段之上。(I30806,b/177439520) - 修复了使用
Animation
执行hide
操作会导致隐藏片段在动画结束时闪烁的问题。(I57e22,b/175417675) - 在视图层级结构附加之前添加转换的Fragment现在可以正确达到
RESUMED
状态。(I1fc1d,b/177154873)
新的状态管理器错误修复
- Fragment的视图
Lifecycle
现在可以正确处理在Lifecycle
达到CREATED
之前销毁Fragment视图的情况,避免出现“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版本包含这些提交。
错误修复
onPrepareOptionsMenu()
现在遵循与onCreateOptionsMenu()
相同的逻辑,并且当父片段调用setMenuVisibility(false)
时不再被调用。(Id7de8,b/173203654)
新的状态管理器错误修复
- 修复了在将带有
Animation
的片段添加到FragmentContainerView
中,然后用弹出操作中断添加操作时发生的泄漏和视觉伪影问题。(I952d8) - 修复了在
onCreate()
或onViewCreated()
方法期间替换片段时,片段视图仍保留在视图层次结构中的问题。(I8a7d5) - 现在在恢复片段根视图时,焦点可以正确地恢复到这些视图。(Ifc84b)
- 在同一个片段事务中组合弹出和替换操作现在将显示正确的动画。(Ifd4e4,b/170328691)
版本 1.3.0-beta02
2020 年 12 月 2 日
androidx.fragment:fragment:1.3.0-beta02
、androidx.fragment:fragment-ktx:1.3.0-beta02
和 androidx.fragment:fragment-testing:1.3.0-beta02
已发布。版本 1.3.0-beta02 包含这些提交。
新功能
FragmentScenario
已完全转换为 Kotlin,同时通过使用 Kotlin 1.4 的函数式接口FragmentAction
保持源代码和二进制兼容性。(I19d31)
行为变更
- 不使用
class
或android:name
属性膨胀片段的 FragmentContainerView 现在可以在FragmentActivity
之外使用。(Id4397,b/172266337) - 尝试将片段的最大生命周期设置为
DESTROYED
现在将抛出IllegalArgumentException
(Ie7651,b/170765622) - 使用
DESTROYED
状态初始化FragmentScenario
现在将抛出IllegalArgumentException
(I73590,b/170765622)
新的状态管理器错误修复
- 修复了如果中断使用
Animator
或TRANSIT_FRAGMENT_
选项之一的片段转换,视图将无法达到其最终状态的问题。(I92426,b/169874632) - 修复了阻止具有退出
Animation
的片段被正确销毁的问题。(I83d65) - 具有反向效果的退出片段现在可以正确取消并使用正确的进入效果重新启动。(I62226,b/167092035)
- 修复了
hide()
的退出Animator
不会运行的问题。(Id7ffe) - 片段现在在被推迟然后立即启动时可以正确显示。(Ie713b,b/170022857)
- 在动画过程中移除其聚焦视图的片段将不再尝试在它们达到
RESUMED
后恢复已分离视图的焦点。(I38c65,b/172925703)
外部贡献
FragmentFactory
现在为不同的ClassLoader
实例分别缓存片段类。感谢 Simon Schiller!(#87,b/113886460)
版本 1.3.0-beta01
2020 年 10 月 1 日
androidx.fragment:fragment:1.3.0-beta01
、androidx.fragment:fragment-ktx:1.3.0-beta01
和 androidx.fragment:fragment-testing:1.3.0-beta01
已发布。版本 1.3.0-beta01 包含这些提交。
新功能
setMaxLifecycle()
现在支持将Lifecycle
状态设置为INITIALIZING
,只要片段尚未移动到CREATED
。(b/159662173)
API 变更
- 升级 androidx 以使用 Kotlin 1.4(Id6471,b/165307851,b/165300826)
行为变更
- 片段资源文件已正确设置为私有。(aosp/1425237)
错误修复
- 使用
<fragment>
标签膨胀的片段现在将在它们的视图添加到容器中之后才移动到 STARTED。(I02f4c) - 可见然后
setMaxLifecycle()
设置为CREATED
的片段现在可以正确运行其退出效果。(b/165822335) - 移除未添加到返回堆栈中的已分离片段不再导致内存泄漏。感谢 Nicklas Ansman Giertz!(b/166489383)
- 活动片段现在将始终具有非空
FragmentManager
,并且具有非空FragmentManager
的片段将始终被视为活动片段。(aosp/1422346) - 片段默认效果
TRANSIT_FRAGMENT_OPEN
、TRANSIT_FRAGMENT_CLOSE
和TRANSIT_FRAGMENT_FADE
现在使用Animator
而不是Animation
。(b/166155034)
新的状态管理器错误修复
- 片段现在可以正确地从它们开始动画之前的状态恢复其视图焦点状态。(Icc256)
- 只有共享元素转换的片段现在可以正确完成其特殊效果,这意味着它们实际上移动到其最终状态。(Iaebc7,b/166658128)
- 片段视图现在始终在销毁之前从容器中移除。(Id5876)
- 新的状态管理器现在始终在添加进入的片段视图之前移除退出的片段视图。(I41a6e)
- 新的状态管理器现在会尊重对片段视图可见性的显式更改。这意味着如果您在动画开始之前将进入片段的视图设置为
INVISIBLE
,它将实际上保持不可见。(b/164481490) - 片段现在优先考虑
Animators
而不是Animations
,这意味着同时具有两者的片段将只运行Animator
并忽略Animation
。(b/167579557) - 新的状态管理器不再导致片段在使用进入动画时闪烁。(b/163084315)
已知问题
使用新的状态管理器时,如果您在进入特殊效果期间按下返回键,而不是返回到上一个片段,则旧片段永远不会被重新添加,导致出现空白屏幕。(b/167259187,b/167092035,b/168442830)
版本 1.3.0-alpha08
2020 年 8 月 19 日
androidx.fragment:fragment:1.3.0-alpha08
、androidx.fragment:fragment-ktx:1.3.0-alpha08
和 androidx.fragment:fragment-testing:1.3.0-alpha08
已发布。版本 1.3.0-alpha08 包含这些提交。
新的状态管理器
此版本包含对 FragmentManager
内部状态管理的重大重构,这会影响生命周期方法、动画和转换的调度,以及如何处理推迟的事务。默认情况下启用此功能。有关更多详细信息,请参阅 Fragments:重建内部博客文章。(b/139536619,b/147749580)
FragmentManager.enableNewStateManager(boolean)
中的实验性 API 可用于控制 FragmentManager 是否使用新的状态管理器。(I7b6ee)
只有在使用新的状态管理器时才修复以下问题
- 现在在启动新片段之前,
replace
操作的上一个片段将被正确停止。(b/161654580) - 片段现在可以防止在同一片段上发生多个竞争动画,避免
Animation
覆盖所有Transition
效果,或者单个片段上的Animator
和Transition
都运行的情况。(b/149569323) - 现在运行所有进入和退出的片段的
enterTransition
和exitTranstion
,而不是仅运行最后一个进入片段和第一个退出片段。(b/149344150) - 推迟的片段不再停留在
CREATED
状态,而是与其他片段一起移动到STARTED
。(b/129035555) - 修复了在混合使用推迟的重新排序事务和非重新排序事务时,
FragmentManager
会以错误顺序执行操作的问题。(b/147297731) - 同时弹出多个片段在推迟片段时,不会再导致中间片段暂时可见。(b/37140383)
FragmentManager
现在在onAttachFragment()
回调中调用findFragmentById()
或findFragmentByTag()
时返回正确的片段。(b/153082833)- 当替换它们的片段被推迟时,片段不再在被销毁的片段上调用
onCreateView()
。(b/143915710) - 尝试组合框架
Transition
和AndroidXTransition
实例时的错误消息现在会提及带有无效转换的片段。(b/155574969)
行为变更
- 您现在可以在片段的
onCreate()
生命周期方法中对ActivityResultLauncher
调用launch()
。(b/161464278) - 在
onCreate()
之后调用registerForActivityResult()
现在会抛出一个异常,指出这是不允许的,而不是在配置更改后静默地失败传递结果。(b/162255449) FragmentActivity
现在使用在Activity1.2.0-alpha08
中引入的OnContextAvailableListener
API来恢复FragmentManager
的状态。添加到FragmentActivity
子类的任何监听器都将在此监听器之后运行。(I513da)
错误修复
- 使用
startIntentSenderForResult()
时传递的ActivityOptions
现在已得到尊重。(b/162247961)
已知问题
- 使用新的状态管理器时,在
onViewCreated()
之后和onResume()
之前直接设置片段根视图的可见性会导致FragmentManager
覆盖您设置的可见性,因为它控制根视图的可见性。作为解决方法,您应该始终使用hide()
和show()
操作来更改片段的可见性。(b/164481490)
1.3.0-alpha07版本
2020年7月22日
androidx.fragment:fragment:1.3.0-alpha07
、androidx.fragment:fragment-ktx:1.3.0-alpha07
和androidx.fragment:fragment-testing:1.3.0-alpha07
已发布。1.3.0-alpha07版本包含这些提交。
新功能
FragmentScenario
现在支持设置CREATED
、STARTED
或RESUMED
的初始生命周期状态,而不是总是将片段移动到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-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)
错误修复
- 父片段现在会在其子片段之前恢复其视图状态,修复了配置更改后
DialogFragment
会显示另一个DialogFragment
作为子片段时的视觉顺序问题。(b/157195715) - 修复了
UseRequireInsteadOfGet
Lint检查无法正确处理?.
和!!
运算符的链式用法的问题。(b/157677616)
1.3.0-alpha05版本
2020年5月20日
androidx.fragment:fragment:1.3.0-alpha05
、androidx.fragment:fragment-ktx:1.3.0-alpha05
和androidx.fragment:fragment-testing:1.3.0-alpha05
已发布。1.3.0-alpha05版本包含这些提交。
新功能
- 在
Fragment
中使用View
时,添加了对来自Lifecycle2.3.0-alpha03
的ViewTreeViewModelStoreOwner
和来自SavedState1.1.0-alpha01
的ViewTreeSavedStateRegistryOwner
的支持。(aosp/1297993,aosp/1300264)
API 变更
setFragmentResult()
和setFragmentResultListener()
API现在分别采用非空Bundle
和FragmentResultListener
。要显式清除先前设置的结果或监听器,请使用新的clearFragmentResult()
和clearFragmentResultListener()
方法。(b/155416778)- 采用lambda的
setFragmentResultListener()
Kotlin扩展现在标记为inline
。(b/155323404)
行为变更
- 先前已弃用的
Fragment
上的startActivityForResult()
、startIntentSenderForResult()
和requestPermissions
现在在内部使用ActivityResultRegistry
,从而消除了在使用这些API时仅对较低位(低于0xFFFF
)的请求代码进行限制。(b/155518741)
文档更新
- 扩展了
Fragment(@LayoutRes int)
和DialogFragment(@LayoutRes int)
构造函数的文档,以阐明在使用默认FragmentFactory
时,应从子类的无参数构造函数中调用它们。(b/153042497)
1.3.0-alpha04版本
2020年4月29日
androidx.fragment:fragment:1.3.0-alpha04
、androidx.fragment:fragment-ktx:1.3.0-alpha04
和androidx.fragment:fragment-testing:1.3.0-alpha04
已发布。1.3.0-alpha04版本包含这些提交。
新功能
- 添加了对通过
FragmentManager
上的新API在两个片段之间传递结果的支持。这适用于层次结构片段(父/子)、DialogFragment
和导航中的片段,并确保结果仅在片段至少处于STARTED
状态时才发送到您的片段。(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-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)
错误修复
- 修复了在Fragment
1.3.0-alpha02
中使用BottomSheetDialogFragment
时引入的回归。(b/151652127,aosp/1263328,aosp/1265163) - 修复了在配置更改后从片段使用
prepareCall
时发生的崩溃。(b/152137004) - 修复了在使用
setTargetFragment()
时忽略共享元素和退出转换的问题。(b/152023196) - 来自Fragment
1.2.4
:更新了Fragment ProGuard规则,以允许混淆保留的片段。(b/151605338) - 来自Fragment
1.2.4
:在DialogFragment
类中禁用了FragmentLiveDataObserve
Lint规则,因为它们的生命周期和视图生命周期始终同步,因此在调用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
中引入的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/117894767,aosp/1258664) - 来自Fragment
1.2.3
:缩小了Fragment包含的ProGuard规则的范围,以确保可以剥离未使用的Fragment类。(b/149665169) - 来自Fragment
1.2.3
:在使用与Kotlin属性名称相同的局部变量名时,修复了UseRequireInsteadOfGet
Lint检查中的误报。(b/149891163) - 来自Fragment
1.2.3
:FragmentContainerView
不再为在布局预览中使用不正确的构造函数抛出UnsupportedOperationException
。(b/149707833)
已知问题
BottomSheetDialogFragment
不再能正确地在屏幕上定位其对话框。(b/151652127)
1.3.0-alpha01 版本
2020年3月4日
androidx.fragment:fragment:1.3.0-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
作为LifecycleOwner
返回给onCreateView()
返回的任何视图。(aosp/1182955)
API 变更
- Fragment上的
setRetainInstance()
方法已弃用。随着ViewModel的引入,开发者拥有一个专门的API来保留可以与Activity、Fragment和导航图关联的状态。这允许开发者使用普通的、非保留的Fragment,并将其想要保留的特定状态分开保存,避免常见的内存泄漏来源,同时保持保留状态的单次创建和销毁的有用特性(即ViewModel
的构造函数以及它接收到的onCleared()
回调)。(b/143911815) - 随着ViewPager2
1.0.0
的发布,用于与ViewPager
交互的FragmentPagerAdapter
和FragmentStatePagerAdapter
类已弃用。请参阅从ViewPager迁移到ViewPager2。(b/145132715)
错误修复
- Fragment ProGuard规则现在可以正确地只保留使用的
Fragment
类的默认构造函数,而不是所有Fragment
实例,从而修复了Fragment1.2.1
中引入的回归问题。(b/149665169 - 在Fragment
1.2.2
中添加的require___()
Lint规则不再对与隐藏的Kotlin属性名称(例如view
)相同的局部变量产生误报。(b/149891163) FragmentContainerView
在Android Studio中使用布局预览时不再抛出UnsupportedOperationException
。(b/149707833)- 修复了在保存状态后添加的保留片段不会在每次配置更改后持续重新创建然后销毁的问题。(b/145832397)
1.2.5 版本
1.2.5 版本
2020年6月10日
androidx.fragment:fragment:1.2.5
、androidx.fragment:fragment-ktx:1.2.5
和androidx.fragment:fragment-testing:1.2.5
已发布。1.2.5 版本包含这些提交。
错误修复
- 片段的
getViewLifecycleOwner()
现在在调用onSaveInstanceState()
之前停止,与片段的生命周期行为相匹配。这先前已在Fragment1.3.0-alpha04
中发布。(b/154645875) - 在片段上调用
setMenuVisibility(false)
现在可以正确地更改其子片段提供的菜单的可见性。这先前已在Fragment1.3.0-alpha04
中发布。(b/153593580)
1.2.4 版本
1.2.4 版本
2020年4月1日
androidx.fragment:fragment:1.2.4
、androidx.fragment:fragment-ktx:1.2.4
和androidx.fragment:fragment-testing:1.2.4
已发布。1.2.4 版本包含这些提交。
错误修复
- 更新了Fragment ProGuard规则,以允许混淆保留的片段。(b/151605338)
- 在
DialogFragment
类中禁用了FragmentLiveDataObserve
Lint规则,因为它们的生命周期和视图生命周期始终同步,因此在调用observe
时,使用this
或viewLifecycleOwner
都是安全的。(b/151765086)
1.2.3 版本
1.2.3 版本
2020年3月18日
androidx.fragment:fragment:1.2.3
、androidx.fragment:fragment-ktx:1.2.3
和androidx.fragment:fragment-testing:1.2.3
已发布。1.2.3 版本包含这些提交。
错误修复
- 修复了
DialogFragment
中的一个bug,该bug在从onCreateDialog()
中调用getLayoutInflater()
时会导致StackOverflowError
。(b/117894767,aosp/1258665) - 缩小了Fragment包含的ProGuard规则的范围,以确保可以剥离未使用的Fragment类。(b/149665169)
- 在使用与Kotlin属性名称相同的局部变量名时,修复了
UseRequireInsteadOfGet
Lint检查中的误报。(b/149891163) FragmentContainerView
不再为在布局预览中使用不正确的构造函数抛出UnsupportedOperationException
。(b/149707833)
1.2.2 版本
1.2.2 版本
2020年2月19日
androidx.fragment:fragment:1.2.2
、androidx.fragment:fragment-ktx:1.2.2
和androidx.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___()
方法来生成更具描述性的错误消息,而不是对所有包含get
和require
等效项的碎片API使用checkNotNull(get___())
、requireNonNull(get___())
或get___()!!
。(aosp/1202883)
错误修复
- 修复了碎片ProGuard文件,以避免R8警告。(b/148963981)
- 改进了现有的Lint检查,该检查建议在使用
observe
时使用viewLifecycleOwner
,以处理observe
的livedata-ktx
扩展方法版本。(b/148996309) - 修复了许多Lint检查的格式。(aosp/1157012)
外部贡献
- 感谢Zac Sweers代表Slack贡献了
require___()
Lint检查!(aosp/1202883)
版本 1.2.1
版本 1.2.1
2020年2月5日
androidx.fragment:fragment:1.2.1
、androidx.fragment:fragment-ktx:1.2.1
和androidx.fragment:fragment-testing:1.2.1
已发布。版本1.2.1包含这些提交。
错误修复
- 通过采用
Class
实例(或Kotlin的具名类型版本)的add
和replace
方法添加的碎片现在保留了它们的默认构造函数。(b/148181315) FragmentStatePagerAdapter
和FragmentPagerAdapter
在运行finishUpdate()
时不再捕获FragmentManager
抛出的异常。(aosp/1208711)- 修复了
FragmentManager.findFragment()
无法与通过<fragment>
标签添加的碎片一起工作的问题。(b/147784323) - 使用
<fragment>
标签膨胀的碎片现在在布局中始终会在onCreate()
之前收到对onInflate()
的调用。(aosp/1215856) - 在Activity已销毁时,对
FragmentManager
实例调用toString()
不再抛出NullPointerException
。(b/148189412)
依赖项更改
- Fragments
1.2.1
现在依赖于Lifecycle ViewModel SavedState2.2.0
。
版本 1.2.0
版本 1.2.0
2020年1月22日
androidx.fragment:fragment:1.2.0
、androidx.fragment:fragment-ktx:1.2.0
和androidx.fragment:fragment-testing:1.2.0
已发布。版本1.2.0包含这些提交。
自1.1.0以来重要更改
- FragmentContainerView:
FragmentContainerView
是强烈推荐用于动态添加碎片的容器,它取代了FrameLayout
或其他布局的使用。它还支持与<fragment>
标签相同的class
、android:name
和可选的android:tag
,但是它使用普通的FragmentTransaction
来添加此初始碎片,而不是<fragment>
使用的自定义代码路径。 onDestroyView()
计时:碎片现在会在调用onDestroyView()
之前等待退出动画、退出框架转换和退出AndroidX转换(当使用Transition1.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
,允许您启用DEBUG
或VERBOSE
日志记录而无需重新编译您的应用程序。
已知问题
- 仅通过
FragmentContainerView
上的class
或android:name
属性引用的碎片不会被ProGuard自动保留,这要求您为每个碎片类手动添加保留规则。(b/142601969) - 当使用
class
或android:name
在XML中使用FragmentContainerView
添加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>
标签时的回归,该回归导致在活动销毁期间onViewCreated()
被错误调用。(b/146290333) - 现在,使用
<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包含这些提交。
错误修复
- 修复了一个意外的行为更改,其中已删除的碎片在它们的退出动画/转换运行时仍由
findFragmentById()
/findFragmentByTag()
返回。(b/143982969,aosp/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 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
现在除了android:name
之外,还支持class
属性,这与<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 作为 inflation 的一部分添加,确保findFragmentById()
和findFragmentByTag()
随后立即工作。(b/142520327)- 修复了由于保存状态导致的
FragmentContainerView
中的IllegalStateException
。(b/142580713) - 修复了当
FragmentContainerView
类被混淆时FragmentContainerView
中的UnsupportedOperationException
。(b/142657034)
已知问题
- 仅通过
FragmentContainerView
上的class
或android:name
属性引用的 Fragment 不会被 ProGuard 自动保留,需要手动为每个 Fragment 类添加保留规则。在通过aapt2
修复此问题之前,我们已禁用建议迁移到FragmentContainerView
的 Lint 规则。(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
添加了使用android:name
和可选的android:tag
XML 属性添加初始 Fragment 的支持。与<fragment>
标签不同,FragmentContainerView
在后台使用普通的FragmentTransaction
来添加初始 Fragment,允许在FragmentContainerView
上进行进一步的FragmentTransaction
操作,并启用布局的视图绑定。(b/139830628,b/141177981)- Fragments 现在包含一个 Lint 警告,提供一个快速修复以将
<fragment>
替换为FragmentContainerView
。(b/139830056)
错误修复
- 修复了使用
androidx.transition
时发生的ClassCastException
。(b/140680619) - 使用 Transition
1.3.0-beta01
时,Fragments 现在会在分派onDestroyView()
之前等待androidx.transition
过渡完成(除了在 Fragment1.2.0-alpha03
和 Fragment1.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 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 现在尊重Log.isLoggable()
的标签FragmentManager
,允许您启用DEBUG
或VERBOSE
日志记录,而无需重新编译您的应用。(aosp/1116591)
错误修复
- 现在在其他 Fragment 上运行退出动画时,Fragments 会被正确销毁。(b/140574199)
- 修复了 Fragments 会调用
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)
- Fragments 现在会在分派
onDestroyView()
之前等待过渡完成(除了在 Fragment1.2.0-alpha02
中修复的动画)。(b/138741697)
版本 1.2.0-alpha02
2019年8月7日
已发布 androidx.fragment:fragment:1.2.0-alpha02
、androidx.fragment:fragment-ktx:1.2.0-alpha02
和 androidx.fragment:fragment-testing:11.2.0-alpha02
。 此版本中包含的提交可以在这里找到 这里。
新功能
- 现在使用
by viewModels()
、by activityViewModels()
、ViewModelProvider
构造函数或带有Fragment
的ViewModelProviders.of()
时,SavedStateViewModelFactory
已成为默认工厂。(b/135716331) - 在
FragmentTransaction
上使用setTransition
时,使用TRANSIT_FRAGMENT_OPEN
、TRANSIT_FRAGMENT_CLOSE
、TRANSIT_FRAGMENT_FADE
的默认动画已更新,以匹配Android 10设备上活动使用的动画。(aosp/1012812,aosp/1014730)
API 更改
- 引入了
FragmentContainerView
作为强烈推荐的动态添加Fragment的容器,取代了FrameLayout
等的使用,因为它修复了动画z顺序问题以及窗口内边距分发到Fragment的问题。(b/37036000,aosp/985243,b/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) 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)
- 修复了在使用共享元素转换并组合弹出和添加操作时发生的
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()
,确保您的视图始终具有正确的内边距。(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实例的创建,消除了必须具有无参数构造函数的严格要求。 - ViewModel的Kotlin属性委托:
fragment-ktx
构件现在包含两个Kotlin属性委托:by viewModels()
用于访问与单个Fragment关联的ViewModel,以及by activityViewModels()
用于访问作用域为Activity的ViewModel。 - 最大生命周期:您现在可以通过在
FragmentTransaction
上调用setMaxLifecycle()
来为Fragment设置最大生命周期状态。这取代了现在已弃用的setUserVisibleHint()
。FragmentPagerAdapter
和FragmentStatePagerAdapter
有一个新的构造函数,允许您切换到新的行为。 - 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-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 更改
- 当主要导航片段发生变化时,片段现在会收到对新方法
onPrimaryNavigationFragmentChanged(boolean)
的回调。aosp/960857
错误修复
- 子片段膨胀的菜单项现在会在父片段移除时正确移除。b/131581013
1.1.0-alpha08 版本
2019 年 5 月 7 日
已发布 androidx.fragment:fragment:1.1.0-alpha08
、androidx.fragment:fragment-ktx:1.1.0-alpha08
和 androidx.fragment:fragment-testing:1.1.0-alpha08
。此版本包含的提交可以 在此处 查看。
此版本与 Preferences 1.1.0-alpha01 到 1.1.0-alpha04 不兼容。使用此版本的 Fragments 时,请升级到 Preferences 1.1.0-alpha05。
新功能
- 添加了
postponeEnterTransition()
的一个新的重载方法,该方法接受一个超时时间,之后片段会自动调用startPostponedEnterTransition()
b/120803208
API 更改
- 重大更改:已删除以前已弃用的
FragmentFactory
的instantiate
方法(该方法接受Bundle
)。aosp/953856 - 重大更改:
FragmentPagerAdapter
和FragmentStatePagerAdapter
中的RESUME_ONLY_CURRENT_FRAGMENT
和USE_SET_USER_VISIBLE_HINT
常量已分别重命名为BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
和BEHAVIOR_SET_USER_VISIBLE_HINT
。aosp/954782
错误修复
- 通过
setMaxLifecycle()
限制其生命周期的片段,在达到其最终状态之前不再恢复。b/131557151 - 使用
setMaxLifecycle(Lifecycle.State.CREATED)
时,片段的视图将被正确销毁。aosp/954180
1.1.0-alpha07 版本
2019 年 4 月 25 日
已发布 androidx.fragment:fragment:1.1.0-alpha07
、androidx.fragment:fragment-ktx:1.1.0-alpha07
和 androidx.fragment:fragment-testing:1.1.0-alpha07
。此版本包含的提交可以 在此处 查看。
新功能
- 现在可以通过在
FragmentTransaction
上调用setMaxLifecycle()
来设置片段的最大生命周期状态。这取代了现在已弃用的setUserVisibleHint()
。FragmentPagerAdapter
和FragmentStatePagerAdapter
有一个新的构造函数,允许您切换到新的行为。(b/129780800)
API 变更
FragmentScenario
上的moveToState(STARTED)
现在只能在 API 24+ 设备上调用。(b/129880016)
行为变更
- 由于 (b/129907905),回退栈中的片段在托管 Activity 重新创建时**不会**收到对
onCreateView()
的回调。onCreateView()
现在只会在片段可见时(即回退栈弹出)调用。
错误修复
- 修复了在 XML 中使用
<fragment>
标签以及FragmentActivity
或AppCompatActivity
的contentLayoutId
构造函数时出现的问题。(b/129907905) - 修正了一个问题,即在配置更改后,回退栈上的片段不会移动到至少
CREATED
状态,导致 ViewModel 和子保留片段未正确处置。(b/129593351) - 修复了
restoreSaveState
中因保存实例状态后保留片段不同步而导致的崩溃问题。(b/130433793)(aosp/947824) - 修复了使用片段生命周期添加的
OnBackPressedCallback
在FragmentManager
有回退栈时不会被调用的问题。有关更多详细信息,请参阅 androidx.activity 1.0.0-alpha07。(aosp/948209) - 片段不再强制执行
LAYER_TYPE_HARDWARE
用于动画。如果您特别需要硬件层动画,请将其设置为动画的一部分。(b/129486478)
1.1.0-alpha06 版本
2019 年 4 月 3 日
已发布 androidx.fragment:fragment:1.1.0-alpha06
、androidx.fragment:fragment-ktx:1.1.0-alpha06
和 androidx.fragment:fragment-testing:1.1.0-alpha06
。此版本包含的提交可以 在此处 查看。
新功能
- FragmentManager 引发的异常现在包含片段的名称在消息中。(b/67759402)
API 变更
Fragment
和FragmentActivity
现在包含一个采用@LayoutRes int
的第二个构造函数,它取代了以前使用@ContentView
注解类的行为。此方法适用于应用程序和库模块。(b/128352521)- FragmentActivity 的
onActivityResult()
现在已正确标记为@CallSuper
。(b/127971684) - 采用参数 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-alpha05
、androidx.fragment:fragment-ktx:1.1.0-alpha05
和 androidx.fragment:fragment-testing:1.1.0-alpha05
。此版本包含的完整提交列表可以 在此处 查看。
新功能
@ContentView
注解查找现在已缓存 (b/123709449)
行为更改
- 使用附加到不同 FragmentManager 的片段调用
remove()
、hide()
、show()
、detach()
和setPrimaryNavigationFragment()
现在会抛出IllegalStateException
而不是静默失败 (aosp/904301)
错误修复
FragmentActivity
的onNewIntent
现在已正确标记为@CallSuper
(b/124120586)- 修复了使用
getDialog().dismiss()
或getDialog().cancel()
时DialogFragment
的onDismiss()
可能被调用两次的问题 (b/126563750)
1.1.0-alpha04 版本
2019 年 2 月 7 日
已发布 androidx.fragment:fragment 1.1.0-alpha04
、androidx.fragment:fragment-ktx 1.1.0-alpha04
和 androidx.fragment:fragment-testing 1.1.0-alpha04
。
新功能
- 添加了对
@ContentView
类注释的支持,允许您指示应膨胀哪个布局 XML 文件,作为覆盖onCreateView()
的替代方法。建议在onViewCreated()
中执行与视图相关的操作。(aosp/837619) fragment-testing
现在依赖于androidx.test:core-ktx
1.1.0 稳定版 (b/121209673)- 现在可以使用
openActionBarOverflowOrOptionsMenu
和FragmentScenario
来测试片段托管的选项菜单 (b/121126668)
API 更改
- 添加了一个
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
。