首页 > 解决方案 > 片断在背压上重叠

问题描述

我有一个navigation drawer. 有两个名为 A 和 B 的项目。当按下 A 时,Navigation drawer我正在打开FragmentA。activity要显示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 A1A2Onclickof A1orA2我将替换Fragment AFragment A1or A2。以下是我的代码

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或添加A2backstack因为他们有一个支持buttonlayout所以backbutton我可以去Fragment A

B同样的情况,当用户按下Navigation Drawerwhich opens Fragment B(cannot be added to backstack)which has two buttons B1and B2to open Fragment B1andB2(B1 and B2 are added to backstack).

假设用户按下A1 buttonAFragment并转到Fragment A1。现在用户按下BNavigation Drawer按下backbutton,然后重叠Android(not of layout)Fragment AFragment B

在我的backpressed我已经检查过

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

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

标签: androidfragment

解决方案


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

 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()
        }
    }

推荐阅读