【发布时间】:2017-07-24 10:42:38
【问题描述】:
当序列中的所有片段都添加到后台堆栈时,Popbackstack 工作正常,但当其中一个事务未添加到后台堆栈时,Popbackstack 工作正常。
这是我的导航:
1.替换片段以加载主页片段。此事务未添加到后台堆栈。
-
替换片段以加载登录片段。此事务已添加到 backstack。
3.替换片段以加载登录片段。此事务未添加到 backstack。
现在,当我按下后退按钮时,什么也没发生。而理想情况下,它应该从登录片段转到主片段。 这是我在主要活动中的 onbackpressed 方法:
@Override public void onBackPressed() { if(getSupportFragmentManager().getBackStackEntryCount()>0) { FragmentManager.BackStackEntry backStackEntry = getSupportFragmentManager().getBackStackEntryAt(getSupportFragmentManager().getBackStackEntryCount() - 1); String str = backStackEntry.getName(); FragmentManager fm=getSupportFragmentManager(); //getSupportFragmentManager().popBackStackImmediate(); fm.popBackStack(str, FragmentManager.POP_BACK_STACK_INCLUSIVE); } else { super.onBackPressed(); } }
【问题讨论】:
-
我认为它有效。只是您显示了两个片段(您的 LoggedInFragment 和您的 HomeFragment)。由于 LoggedInFragment 已显示在 HomeFragment 之后,因此 HomeFragment 不可见,因为 LoggedInFragment 将其隐藏。您不能指望 LoggedInFragment 在您按下返回时消失,因为事务不在后台堆栈中。
-
所以要解决您的问题,一种解决方案可能是测试当前 Fragment 是否为 LoggedInFragment。如果是这种情况,您从容器中删除片段,然后弹出返回堆栈以返回主页。
-
哇,你是绝对正确的,非常感谢。
-
但是请不要评论,而是写在答案中,这样我们都可以得分。
-
我上面的解决方案有点乱。另一个应该是将事务添加到 bs,然后当用户按下时测试它是否是 LoggedInFragment,然后弹出 bs 直到 homeFragment
标签: android android-fragments android-fragmentactivity fragment-backstack fragmentmanager