片段在向后按压时重叠

时间:2018-08-06 10:02:45

标签: android fragment

我有一个活动,其中有一个navigation drawerNavigation drawer有两个名为A和B的项目。当按下A时,我在同一Fragment中打开activityA。要显示Fragment A,请输入以下代码

private fun displayView(fragment: Fragment?, title: String) {

    if (fragment != null) {
        fragmentManager.beginTransaction()
                .replace(R.id.framelayout_sliding_activity, fragment, title)
                .commit()
        this.invalidateOptionsMenu()
    }
}

我无法将此fragment添加到堆栈中,因为这是必需的。现在Fragment A有两个buttons A1A2OnclickA1中的A2,我将Fragment A替换为Fragment A1A2。以下是我的代码

private fun displayView(fragment: Fragment?) {
    if (fragment != null) {
        val fragmentManager = fragmentManager
        fragmentManager?.beginTransaction()
                ?.replace(R.id.framelayout_sliding_activity,fragment)
                ?.addToBackStack(null)
                ?.commit()
    }
}

我需要在Fragment A1上添加A2backstackbutton,因为他们的layout中有背面backbutton,因此请按{{1} }我可以去Fragment A

在用户按下B上的Navigation Drawer并打开Fragment B(cannot be added to backstack)的情况下,buttons B1有两个B2Fragment B1打开B2(B1 and B2 are added to backstack).和{{ 1}}

假设用户按下A A1 button中的Fragment并转到Fragment A1。现在,用户在B上按下Navigation Drawer,然后在backbuttonAndroid(not of layout)Fragment A中按下Fragment B,然后重叠。

backpressed上,我已检查

(fragmentManager.backStackEntryCount != 0 ) -> {
    val b = fragmentManager.popBackStackImmediate()
    Log.i("Hiii",b.toString())
}

但是什么也没有发生,并且片段重叠。我在所有情况下都使用SupportFragmentManager

1 个答案:

答案 0 :(得分:1)

我找到了一个解决方案,并且代码运行正常,但不确定这是否是正确的方法。如果您有更好的答案,请发表您的答案。

 private fun displayView(fragment: Fragment?, title: String) {

        if (fragment != null) {
            fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)
            fragmentManager.beginTransaction()
                    .replace(R.id.framelayout_sliding_activity, fragment, title)
                    .commit()
            this.invalidateOptionsMenu()
        }
    }