【发布时间】:2017-02-27 11:13:53
【问题描述】:
我在Activity.onCreate() 中添加片段(主片段),而不将其添加到后台堆栈,我使用FragmentTransaction.replace() 来完成。之后,我使用FragmentTransaction.replace() 添加每个下一个片段并将其添加到后台堆栈。
我有一个功能可以清除后台堆栈,让主页片段可见,为此我使用FragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);。
如果我只添加 1 个片段到后台堆栈然后清除后台堆栈它工作正常,但如果我添加多个然后清除后台堆栈后屏幕是空白的,尽管主片段接收 onStart() 和 onResume() 和认为它是可见的,在我再次添加另一个片段或离开应用程序之前,它不会收到 onPause()、onStop()。
此外,如果我 popBackstack() 一个接一个(在用户操作上)它工作正常,但如果我 popBackstack() 在循环中(一次弹出所有片段)它不起作用。
代码如下:
public void changeFragment(BaseFragment fragment, boolean addToBackStack, boolean preventDuplicate) {
Fragment topFragment = getSupportFragmentManager().findFragmentById(fragmentContainer.getId());
if (preventDuplicate && topFragment != null && fragment.getClass().equals(topFragment.getClass())) {
//Prevent adding same fragment
return;
}
FragmentTransaction transaction =
fragmentManager
.beginTransaction()
.replace(fragmentContainer.getId(), fragment);
if (addToBackStack) {
transaction.addToBackStack(null);
}
transaction.commit();
}
public void goToHome() {
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
【问题讨论】:
-
试试
fragmentManager.popBackStackImmediate() -
@KamranAhmed 它没有改变任何东西
标签: android android-fragments fragmentmanager fragment-backstack