【问题标题】:Why the childFragmentManager.popBackStack() not working in Fragment for Android?为什么 childFragmentManager.popBackStack() 在 Fragment for Android 中不起作用?
【发布时间】:2019-08-28 08:12:08
【问题描述】:

我想关闭片段内的片段。我使用以下代码从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()
    }

上面的代码可以正常工作,但是使用下面的代码自行关闭fragment-B就不行了。

childFragmentManager.popBackStackImmediate()
childFragmentManager.popBackStack()

childFragmentManager.backStackEntryCountfragment-B 中返回 0

我错过了什么吗?

如何通过childFragmentManager自行关闭fragment

【问题讨论】:

    标签: android android-fragments fragmentmanager


    【解决方案1】:

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

    childFragmentManager.popBackStack()
    

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

    fragmentManager.popBackStack()
    

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

    【讨论】:

      猜你喜欢
      • 2014-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 2023-01-22
      • 1970-01-01
      相关资源
      最近更新 更多