2017-10-12 77 views
1

我試圖替換容器中的片段。 對於可視的東西,我可以看到一個變化,新的片段被初始化。 但是,如果我檢查容器中的哪個對象,它仍然給我以前替換的舊片段,導致問題,我無法調用新片段的方法,因爲它沒有被替換爲100%。
這裏我的代碼:
Android片段實際上不會被替換

fragmentTransaction = getFragmentManager().beginTransaction(); 
    Volumefragment volumefragment = new Volumefragment(); 
    System.out.println("Change Fragment"); 
    fragmentTransaction.replace(R.id.framecontainer,volumefragment); 
    fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 
    if(getFragmentManager().findFragmentById(R.id.framecontainer) instanceof Dummyfragmenet){ 
     System.out.println("Wrong object"); 
    } 
} 

回答

3

當你做一個與該片事務提交,你真正做的是調度的替代品,片段。它不會立即發生,並且在UI線程準備好時會被替換。因此,當片段事務未完全完成時(因爲它異步發生),您的打印將被調用。如果你想確保該片段已被取代,右後提交併打印前,添加以下內容:

getFragmentManager().executePendingTransactions() 

爲了澄清,並從文檔「經過FragmentTransaction致力於與FragmentTransaction拍攝。 commit(),它被安排在進程的主線程上異步執行。「 參觀https://developer.android.com/reference/android/app/FragmentManager.html#executePendingTransactions()