【发布时间】:2020-07-08 08:27:31
【问题描述】:
我正在尝试将我的应用程序的一部分迁移到单个活动,并且我有两种片段:我希望用户能够返回的片段,以及我只是“临时”屏幕的片段我不希望用户能够返回。
我以为我可以为此使用 backstack,但它不起作用。
对于我使用的第一个:
supportFragmentManager.commit {
replace(binding.fragmentContainer.id, MyFragment(), MyFragment.TAG)
addToBackStack(MyFragment.TAG)
}
对于第二个(“临时”屏幕),我使用:
supportFragmentManager.commit {
replace(binding.fragmentContainer.id, MyFragment())
}
当我检查supportFragmentManager.mBackStack 时,我可以看到后台堆栈已按预期设置,但似乎无关紧要,当调用onBackPressed 时,用户可以返回到不在后台堆栈上的片段。
所以我尝试像这样覆盖onBackPressed:
override fun onBackPressed() {
if (supportFragmentManager.backStackEntryCount > 1)
supportFragmentManager.popBackStack()
}
但它似乎也不起作用。
编辑:
需要明确的是,我的 Activity 中有一个名为 fragmentContainer 的 FragmentContainerView 并使用我提供的第一个代码示例添加第一个片段,然后我使用第二个代码示例添加第二个片段,然后使用第一个代码添加第三个片段样本。我的 backstack 然后看起来像这样:
- MyFirstFragment
- MyThirdFragment
“MySecondFragment”没有按预期添加到后台堆栈中,它看起来与我想要的完全一样,但是当我执行popBackstack 时,我不会回到 MyFirstFragment 而是回到 MySecondFragment,原因不明。
【问题讨论】:
标签: android android-fragments fragment-backstack