将新片段添加到后台堆栈是不是会暂停当前片段?

Posted

技术标签:

【中文标题】将新片段添加到后台堆栈是不是会暂停当前片段?【英文标题】:Does adding a new fragment to the backstack pause the current fragment?将新片段添加到后台堆栈是否会暂停当前片段? 【发布时间】:2020-11-07 20:36:45 【问题描述】:

我目前正在向后台堆栈添加一个新片段(在当前片段的顶部):

val fragmentTransaction = fragmentManager?.beginTransaction()
        fragmentTransaction?.add(R.id.cl_my_profile_edit, newFragment)?.addToBackStack(null)
        fragmentTransaction?.commit()

这会暂停运行此代码的当前片段吗?

如果这不会暂停当前片段

会这样调用onPause()

val fragmentTransaction = fragmentManager?.beginTransaction()
        fragmentTransaction?.add(R.id.cl_my_profile_edit, newFragment)?.addToBackStack(null)
        fragmentTransaction?.commit()

        onPause()

暂停当前片段?

【问题讨论】:

【参考方案1】:

add() 不会影响任何其他片段 - 顾名思义,它只是添加一个新片段,与同一容器中的任何现有片段重叠。

您可以使用replace() 替换任何现有片段,从而导致其他片段暂停、停止,并将其视图从视图层次结构中删除。这将确保片段在视觉上不会重叠。

您不能安全地调用 onPause() 或任何其他 on__ 方法 - 这些是由框架调用的,而不是由您调用的。

【讨论】:

以上是关于将新片段添加到后台堆栈是不是会暂停当前片段?的主要内容,如果未能解决你的问题,请参考以下文章

添加到后台堆栈时如何维护片段状态?

Android Navigation - 导航时弹出当前片段

MvvmCross Android 片段添加到后台堆栈

从后台堆栈恢复片段时的 savedInstanceState

来自后台堆栈的片段 onResume

替换或删除后台堆栈上现有片段的代码不起作用