我在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()
。 - Kamran Ahmed