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