我有一个活动,其中有一个navigation drawer
。 Navigation drawer
有两个名为A和B的项目。当按下A时,我在同一Fragment
中打开activity
A。要显示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
A1
和A2
。 Onclick
或A1
中的A2
,我将Fragment A
替换为Fragment A1
或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
上添加A2
或backstack
到button
,因为他们的layout
中有背面backbutton
,因此请按{{1} }我可以去Fragment A
。
在用户按下B
上的Navigation Drawer
并打开Fragment B(cannot be added to backstack)
的情况下,buttons B1
有两个B2
和Fragment B1
打开B2(B1 and B2 are added to backstack).
和{{ 1}}
假设用户按下A A1 button
中的Fragment
并转到Fragment A1
。现在,用户在B
上按下Navigation Drawer
,然后在backbutton
,Android(not of layout)
和Fragment A
中按下Fragment B
,然后重叠。
在backpressed
上,我已检查
(fragmentManager.backStackEntryCount != 0 ) -> {
val b = fragmentManager.popBackStackImmediate()
Log.i("Hiii",b.toString())
}
但是什么也没有发生,并且片段重叠。我在所有情况下都使用SupportFragmentManager
。
答案 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()
}
}