【发布时间】:2021-03-12 20:51:34
【问题描述】:
这里是repo这个bug的示例代码:
如果我连续替换 3 个片段,并禁用第二个片段添加到后台堆栈中。
fragmentManager = supportFragmentManager
val fargmentA = FragmentA()
fragmentManager.beginTransaction().replace(R.id.container, fargmentA).addToBackStack("a").commitAllowingStateLoss();
val fargmentB = FragmentB()
fragmentManager.beginTransaction().replace(R.id.container, fargmentB).disallowAddToBackStack().commitAllowingStateLoss();
val fargmentC = FargmentC()
fragmentManager.beginTransaction().replace(R.id.container, fargmentC).addToBackStack("c").commitAllowingStateLoss();
在上述事务之后,我调用了popBackStack():
val count = fragmentManager.backStackEntryCount;
for(i in 0 until count ){
fragmentManager.popBackStackImmediate()
}
我仍然可以看到从 FragmentB 调用的 onCreateView() 方法,我不允许将其添加到 backstack。
这是一个已知的错误还是片段管理器的行为方式?
谢谢!
【问题讨论】:
-
你认为
disallowAddToBackStack()在做什么?它所做的只是使您无法按照its documentation 对那个人FragmentTransaction调用addToBackStack。 -
@ianhanniballake 对,所以这意味着我没有将片段 b 事务添加到后台堆栈中,对吗?为什么popBackStack() 会恢复fragmentB?
标签: android android-fragments fragmentmanager