3

我在Activity.onCreate()中添加了片段(主片段),但没有将它添加到backstack中,我使用FragmentTransaction.replace()来完成。之后,我使用FragmentTransaction.replace()添加每个下一个片段,并将其添加到后台堆栈。片段在popbackstack后不可见

我有一个功能,清理后台,离开家庭片段可见,这样做我使用FragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);。如果我只添加一个片段到backstack,然后清除backstack它工作正常,但如果我添加多个然后清除backstack后屏幕是空白的,尽管主页片段收到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); 
} 
+0

尝试'fragmentManager.popBackStackImmediate()' –

+0

@KamranAhmed它并没有改变任何东西 – FullRandom

回答

2

原来新的支持库版本是搞乱的东西了。改变

compile 'com.android.support:appcompat-v7:25.1.1' 

compile 'com.android.support:appcompat-v7:25.0.1' 

后一切工作正常

+0

我有相同的问题,改变了图书馆的版本并没有帮助。你确定你没有改变你的代码中的任何东西吗? – 4gus71n

+1

不是100%,但我很确定我没有改变任何东西。 – FullRandom

4

没有为FragmentTransaction的新方法(在25.1.0版本中添加),请参阅:https://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html#setAllowOptimization(boolean)

尝试设置这样的FragmentTransaction同时:

final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();  
transaction.setAllowOptimization(true); 
transaction.replace(...); 

这解决了该问题对我来说。

贷:https://stackoverflow.com/a/42597413/5310016