为什么childFragmentManager.popBackStack()在Android的Fragment中不起作用



我想关闭片段中的片段。我使用以下代码从Activity添加Fragment

Activity -> Fragment-A -> Fragment-B

Activity

addFragment(AFragment(),R.id.fragment_layout,FragTag.fragA)
fun addFragment(fragment: Fragment, frameId: Int, tag:String){
supportFragmentManager.beginTransaction().apply {
setCustomAnimations(R.anim.slide_in_left,0,0,R.anim.slide_out_right)
add(frameId, fragment)
addToBackStack(tag)
}.commit()
}

Fragment-A,用于创建fragment-B

addFragment(TestBFragment(),R.id.childFragment_layout,FragTag.fragB)
private fun addFragment(fragment: Fragment, frameId: Int, tag:String) {
childFragmentManager.beginTransaction().apply {
setCustomAnimations(R.anim.slide_in_left,0,0,R.anim.slide_out_right)
add(frameId, fragment)
addToBackStack(tag)
}.commit()
}

上面的代码工作正常,但是使用以下代码自行关闭片段B是行不通的。

childFragmentManager.popBackStackImmediate()
childFragmentManager.popBackStack()

childFragmentManager.backStackEntryCountfragment-B中返回 0

我错过了什么吗?

如何通过childFragmentManager自行关闭fragment

片段AchildFragmentManager与片段BfragmentManager相同。所以要从A中删除B,你必须调用

childFragmentManager.popBackStack()

要从B 本身中删除B,您必须调用

fragmentManager.popBackStack()

片段BchildFragmentManager从未用于添加另一个片段,因此后堆栈为空。

最新更新